; Copyright 2005 Yasuhiro Kanzaki ;********************************************************************** ; timer2を使用した割り込みテスト・プログラム f877030.asm * list p=16f877A ; listはデバイス定義の擬似命令(ディレクティブ) #include ; デバイスに対応した変数定義のファイルを読み込む __CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _HS_OSC & _WRT_OFF & _LVP_OFF & _CPD_OFF ;***** 変数定義 t_work1 equ 020h ; 汎用レジスタを表示制御のカウンタに定義 w_temp equ 70h ; 汎用レジスタをWレジスタの保存用に定義 status_temp equ 71h ; 汎用レジスタをSTATUSレジスタ保存用に定義 ORG 000h ; プログラム開始アドレス goto main ORG 004h ; 割り込み処理の開始アドレス decfsz t_work1,f ; 256回に1回 decf PORTD,fを goto skip ; t_work1 カウントアップし0の時 decf PORTD,f ; PORTDをカウントダウン skip bcf PIR1,TMR2IF ; 割込みフラグのクリア retfie ; 割りこみ処理を終えメインルーチンに戻る org 01ch main bcf STATUS,RP0 ; メイン・ルーチン clrf PORTD movlw 003h ; プリスケーラ1:16,ポストスケーラ 1:1 movwf T2CON ;  b'00000011' bsf STATUS,RP0 ; バンク1を設定 Clrf TRISD bcf OPTION_REG,NOT_RBPU ; ポートBプルアップ bsf PIE1,TMR2IE ; タイマ2割り込みイネーブル bcf STATUS,RP0 ; バンク0 bsf INTCON,GIE ; 全体の割込み処理を許可; bsf INTCON,PEIE ; 周辺装置からの割込み処理許可 bcf PIR1,TMR2IF ; タイマ2の割込みフラグをクリア bsf T2CON,TMR2ON ; タイマ2をON bcf STATUS,Z loop swapf PORTB,W ; DIPスイッチのデータを読み込む movwf PORTD ; ポートDに出力 ; bcf INTCON,GIE ; 全体の割込み処理を禁止 bsf STATUS,RP0 ; バンク1を設定 movwf PR2 bcf STATUS,RP0 ; バンク0を設定 ; bsf INTCON,GIE ; 全体の割込み処理を許可 rep11 btfss STATUS,Z ; ゼロ・フラグチェック  goto rep11 ; Z=0ならチェックを繰り返す bcf STATUS,Z ; ゼロ・フラグをクリア  goto loop ; ポートB読み込みに戻る END ; プログラムの終了