;********************************************************************** ;TMR0 TIMER TEST1 2001.11.10 ;DEVICE : PIC16F873 ;CLOCK : 20MHz ;TMR0の割り込みを使った、インターバルタイマー動作 ;PORTBからカウントアップ出力を行なう ;内蔵TMR0のカウンタで最長13mSのインターバルを発生 ;********************************************************************** list p=16F873 #include __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSC & _LVP_OFF CNT1 EQU 20H ;アドレス20Hを変数COUNTとする。 ;********************************************************************** ORG 0 ;リセット時の開始アドレスセット GOTO MAIN ;メインルーチンMAINにジャンプ ORG 4 ;割り込みアドレスセット GOTO INTR ;割り込みルーチンINTRにジャンプ MAIN BSF STATUS,RP0 ;メモリーバンクを1にセット MOVLW 087H ;Wレジスタに87Hをセット MOVWF OPTION_REG ;TMR0 プリスケーラ256 CLRF TRISB ;TRISBをクリア PORT-Bを出力にセット BCF STATUS,RP0 ;メモリーバンクを0にセット CLRF CNT1 ;CNT1変数を00Hにクリア MOVLW 00H ;Wレジスタに00Hをセット MOVWF TMR0 ;TMR0にカウンタ初期値00Hをセット BSF INTCON,T0IE ;TMR0割り込み許可 BSF INTCON,GIE ;全体割り込みの許可 ;*********************************************************************** ;割り込みを待つループ ;*********************************************************************** LOOP NOP ;何もしない GOTO LOOP ;ラベルLOOPにジャンプ ;*********************************************************************** ;割り込み処理 ;*********************************************************************** INTR INCF CNT1,F ;変数CNT1に+1する。 MOVF CNT1,W ;WレジスタにCNT1の値をセット MOVWF PORTB ;PORTBへCNT1の値を出力 BCF INTCON,T0IF ;オーバーフローフラグのクリア BSF INTCON,T0IE ;割り込み許可フラグのセット MOVLW 00H ;Wレジスタに00Hをセット MOVWF TMR0 ;TMR0にカウント初期値00Hを再セット RETFIE ;割り込みを許可してリターン END