目次>9章 PIC18F1320編 > TMR0割込みを使う> ソース(8ビットモード)

TMR0割込みを使う(ソース)
− 8ビットモード −

更新日2008.12.21

以下のソースを取り込んで、アセンブル→PIC書き込み→実行して下さい。

; ========================== ここから ==============================
;	ファイル名	tmr0_L_08.asm
;	作成日		2008.6.20
;	作成者		mit.ueno
;	バージョン	1.0
;
;	PIC		PIC18F1320
;	クロック	10MHz
;	概要
;		TMR0割込み(8ビット)でLEDを1秒毎に点滅
;		IPEN=0(PIC16互換割込み)で使用
;	使用ポート
;		RB0:LED
;		RB1:LED
;
;	TMR0割込み(8ビットタイマ)
;		clock	10MHz
;		命令	0.4uS
;		presc	256
;		TMR0L	128
;		周期	0.4uS * 256 * 128 = 13.1mS
;		1秒	1000 / 13.1 = 76 (TMR0割込み76回で1秒)
;
;
	LIST	P=18F1320
	INCLUDE	P18F1320.INC

	CONFIG	OSC = HS


; ******** GPR ***********************************
	CBLOCK	0x080
	WREG_TEMP	;WREG save area
	STATUS_TEMP	;STATUS save area
	BSR_TEMP	;BSR save area
	ENDC

	CBLOCK	0x000
	CNT1S
	flag
	ENDC

CNT1S_i	EQU	d'76'
TMR0_i	EQU	d'128'
f_1S	EQU	0

; ******** リセットベクタ ***************************
	ORG	0x0000
	GOTO	init

; ******** 割込みベクタ *****************************
	ORG	0x0008
	MOVFF	STATUS,STATUS_TEMP	;save STATUS
	MOVFF	WREG,WREG_TEMP		;save WREG
	MOVFF	BSR,BSR_TEMP		;save BSR

	MOVLW	TMR0_i
	MOVWF	TMR0L
	BCF	INTCON,TMR0IF

	DECFSZ	CNT1S		;1秒カウンタ−1
	GOTO	LP_int90
	BSF	flag,f_1S	;1秒経過フラグセット
	MOVLW	CNT1S_i
	MOVWF	CNT1S		;1秒カウンタ初期化

LP_int90
	MOVFF	BSR_TEMP,BSR		;restore BSR
	MOVFF	WREG_TEMP,WREG		;restore WREG
	MOVFF	STATUS_TEMP,STATUS	;restore STATUS
	RETFIE

; ******** 初期処理 *********************************
init
	MOVLW	0xFC
	MOVWF	TRISB		;RB0,1:Output(LED)
	MOVLW	0x7F
	MOVWF	ADCON1		;A/D未使用

	MOVLW	0x01
	MOVWF	PORTB

	CLRF	flag
	MOVLW	CNT1S_i
	MOVWF	CNT1S		;1秒カウンタ初期化

	MOVLW	0xC7
	MOVWF	T0CON		;TMR0 enable,8bit,presc256
	MOVLW	TMR0_i
	MOVWF	TMR0L
	BSF	INTCON,TMR0IE	;TMR0割込み許可
	BSF	INTCON,GIE	;全割込み許可

; ******** メイン処理 *******************************
main
	BTFSS	flag,f_1S	;1秒経過フラグセット?
	GOTO	main		; No
	BCF	flag,f_1S	;1秒経過フラグクリア

	MOVLW	0x03
	XORWF	PORTB,F		;RB0,1のLEDを交互に点滅
	GOTO	main

	END
; ========================== ここまで ==============================