;***********************************************************
; training program for PIC16F84A
; step7ex.asm, H. OSADA, Nov. 2004
;***********************************************************
;
;=================================================
; definitions
;=================================================
;- hardware -----------------------------------
LIST P=PIC16F84A
#INCLUDE "P16F84A.INC"
;
__CONFIG _HS_OSC & _WDT_OFF & _PWRTE_ON
& _CP_OFF
;
;- constant label -----------------------------
INTERVAL EQU 0D9H ;10ms
main interval timer
;
;- file register ------------------------------
CBLOCK 0CH
W_temp
;Wreg temp register
STATUS_temp
;STATUS temp register
ENDC
;
;=================================================
; run start
;=================================================
;- reset start --------------------------------
ORG 0
GOTO INIT
;
;- interrupt start ----------------------------
ORG 4
GOTO ISR
;
;- initialize ---------------------------------
INIT
BSF STATUS,RP0
;set Bank1
MOVLW 087H
;prescale 256
MOVWF OPTION_REG
BCF STATUS,RP0
;set Bank0
;
;TIMER0 start --------------------------
MOVLW INTERVAL
;TIMER0 interval counter preset
MOVWF TMR0
BSF INTCON,T0IE
;TIMER0 enabled
BSF INTCON,GIE
;all interrupt enabled
;
;=================================================
; main routine
;=================================================
MAIN
GOTO MAIN
;
;=================================================
; interrupt service routine
;=================================================
ISR
;- save resisters -----------------------------
PUSH
MOVWF W_temp
SWAPF STATUS,W
MOVWF STATUS_temp
;
;- mode check ---------------------------------
BTFSC INTCON,T0IF
GOTO ISR_TIM0
GOTO POP
;
;----------------------------------------------
; TIMER0 interrupt operation
;----------------------------------------------
ISR_TIM0
BCF INTCON,T0IF
;interrupu flag clear
MOVLW INTERVAL
;TIMER0 counter preset
MOVWF TMR0
;
;** procedure
;
;
;- restore resisters and return to main -------
POP
SWAPF STATUS_temp,W
MOVWF STATUS
SWAPF W_temp,F
SWAPF W_temp,W
RETFIE
;
;=================================================
; subroutine
;=================================================
;** procedure
;
;***********************************************************
END |
|
■プログラムタイトル
タイトル
ファイル名 作者 日付等
◇各種定義
■ハードウェア定義
プロセッサの種類を指定
インクルードファイルの設定
コンフィグビットの設定
■定数ラベル定義
TMR0 初期値宣言
■変数レジスタ定義
0CH 番地より定数領域確保
(0CH)Wreg の一時保存用
(0DH)STATUS の一時保存用
定数領域確保終了
◇実行開始
リセット番地の指定
(必ず 0 番地)
初期化処理へジャンプ
割り込み番地の設定
(必ず 4 番地)
割り込み処理へジャンプ
■初期設定
レジスタBankを1に設定
プリスケーラ設定(1/256)
レジスタ Bank を 0 に戻す
タイマ0 初期設定
インターバル初期値設定
タイマ0 割り込み許可
全割り込み許可
■メインルーチン
(永久ループ)
■割り込み処理ルーチン
◇レジスタ格納処理
Wreg
STATUS
◇割り込み要因判定
タイマ0であればISR_TIM0へ
そうでなければPOPへ分岐
◇タイマ0 処理
割り込みフラグクリア
TMR0 初期値再設定
「ここにインターバルタイマで行う処理を書く」
◇レジスタ復帰処理
STATUS
Wreg
■サブルーチン
「ここにサブルーチン処理を書く」
◇プログラム終了
|
|