目次>9章 PIC18F1320編 > 優先/非優先割込みを使う> ソース
優先/非優先割込みを使う(ソース)
更新日2009.1.25
以下のソースを取り込んで、アセンブル→PIC書き込み→実行して下さい。
; ========================== ここから ============================== ; ファイル名 tmr0_pin.asm ; 作成日 2008.6.22 ; 作成者 mit.ueno ; バージョン 1.0 ; ; PIC PIC18F1320 ; クロック 10MHz ; 概要 ; TMR0割込み(16ビット)でLEDを1秒毎に点滅 ; PORTBピン変化割込み処理中でもTMR0割込み発生を確認 ; IPEN=1(TMR0優先,ピン変化非優先) ; 使用ポート ; RB0:LED ; RB1:LED ; RB4:プッシュボタンスイッチ ; ; TMR0割込み(16ビットタイマ) ; clock 10MHz ; 命令 0.4uS ; presc 64 ; TMR0 フリーラン ; 周期 0.4uS * 64 * 65536 = 1.678S ; ; LIST P=18F1320 INCLUDE P18F1320.INC __CONFIG _CONFIG1H, _HS_OSC_1H & _IESO_OFF_1H ; ******** GPR *********************************** CBLOCK 0x080 WREG_TEMP ;WREG save area STATUS_TEMP ;STATUS save area BSR_TEMP ;BSR save area ENDC ; ******** リセットベクタ *************************** ORG 0x0000 BRA init ; ******** 高優先度割込みベクタ (TMR0) ************** ORG 0x0008 BRA int_high ; ******** 低優先度割込みベクタ (ピン変化) ********** ORG 0x0018 MOVFF STATUS,STATUS_TEMP ;save STATUS MOVFF WREG,WREG_TEMP ;save WREG MOVFF BSR,BSR_TEMP ;save BSR BSF PORTB,1 ;RB1のLEDを点灯 LP_pin10 BTFSC PORTB,0 ;RB0が0になるのを待つ BRA LP_pin10 ; (TMR0割込みでON/OFFする) BCF PORTB,1 ;RB1のLEDを消灯 BCF INTCON,RBIF MOVFF BSR_TEMP,BSR ;restore BSR MOVFF WREG_TEMP,WREG ;restore WREG MOVFF STATUS_TEMP,STATUS ;restore STATUS RETFIE ; ******** 高優先度割込み処理 (TMR0) **************** int_high BCF INTCON,TMR0IF MOVLW 0x01 XORWF PORTB,F RETFIE FAST ; ******** 初期処理 ********************************* init MOVLW 0xFC MOVWF TRISB ;RB0,1:Output(LED) MOVLW 0x7F MOVWF ADCON1 ;A/D未使用 MOVLW 0x01 MOVWF PORTB MOVLW 0x85 MOVWF T0CON ;TMR0 enable,16bit,presc64 CLRF TMR0H CLRF TMR0L BSF RCON,IPEN ;割込み優先度使用 MOVLW 0x84 MOVWF INTCON2 ;TMR0-優先,ピン変化-非優先 MOVLW 0xE8 MOVWF INTCON ;高優先/低優先/TMR0/ピン変化割込み許可 ; ******** メイン処理 ******************************* main BRA main END ; ========================== ここまで ==============================