;***********************************************************
; step03 for PIC16F84A
; step03.asm, H. OSADA, Oct. 2021
;***********************************************************
;
;=================================================
; definitions
;=================================================
;- hardware -----------------------------------
LIST P=PIC16F84A
#INCLUDE "P16F84A.INC"
;
__CONFIG _HS_OSC & _WDT_OFF & _PWRTE_ON
& _CP_OFF
;
;- constant label -----------------------------
INTERVAL EQU 03DH ;main interval
timer
;
;- file register ------------------------------
CBLOCK 0CH
counter
;main counter
cnt_1ms
;1ms timer counter
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 00FH
MOVWF TRISB
;set Port B dir
MOVLW 087H
;prescale 256
MOVWF OPTION_REG
BCF STATUS,RP0 ;set Bank0
;
;TIMER0 ---------------------------------
MOVLW INTERVAL ;TIMER0 preset
MOVWF TMR0
BSF INTCON,T0IE
;TIMER0 enabled
BSF INTCON,GIE
;all interrupt enabled
;
;=================================================
; main routine
;=================================================
MAIN
CALL T1ms
BREAK
GOTO MAIN
;
;=================================================
; interrupt service routine
;=================================================
ISR
;- TIMER0 reset -------------------------------
BCF INTCON,T0IF
;interrupu flag clear
MOVLW INTERVAL
;TIMER0 preset
MOVWF TMR0
;
;- counter increment --------------------------
INCD counter,F
;counter = counter + 1
;
;- return to main routine ---------------------
RETFIE
;
;=================================================
; subroutine
;=================================================
;---------------------------------------
; 1ms timer (1cycle=1us)
;---------------------------------------
T1ms
MOVLW 0F9H
MOVWF cnt_1ms
;2cycle
L_T1ms
NOP
DECFSZ cnt_1ms,F
GOTO L_T1ms
;4*249-1=995cycle
RETURN ;2+995+1=998cycle
;
;***********************************************************
END |
|
■プログラムタイトル
タイトル
ファイル名 作者 日付等
◇各種定義◇
■ハードウェア定義
プロセッサの種類を指定
インクルードファイルの設定
コンフィグビットの設定
■定数ラベル定義 TMR0 初期値宣言
■変数レジスタ定義
0CH番地より定数領域確保
(0CH)メインカウンタ
(0DH)1msタイマカウンタ
(0EH)Wregの一時保存用
(0FH)STATUSの一時保存用
定数領域確保終了
◇実行開始◇
リセット番地の指定
(必ず0番地)
初期化処理へジャンプ
割り込み番地の設定
(必ず4番地)
割り込み処理へジャンプ
■初期設定
ポートBの入出力方向を設定
レジスタBankを1に設定
TRISBレジスタに書き込み
(7:4出力,3:0入力)
プリスケーラ設定
レジスタBankを0に戻す
タイマ0初期設定
インターバル初期値設定
タイマ0割り込み許可
全割り込み許可
■メインルーチン
(永久ループ)
メインルーチンでの処理内容
(1ms待ちサブルーチン実行)
MAINへ戻る
■割り込み処理ルーチン
タイマ0割り込みフラグクリア
インターバル初期値再設定
割り込み処理の内容
メインへ復帰
■サブルーチン
【1msタイマ】
0F9H(249)回のループを
CNT_1に設定
1サイクル調整
CNT_1 - 1が0でなげれば
L_T1mへジャンプ
0ならリターン
◇プログラム終了◇ |
|