タイマー設定コーディングサンプル
5分後自動的に閉じます(閉じない場合はブラウザの ボタンで閉じて下さい) [閉じる] 
(検索エンジンから直接こられた方はこちら  Home  Old piC) 
(1)初期化  (2)割込処理  (3)通信処理  (4)モニター  頁最後尾

(1)初期化
;---------------------------------------------------------------
; 割込制御設定:TMR0 割込許可	;INTCON Initialize Data
;---------------------------------------------------------------
S_INTC	EQU	B'10100000'	;TMR0 Onry
;                 |||||||+GPIF x:Port Change Interrupt Flag bit
;                 ||||||+ INTF x:GP2/INT External Interrupt Flag bit
;                 |||||+- T0IF x:TMR0 Over Flow Flag
;                 ||||+-- GPIE 0:Disables the GPIO port change interrupt
;                 |||+--- INTE 0;Disables the GP2/INT external interrupt
;                 ||+---- T0IE 1:Enables the TMR0 interrupt
;                 |+----- PEIE 0:Disables all peripheral interrupts
;                 +------ GIE  1:Enables all unmasked interrupts
;
;---------------------------------------------------------------
; TMR0 制御設定		;TMR0/WDT Control
;---------------------------------------------------------------
;S_OPTF	EQU	B'00000000'	;Pre Scaler=TMR0(1/2)
;                 |||||+++------ WDT =000:1/1, 001:1/2, 010:1/4
;                 |||||+++------ TRM0=000:1/2, 001:1/4, 010:1/8
;                 ||||+--------- Pre Scaler 0:TMR0(1/2) 1:WDT(1/1)
;                 |||+---------- T0SE  0:L-->H, H-->L
;                 ||+----------- T0SC  0:Int Clock
;                 |+------------ 0=INTEDG:falldown
;                 +------------- /GPIO Pul Up  0:Enable
;---------------------------------------------------------------
; TMR0 プリセット値
;---------------------------------------------------------------
;			;TMR0 Pre Set Value    256-(T*F/P)=ccc
;			;F:4MHz, P:1, T:208uS (256-208)+18=66
;			;18:オーバーヘッド補正値
;---------------------------------------------------------------
;(4, 8, 16倍クロック相当の)割込間隔を条件アセンブルで切替える方法
;---------------------------------------------------------------
S_RESO	EQU	8		;8(分割) アセンブル条件セット
;
;S_RESO	EQU	4		8		16
;TMR0 周期	832uS		416uS		208uS
;20mSタイマカウント値
;S_T02S	EQU	24		48		96
;Pre Scaler設定	TMR0:1/4  	TMR0:1/2  	WDT(1/1)
;S_OPTF	EQU	B'00000001'	B'00000000'	B'00001000'
;
;---------------------------------------------------------------
	IF	S_RESO==4	;
;S_TMR0	EQU	(42:受信できない) 48,54,60 (66:文字化け)
S_TMR0	EQU	54	;F:4MHz, P:1, T:208uS (256-208)+6=54
S_T02S	EQU	24
S_OPTF	EQU	B'00000001'	;Pre Scaler=TMR0:1/4
	ENDIF
;
	IF	S_RESO==8	
;S_TMR0	EQU	(42:受信できない) 48,54,60 (66:先頭文字化け)
S_TMR0	EQU	54	;F:4MHz, P:2, T:416uS (256-208)+6=54
S_T02S	EQU	48
S_OPTF	EQU	B'00000000'	;Pre Scaler=TMR0:1/2
	ENDIF
	IF	S_RESO==16	
;S_TMR0	EQU	(48:受信できない) 54,60,66 (72:先頭文字化け)
S_TMR0	EQU	60	;F:4MHz, P:1, T:208uS (256-208)+12=60
S_T02S	EQU	96
S_OPTF	EQU	B'00001000'	;Pre Scaler=WDT(TMR0:1/1)
	ENDIF

;---------------------------------------------------------------
; 初期化処理
;---------------------------------------------------------------
INIT	CLRF	INTCON
;				;TMR0/WDT Control
	BCF	STATUS,RP0
	MOVLW	B'00000000'	;Init GPIO
	MOVWF	GPIO
	MOVLW	B'00000111'	;Comp NotUse
	MOVWF	CMCON
;
	MOVLW	B'00001111'	;GPIO(0:out 1:in)
	BSF	STATUS,RP0
	MOVWF	TRISIO		;TRIS GPIO
;
	MOVLW	B'00000000'	;WPU (1:Pull-Up)
	MOVWF	WPU		;Week Pull Up
;
	BCF	STATUS,RP0
	MOVLW	B'00110000'	;Init GPIO
	MOVWF	GPIO
;-------------------------------;A/D 
	MOVLW	B'00000001'
;		  ||  |||+------;1:ADON
;		  ||  ||+-------;0:GO/1:DONE
;		  ||  ++--------;00:AN0,,,11:AN3
;		  |+------------;0:VDD,1:VREF
;		  +-------------;0:LJst,1:RJst
	MOVWF	ADCON0
;
	BSF	STATUS,RP0
	MOVLW	B'00010111'
;		GP |||4210 
;		   |||++++------;ANS3:ANS0 (1:AN, 0:DI/O)
;		   +++----------;ADCS:001 (8TOSC 4MHz:2.0uS)
	MOVWF	ANSEL
;
;-------------------------------; INTCON Initialize
	BSF	STATUS,RP0
	MOVLW	S_OPTF		;TMR0 Pre Scaler / WDT Initialize
	MOVWF	OPTREG		;OPTION Register
	BCF	STATUS,RP0
	MOVLW	S_TMR0		;TMR0 Pre Set
	MOVWF	TMR0
;
	MOVLW	S_INTC		;INTCON Set
	MOVWF	INTCON		;
;---------------------------------------------------------------
;	その他ワークエリアの初期化など
;	CLRF	xxxxxx
;	....	......
;---------------------------------------------------------------
	RETURN			;Initialize end

頁先頭部  (1)初期化  (2)割込処理  (3)通信処理  (4)モニター  頁最後尾


(2)割込処理
	ORG	0x004		;Interrupt vector
;===============================================================
; Interrupt Service
;===============================================================
;---------------------------------------------------------------
;				;save register
;---------------------------------------------------------------
PUSH	MOVWF	W_WREG		;Save W reg.
	SWAPF	W_WREG,1
	SWAPF	STATUS,0	;Get status
	MOVWF	W_STAT		;Save it
	MOVF	FSR,W		;Save SFR
	MOVWF	W_FSR_
;
;---------------------------------------------------------------
;	Interrupt source analize
;---------------------------------------------------------------
	BCF	STATUS,RP0	;BANK0
	BTFSS	INTCON,T0IF	;TMR0 Over Flow ?
	GOTO	INIINT		;init
;
;---------------------------------------------------------------
;	TMR0 Service		416uS 毎割込
;---------------------------------------------------------------
;S_TMR0	EQU	66	;0x42	F:4MHz, P:2, T:416uS (256-208)+18=66
;S_TMR0	EQU	63	;0x3F	F:4MHz, P:2, T:416uS (256-208)+15=63
;S_TMR0	EQU	57	;0x39	F:4MHz, P:2, T:416uS (256-208)+ 9=57
;
INTRTC
	MOVF	S_TMR0,W	;TMR0 data (from EEPROM)
;	MOVLW	S_TMR0		;TMR0 Pre Set
	MOVWF	TMR0
;
	BCF	INTCON,T0IF	;clr int flag
;
;---------------------------------------------------------------
;				;RX data input
;---------------------------------------------------------------
;			;RX status              _________
;	WTRSTS,0	;RX Busy flag  _________ RX Busy ______
;	WTRSTS,1	;RX Done flag  ______            ______
;			;              (read)____________ Done
;---------------------------------------------------------------
	BTFSC	WTRSTS,0	;
	GOTO	INTRX1		;    RX Busy
;				;not RX Busy
;				;---------- bit 0 process ------
	BTFSC	GPIO,3		;RX Start Bit Check
	GOTO	INTTX0		;   not Start
;				;   Start
;---------------------------------------------------------------
	BTFSC	WTRSTS,1	;RX Over run Err Check
	GOTO	INTRX9		;   Over run Err(not read)
;
;	MOVLW	16		;---------- Start bit process --
	MOVLW	8		;---------- Start bit process --
;******	MOVF	C_CLKC,W
	MOVWF	WRXCC_
	BCF	STATUS,C
	RRF	WRXCC_,F	;1/2:half bit time set
	MOVLW	0xF0
	ANDWF	WTRBC_,F	;Clear RX bit count
	BSF	WTRSTS,0	;RX Busy set
	GOTO	INTTX0
;
INTRX9	BSF	WTRSTS,2	;RX Over run Err Flag set
	BSF	WTRSTS,1	;RX Done Flag set
	BCF	WTRSTS,0	;RX Busy flag reset
	GOTO	INTTX0
;
INTRX1	DECFSZ	WRXCC_,F	;---------- 1 bit time counter -
	GOTO	INTTX0		;WRXCC_><0
;				;       =0
;	MOVLW	16		;---------- Start bit process --
	MOVLW	8		;---------- Start bit process --
;******	MOVF	C_CLKC,W
	MOVWF	WRXCC_
;				;---------- bit 0-9 process ----
	MOVF	WTRBC_,W	;WTRBC_,3:0   RX bit count
	ANDLW	0x0F
	SUBLW	8		;8-(W)
	BTFSC	STATUS,C
	GOTO	INTRXR		;8   >= count
;				;8(9)<  count
;				;1BYTE input conplete
	MOVF	WRXDT_,W
	MOVWF	WRXDTB		;set RX buffer
	CLRF	WRXDT_
	BCF	WTRSTS,3	;RX Frameing Err Flag
	BCF	WTRSTS,2	;RX Over run Err Flag
	BSF	WTRSTS,1	;RX Done Flag set
	BCF	WTRSTS,0	;RX Busy flag reset
	MOVLW	0xF0
	ANDWF	WTRBC_,F	;Clear RX bit count
;				;-------------------------------
	BTFSC	GPIO,3		;RX Stop Bit Check
	GOTO	INTTX0		;Stop Bit:1  OK
	BSF	WTRSTS,3	;RX Frameing Err
;				;-------------------------------
	GOTO	INTTX0
;
INTRXR	BSF	STATUS,C
	BTFSS	GPIO,3		;  ---> C
	BCF	STATUS,C
	RRF	WRXDT_,F	;C ---> WRXDT_   1bit input
	INCF	WTRBC_,F
;
;---------------------------------------------------------------
;				;TX data output
;---------------------------------------------------------------
INTTX0
	BTFSC	WTRSTS,5
	GOTO	INTTX9		;TX Done
;				;   Start
	BTFSC	WTRSTS,4	;
	GOTO	INTTXB		;TX Busy
;				;   not Busy
;				;       =0
;	MOVLW	16		;---------- clk counter set(1st)
	MOVLW	8		;---------- clk counter set(1st)
;******	MOVF	C_CLKC,W
	MOVWF	WRXCC_
;				;---------- Start bit process --
	BSF	WTRSTS,4	;TX Busy flag set
	MOVLW	0x0F
	ANDWF	WTRBC_,F	;Clear TX bit count
	GOTO	INTTXL		;0 count [Start Bit ---> Lo]
;
INTTXB	DECFSZ	WTXCC_,F	;---------- 1 bit time counter -
	GOTO	INTTX9		;WTXCC_><0
;				;       =0
;	MOVLW	16		;---------- clk counter set(1st)
	MOVLW	8		;---------- clk counter set(1st)
;******	MOVF	C_CLKC,W
	MOVWF	WTXCC_
;
	SWAPF	WTRBC_,W	;WTRBC_,7:4   TX bit count
	ANDLW	0x0F
	SUBLW	10		;10-(W)
	BTFSS	STATUS,Z
	GOTO	INTTXT		;10><(W)
;				;10= (W)
;				;---------- TX Done ------------
	BSF	GPIO,4		;keep Hi
	BSF	WTRSTS,5	;TX Done flag set
	BCF	WTRSTS,4	;TX Busy flag reset
	GOTO	INTTX9
;
INTTXT	SWAPF	WTRBC_,W	;WTRBC_,7:4   TX bit count
	ANDLW	0x0F
	SUBLW	9		;9-(W)
	BTFSC	STATUS,Z
;				;9 count [Stop Bit ---> Hi]
	GOTO	INTTXH		;---------- Stop bit process ---
;				;9><(W)
	BSF	STATUS,C
	RRF	WTXDT_,F	;1 ---> [7]---[0] ---> C
	BTFSC	STATUS,C
	GOTO	INTTXH		;Hi
;				;Lo
INTTXL	BCF	GPIO,4		;output Lo,   [Start Bit]
	GOTO	INTRTZ
;
INTTXH	BSF	GPIO,4		;output Hi,   [Stop Bit]
;
INTRTZ	MOVLW	0x10
	ADDWF	WTRBC_,F	;INC TX bit count
INTTX9
;
;【その他 208uS(or 416uS)毎の割込み処理】
;	A/D変換のチャンネル切替・変換開始・データ読取・平均化 など
;
;---------------------------------------------------------------
;	superviser process	;Timer process
;---------------------------------------------------------------
;
;WT_02S	EQU	0x2B	;Timer count 20mS	208uSx96=20mS
;						416uSx48=20nS
;WT_SEC	EQU	0x2C	;  //   //    1 Sec	x50=1Sec
;WT_MIN	EQU	0x2D	;  //   //    1 Min	x60=1Min■■■未使用■■■
;WT_HUR	EQU	0x2E	;  //   //    1 Hur	x60=1Hur■■■未使用■■■
;W_SEC_	EQU	0x2F	;OFF Delay timer
;W_HUR_	EQU	0x30	;Chage timer
;---------------------------------------------------------------
INTRT1
	DECFSZ	WT_02S,F	;20mS Timer
	GOTO	PULL		;not 0
;	MOVLW	96		;TM0=208uS
	MOVLW	48		;TM0=416uS
	MOVWF	WT_02S
;-------------------------------;(20mS)	Interval Process
;
;【20mS毎の割込み処理】
;	スイッチのチャタリングキャンセル処理
;	スイッチの長押し判定処理
;	LED・ブザーの点滅・吹鳴のパターン生成処理
;
INT004
;
;---------------------------------------------------------------
	DECFSZ	WT_SEC,F	;1Sec Timer
	GOTO	PULL
	MOVLW	50
	MOVWF	WT_SEC
;-------------------------------;(1S)	Interval Process
;
;
;【1秒毎の割込み処理:起動処理、LED・ブザー処理など】
;
;
;---------------------------------------------------------------
;	DECFSZ	WT_MIN,F	;1Min Timer
;	GOTO	PULL
;	MOVLW	60
;	MOVWF	WT_MIN
;-------------------------------;(1M)	Interval Process
;
;---------------------------------------------------------------
;	DECFSZ	WT_HUR,F	;1Hur Timer
;	GOTO	PULL
;	MOVLW	60
;	MOVWF	WT_HUR
;-------------------------------;(1H)	Interval Process
;
;---------------------------------------------------------------
	GOTO	PULL
;
;---------------------------------------------------------------
;				;Restore register
;---------------------------------------------------------------
INIINT	MOVLW	S_INTC		;init
	MOVWF	INTCON
PULL	MOVF	W_FSR_,W	;Restore FSR
	MOVWF	FSR
	SWAPF	W_STAT,0	;Restore status
	MOVWF	STATUS
	SWAPF	W_WREG,0	;Restore W reg.
	RETFIE
;---------------------------------------------------------------
;				End of Interrupt Service
;---------------------------------------------------------------

頁先頭部  (1)初期化  (2)割込処理  (3)通信処理  (4)モニター  頁最後尾


(3)通信処理
1 通信処理サンプル
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0

頁先頭部  (1)初期化  (2)割込処理  (3)通信処理  (4)モニター  頁最後尾


(4)モニター
1 モニターサンプル
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0

頁先頭部  (1)初期化  (2)割込処理  (3)通信処理  (4)モニター


検索エンジンから直接こられた方はこちら  Home  Old piC)   PageTop  閉じる