プログラム編の最終です。
これまで簡単な説明と共にプログラムを紹介してきました。今回はプログラムのみをすべて紹介します。
一度紹介しておりますが、少し変更があったので・・・
これで「自作イグナイタシリーズ」も終わりかと思いましたが、先日久々にCB-Fに乗ったとこを失火の嵐???
終いには走行不能に・・・
ノーマルイグナイタを搭載していたので事なきを得ましたが、今のところ原因が解らず(涙
ハードなのかソフトなのか???もうしばらく連載は続くようです(笑
ここからプログラムソース↓
;**************************************************************;
;PIC12F683;
;コンパレーター;
;GP0アナログ入力、GP2出力;
;GP1アナログ入力、GP4出力;
;GP5タコメーター出力;
;**************************************************************;
errorlevel -302 ; Suppress message 302
errorlevel -305 ; Suppress message 305
;PIC12F683;
;コンパレーター;
;GP0アナログ入力、GP2出力;
;GP1アナログ入力、GP4出力;
;GP5タコメーター出力;
;**************************************************************;
errorlevel -302 ; Suppress message 302
errorlevel -305 ; Suppress message 305
LIST P=12f683
#INCLUDE <p12f683.inc>
#INCLUDE <p12f683.inc>
__CONFIG _CP_OFF & _CPD_OFF & _WDT_ON & _BOD_ON & _IESO_OFF& _PWRTE_ON & _INTOSCIO & _MCLRE_OFF
CBLOCK 020h
W_TEMP ;割り込み時Wレジスタセーブ用;
STATUS_TEMP ;ステータスセーブ用;
PCLATH_TEMP ;PCLATHセーブ用;
T05mCNT ;1mSループカウンタ;
T1mCNT ;100msループカウンタ;
T50mCNT ;20msループカウンタ;
TH ;TIM1HIカウンター;
TL ;TIM1LOWカウンター;
LMHI ;リミッターHIカウンター;
LMLO ;リミッターLOカウンター;
OV_F ;タイマー1オーバーフロー用;
DETIM ;ドエルタイム設定用;
DETIM2 ;ドエルタイム計算用;
DETIM4 ;気等判別フラグ;
OPNF ;オープニングデモフラグ;
OPN ;オープニングデモカウンタ1;
OPN2 ;オープニングデモカウンタ2
ENDC
W_TEMP ;割り込み時Wレジスタセーブ用;
STATUS_TEMP ;ステータスセーブ用;
PCLATH_TEMP ;PCLATHセーブ用;
T05mCNT ;1mSループカウンタ;
T1mCNT ;100msループカウンタ;
T50mCNT ;20msループカウンタ;
TH ;TIM1HIカウンター;
TL ;TIM1LOWカウンター;
LMHI ;リミッターHIカウンター;
LMLO ;リミッターLOカウンター;
OV_F ;タイマー1オーバーフロー用;
DETIM ;ドエルタイム設定用;
DETIM2 ;ドエルタイム計算用;
DETIM4 ;気等判別フラグ;
OPNF ;オープニングデモフラグ;
OPN ;オープニングデモカウンタ1;
OPN2 ;オープニングデモカウンタ2
ENDC
ORG 0 ;Reset Start
GOTO INIT
ORG 0X4
MOVWF W_TEMP ;Wレジスタセーブ
SWAPF STATUS,W
CLRF STATUS
MOVWF STATUS_TEMP
MOVFW PCLATH
MOVWF PCLATH_TEMP ;
CLRF PCLATH
BTFSC PIR1,0
GOTO T1
GOTO T0
T1
BCF PIR1,0 ;TMR1割り込みフラグリセット;
BSF OV_F,1
GOTO WA
T0
BCF INTCON,2 ;TMR0割り込みフラグリセット;
BTFSC DETIM4,0
GOTO TT100
BSF GPIO,2
BSF GPIO,5
BCF INTCON,5 ;TMR0割り込み禁止;
BTFSC DETIM4,7
GOTO TTT1
GOTO WA
TT100
BSF GPIO,4
BCF DETIM4,0
BCF INTCON,5 ;TMR0割り込み禁止;
BTFSC DETIM4,7
GOTO TTT1
GOTO WA
BSF GPIO,5
BCF INTCON,5 ;TMR0割り込み禁止;
BTFSC DETIM4,7
GOTO TTT1
GOTO WA
TT100
BSF GPIO,4
BCF DETIM4,0
BCF INTCON,5 ;TMR0割り込み禁止;
BTFSC DETIM4,7
GOTO TTT1
GOTO WA
TTT1
BCF GPIO,2
BCF GPIO,4
BCF DETIM4,7
GOTO WA
BCF GPIO,2
BCF GPIO,4
BCF DETIM4,7
GOTO WA
WA
MOVFW PCLATH_TEMP
MOVWF PCLATH
SWAPF STATUS_TEMP,W
MOVWF STATUS
SWAPF W_TEMP,F
SWAPF W_TEMP,W
RETFIE
MOVFW PCLATH_TEMP
MOVWF PCLATH
SWAPF STATUS_TEMP,W
MOVWF STATUS
SWAPF W_TEMP,F
SWAPF W_TEMP,W
RETFIE
; PICの初期化
INIT
; GPIO(GP2-5)をデジタルI/Oに設定
MOVLW B'00011110'
MOVWF CMCON0 ;GP0,1コンパレーター入力;
BSF STATUS,RP0 ;バンク1;
MOVLW B'01110000' ;内部クロックを8MHzに設定;
MOVWF OSCCON ;CLOCK=8MHz;
MOVLW B'10000101' ;10100010;
MOVWF VRCON ;基準電圧の設定 低電圧2.03V;
MOVLW B'00000001' ;
MOVWF PIE1 ;TMR1割り込み許可;
MOVLW B'11100000' ;
MOVWF INTCON ;割り込み許可;
MOVLW B'11010111' ;
MOVWF OPTION_REG ;;
INIT
; GPIO(GP2-5)をデジタルI/Oに設定
MOVLW B'00011110'
MOVWF CMCON0 ;GP0,1コンパレーター入力;
BSF STATUS,RP0 ;バンク1;
MOVLW B'01110000' ;内部クロックを8MHzに設定;
MOVWF OSCCON ;CLOCK=8MHz;
MOVLW B'10000101' ;10100010;
MOVWF VRCON ;基準電圧の設定 低電圧2.03V;
MOVLW B'00000001' ;
MOVWF PIE1 ;TMR1割り込み許可;
MOVLW B'11100000' ;
MOVWF INTCON ;割り込み許可;
MOVLW B'11010111' ;
MOVWF OPTION_REG ;;
CLRF ANSEL
MOVLW B'00000011' ;1=入力;
MOVWF TRISIO ;GP0,1は入力;
BCF STATUS,RP0 ;バンク0;
MOVLW B'00010100' ;;
MOVWF WDTCON ;ウォッチドッグON 1024ms;
MOVLW D'23' ;256*23=5888;
MOVWF LMHI ;リミッター設定HI;
MOVLW D'112' ;112+5888=6000us=10000rpm;
MOVWF LMLO ;リミッター設定LOW;
MOVLW B'00000011' ;1=入力;
MOVWF TRISIO ;GP0,1は入力;
BCF STATUS,RP0 ;バンク0;
MOVLW B'00010100' ;;
MOVWF WDTCON ;ウォッチドッグON 1024ms;
MOVLW D'23' ;256*23=5888;
MOVWF LMHI ;リミッター設定HI;
MOVLW D'112' ;112+5888=6000us=10000rpm;
MOVWF LMLO ;リミッター設定LOW;
MOVLW D'54' ;128*54=6912us;
MOVWF DETIM ;ドエルタイム設定;
MOVWF DETIM ;ドエルタイム設定;
BCF PIR1,3
BCF GPIO,2
BCF GPIO,4
BCF GPIO,5
BCF GPIO,2
BCF GPIO,4
BCF GPIO,5
LOWST
BSF STATUS,RP0 ;バンク1;
MOVLW B'10000101' ;
MOVWF VRCON ;基準電圧の設定 低電圧2.03V;
BCF STATUS,RP0 ;バンク0;
MOVLW B'00100001' ;B'00110001' ;プリスケーラ4倍 2us;
MOVWF T1CON ;4us1カウント、LOW1024us、HI262.144ms、229rpm;
BCF INTCON,5 ;TMR0割り込み禁止;
BCF OV_F,1
CLRWDT
BCF CMCON0,3 ;GP1選択;
;***********************
;オープニングデモ;
;***********************
BSF STATUS,RP0 ;バンク1;
MOVLW B'10000101' ;
MOVWF VRCON ;基準電圧の設定 低電圧2.03V;
BCF STATUS,RP0 ;バンク0;
MOVLW B'00100001' ;B'00110001' ;プリスケーラ4倍 2us;
MOVWF T1CON ;4us1カウント、LOW1024us、HI262.144ms、229rpm;
BCF INTCON,5 ;TMR0割り込み禁止;
BCF OV_F,1
CLRWDT
BCF CMCON0,3 ;GP1選択;
;***********************
;オープニングデモ;
;***********************
BTFSC OPNF,0
GOTO LOW700 ;1だったらスキップ;
BSF OPNF,0
MOVLW D'3' ;オープニングデモ10000rpm 3秒間;
MOVWF OPN
OPENING
MOVLW D'166' ;;
MOVWF OPN2
OPENING2
BSF GPIO,5
CALL T03mS ;1ms待つ;
CALL T03mS ;2ms待つ;
CALL T03mS ;3ms待つ;
BCF PIR1,3
BCF CMCON0,3
BTFSC PIR1,3
GOTO LOW50
BCF CMCON0,3
BTFSC PIR1,3
GOTO LOW50
BCF PIR1,3
BSF CMCON0,3
BTFSC PIR1,3
GOTO LOW500
BSF CMCON0,3
BTFSC PIR1,3
GOTO LOW500
BCF GPIO,5
CALL T03mS ;1ms待つ;
CALL T03mS ;2ms待つ;
CALL T03mS ;3ms待つ;
CLRWDT
BCF PIR1,3
BCF CMCON0,3
BTFSC PIR1,3
GOTO LOW50
BCF CMCON0,3
BTFSC PIR1,3
GOTO LOW50
BCF PIR1,3
BSF CMCON0,3
BTFSC PIR1,3
GOTO LOW500
BSF CMCON0,3
BTFSC PIR1,3
GOTO LOW500
BTFSC PIR1,3
GOTO LOW1
DECFSZ OPN2
GOTO OPENING2
DECFSZ OPN
GOTO OPENING
BCF GPIO,5
GOTO LOW1
DECFSZ OPN2
GOTO OPENING2
DECFSZ OPN
GOTO OPENING
BCF GPIO,5
LOW700
BCF PIR1,3
BCF CMCON0,3 ;GP1選択;
BTFSC PIR1,3
GOTO LOW50
BCF PIR1,3
BCF CMCON0,3 ;GP1選択;
BTFSC PIR1,3
GOTO LOW50
BCF PIR1,3
BSF CMCON0,3 ;GP0選択;
BTFSC PIR1,3
GOTO LOW500
GOTO LOW700
BSF CMCON0,3 ;GP0選択;
BTFSC PIR1,3
GOTO LOW500
GOTO LOW700
;**************************
;低回転用
;**************************
LOW50
BSF STATUS,RP0 ;バンク1;
MOVLW B'10001111' ;10100010;
MOVWF VRCON ;基準電圧の設定 低電圧3.59V;
BCF STATUS,RP0 ;バンク0;
MOVLW B'00100001' ;プリスケーラ4倍 2us;
MOVWF T1CON ;4us1カウント、LOW1024us、HI262.144ms、229rpm;
BCF INTCON,5 ;TMR0割り込み禁止;
BCF OV_F,1
CLRWDT
BCF CMCON0,3 ;GP1選択;
;低回転用
;**************************
LOW50
BSF STATUS,RP0 ;バンク1;
MOVLW B'10001111' ;10100010;
MOVWF VRCON ;基準電圧の設定 低電圧3.59V;
BCF STATUS,RP0 ;バンク0;
MOVLW B'00100001' ;プリスケーラ4倍 2us;
MOVWF T1CON ;4us1カウント、LOW1024us、HI262.144ms、229rpm;
BCF INTCON,5 ;TMR0割り込み禁止;
BCF OV_F,1
CLRWDT
BCF CMCON0,3 ;GP1選択;
LOW1
BTFSS PIR1,3
GOTO LOW1
BSF GPIO,2
BSF GPIO,5
CLRWDT
LOW2
BTFSS PIR1,3
GOTO LOW3
BCF PIR1,3
GOTO LOW2
LOW3
BCF GPIO,2
BCF GPIO,5
BCF PIR1,3
MOVFW TMR1L
MOVWF TL
MOVFW TMR1H
MOVWF TH
CLRF TMR1L
CLRF TMR1H
BTFSC OV_F,1
GOTO LOW4
MOVLW D'62' ;62*512us*2=63.488ms 945rpm
BCF STATUS,C
SUBWF TH,0
BTFSS STATUS,C
GOTO MAINST200
LOW4
BCF OV_F,1
CALL T50mS ;20ms待つ
BSF GPIO,4
BSF CMCON0,3 ;GP0選択;
GOTO LOW100
BTFSS PIR1,3
GOTO LOW1
BSF GPIO,2
BSF GPIO,5
CLRWDT
LOW2
BTFSS PIR1,3
GOTO LOW3
BCF PIR1,3
GOTO LOW2
LOW3
BCF GPIO,2
BCF GPIO,5
BCF PIR1,3
MOVFW TMR1L
MOVWF TL
MOVFW TMR1H
MOVWF TH
CLRF TMR1L
CLRF TMR1H
BTFSC OV_F,1
GOTO LOW4
MOVLW D'62' ;62*512us*2=63.488ms 945rpm
BCF STATUS,C
SUBWF TH,0
BTFSS STATUS,C
GOTO MAINST200
LOW4
BCF OV_F,1
CALL T50mS ;20ms待つ
BSF GPIO,4
BSF CMCON0,3 ;GP0選択;
GOTO LOW100
LOW500
BSF STATUS,RP0 ;バンク1;
MOVLW B'10001111'
MOVWF VRCON ;基準電圧の設定 低電圧3.59V;
BCF STATUS,RP0 ;バンク0;
MOVLW B'00100001' ;B'00110001' ;プリスケーラ4倍 2us;
MOVWF T1CON ;4us1カウント、LOW1024us、HI262.144ms、229rpm;
BCF INTCON,5 ;TMR0割り込み禁止;
BCF OV_F,1
CLRWDT
BSF CMCON0,3 ;GP0選択;
LOW100
BTFSS PIR1,3
GOTO LOW100
BSF GPIO,4
CLRWDT
LOW200
BTFSS PIR1,3
GOTO LOW300
BCF PIR1,3
GOTO LOW200
LOW300
BCF GPIO,4
BCF PIR1,3
MOVFW TMR1L
MOVWF TL
MOVFW TMR1H
MOVWF TH
CLRF TMR1L
CLRF TMR1H
BTFSC OV_F,1
GOTO LOW400
MOVLW D'62' ;62*512us*2=63.488ms 945rpm
BCF STATUS,C
SUBWF TH,0
BTFSS STATUS,C
GOTO MAINST
LOW400
BCF OV_F,1
CALL T50mS ;20ms待つ
BSF GPIO,2
BSF GPIO,5
BCF CMCON0,3 ;GP1選択;
GOTO LOW1
BTFSS PIR1,3
GOTO LOW100
BSF GPIO,4
CLRWDT
LOW200
BTFSS PIR1,3
GOTO LOW300
BCF PIR1,3
GOTO LOW200
LOW300
BCF GPIO,4
BCF PIR1,3
MOVFW TMR1L
MOVWF TL
MOVFW TMR1H
MOVWF TH
CLRF TMR1L
CLRF TMR1H
BTFSC OV_F,1
GOTO LOW400
MOVLW D'62' ;62*512us*2=63.488ms 945rpm
BCF STATUS,C
SUBWF TH,0
BTFSS STATUS,C
GOTO MAINST
LOW400
BCF OV_F,1
CALL T50mS ;20ms待つ
BSF GPIO,2
BSF GPIO,5
BCF CMCON0,3 ;GP1選択;
GOTO LOW1
;***********************************
;通常点火 Aシリンダー&タコメーター;
;***********************************
MAINST
BSF STATUS,RP0 ;バンク1;
MOVLW B'10000101' ;
MOVWF VRCON ;基準電圧の設定 高電圧2.03V;
BCF STATUS,RP0 ;バンク0;
MOVLW B'00000001' ;B'00010001';プリスケーラ1倍 0.5us;
MOVWF T1CON ;0.5us1カウント、LOW128us、HI32.768ms、*2=65.536ms=916rpm;
CLRWDT
BCF OV_F,1
MOVLW D'140'
MOVWF TMR0
BSF INTCON,5 ;TMR0割り込み許可 128usで1カウント;
MAIN
BCF CMCON0,3 ;GP1選択;
MAIN1
BTFSS PIR1,3
GOTO MAIN1
BSF GPIO,2
BSF GPIO,5
CLRWDT
MAIN2
BTFSS PIR1,3
GOTO MAIN3
BCF PIR1,3
GOTO MAIN2
MAIN3
BCF GPIO,2
BCF GPIO,5
;通常点火 Aシリンダー&タコメーター;
;***********************************
MAINST
BSF STATUS,RP0 ;バンク1;
MOVLW B'10000101' ;
MOVWF VRCON ;基準電圧の設定 高電圧2.03V;
BCF STATUS,RP0 ;バンク0;
MOVLW B'00000001' ;B'00010001';プリスケーラ1倍 0.5us;
MOVWF T1CON ;0.5us1カウント、LOW128us、HI32.768ms、*2=65.536ms=916rpm;
CLRWDT
BCF OV_F,1
MOVLW D'140'
MOVWF TMR0
BSF INTCON,5 ;TMR0割り込み許可 128usで1カウント;
MAIN
BCF CMCON0,3 ;GP1選択;
MAIN1
BTFSS PIR1,3
GOTO MAIN1
BSF GPIO,2
BSF GPIO,5
CLRWDT
MAIN2
BTFSS PIR1,3
GOTO MAIN3
BCF PIR1,3
GOTO MAIN2
MAIN3
BCF GPIO,2
BCF GPIO,5
BCF PIR1,3
MOVFW TMR1L
MOVWF TL
MOVFW TMR1H
MOVWF TH
CLRF TMR1L
CLRF TMR1H
BTFSC OV_F,1
GOTO LOW500
MOVFW TMR1L
MOVWF TL
MOVFW TMR1H
MOVWF TH
CLRF TMR1L
CLRF TMR1H
BTFSC OV_F,1
GOTO LOW500
;リミッター判定;
BCF STATUS,C ;
BCF STATUS,Z ;
MOVFW LMHI ;
SUBWF TH,W
BTFSS STATUS,C ;0だったらgoto;
goto LIGO ;設定より小さいのでリミッター制御開始;
BTFSS STATUS,Z ;0だったらgoto;
goto MAIN4 ;;
BCF STATUS,C ;
BCF STATUS,Z ;
MOVFW LMHI ;
SUBWF TH,W
BTFSS STATUS,C ;0だったらgoto;
goto LIGO ;設定より小さいのでリミッター制御開始;
BTFSS STATUS,Z ;0だったらgoto;
goto MAIN4 ;;
BCF STATUS,C ;
MOVFW LMLO ;
SUBWF TL,W
BTFSC STATUS,C ;0だったらgoto;
goto MAIN4
MOVFW LMLO ;
SUBWF TL,W
BTFSC STATUS,C ;0だったらgoto;
goto MAIN4
LIGO
CALL T03mS ;1ms待つ;
BCF GPIO,4
CLRF DETIM4
CALL T03mS ;2ms待つ;
BSF GPIO,5
BSF CMCON0,3 ;GP0選択;
LIGO2
BCF INTCON,5 ;TMR0割り込み禁止;
BTFSS PIR1,3
GOTO LIGO2
BCF OV_F,1
CLRWDT
GOTO MAIN200
;リミッター制御ここまで;
;ドエルタイム設定;
MAIN4
BCF STATUS,C ;
BCF STATUS,Z ;
MOVFW DETIM ;
SUBWF TH,W
MOVWF DETIM2
BTFSS STATUS,C ;0だったらgoto;
goto MAIN5 ;小さかったら通電;
BTFSC STATUS,Z ;1だったらgoto;
goto MAIN5 ;;
goto MAIN5 ;小さかったら通電;
BTFSC STATUS,Z ;1だったらgoto;
goto MAIN5 ;;
BSF DETIM4,0
COMF DETIM2,W
MOVWF TMR0
BCF INTCON,2 ;TMR0割り込みフラグリセット;
BSF INTCON,5 ;TMR0割り込み許可 128usで1カウント;
GOTO MAIN6 ;リミッター制御はじめからここまで18us;
MAIN5
BSF GPIO,4
BSF DETIM4,0
MAIN6
BSF CMCON0,3 ;GP0選択;
CALL T03mS ;1ms待つ;
CALL T03mS ;2ms待つ;
GOTO MAIN100
COMF DETIM2,W
MOVWF TMR0
BCF INTCON,2 ;TMR0割り込みフラグリセット;
BSF INTCON,5 ;TMR0割り込み許可 128usで1カウント;
GOTO MAIN6 ;リミッター制御はじめからここまで18us;
MAIN5
BSF GPIO,4
BSF DETIM4,0
MAIN6
BSF CMCON0,3 ;GP0選択;
CALL T03mS ;1ms待つ;
CALL T03mS ;2ms待つ;
GOTO MAIN100
;**************************
;Bシリンダー GP0&GP4;
;**************************
;Bシリンダー GP0&GP4;
;**************************
MAINST200
BSF STATUS,RP0 ;バンク1;
MOVLW B'10000101' ;
MOVWF VRCON ;基準電圧の設定 高電圧2.03V;
BCF STATUS,RP0 ;■バンク0;
MOVLW B'00000001' ;B'00010001';プリスケーラ1倍 0.5us;
MOVWF T1CON ;0.5us1カウント、LOW128us、HI32.768ms、*2=65.536ms=916rpm;
CLRWDT
BCF OV_F,1
BSF STATUS,RP0 ;バンク1;
MOVLW B'10000101' ;
MOVWF VRCON ;基準電圧の設定 高電圧2.03V;
BCF STATUS,RP0 ;■バンク0;
MOVLW B'00000001' ;B'00010001';プリスケーラ1倍 0.5us;
MOVWF T1CON ;0.5us1カウント、LOW128us、HI32.768ms、*2=65.536ms=916rpm;
CLRWDT
BCF OV_F,1
BSF DETIM4,0
MOVLW D'140'
MOVWF TMR0
BSF INTCON,5 ;TMR0割り込み許可 128usで1カウント;
MOVLW D'140'
MOVWF TMR0
BSF INTCON,5 ;TMR0割り込み許可 128usで1カウント;
MAIN002
BSF CMCON0,3 ;GP0選択;
MAIN100
BTFSS PIR1,3
GOTO MAIN100
BSF GPIO,4
CLRWDT
MAIN200
BTFSS PIR1,3
GOTO MAIN300
BCF PIR1,3
GOTO MAIN200
MAIN300
BCF GPIO,4
BCF PIR1,3
MOVFW TMR1L
MOVWF TL
MOVFW TMR1H
MOVWF TH
CLRF TMR1L
CLRF TMR1H
BTFSC OV_F,1
GOTO LOW50
BSF CMCON0,3 ;GP0選択;
MAIN100
BTFSS PIR1,3
GOTO MAIN100
BSF GPIO,4
CLRWDT
MAIN200
BTFSS PIR1,3
GOTO MAIN300
BCF PIR1,3
GOTO MAIN200
MAIN300
BCF GPIO,4
BCF PIR1,3
MOVFW TMR1L
MOVWF TL
MOVFW TMR1H
MOVWF TH
CLRF TMR1L
CLRF TMR1H
BTFSC OV_F,1
GOTO LOW50
;リミッター判定;
BCF STATUS,C ;
BCF STATUS,Z ;
MOVFW LMHI ;
SUBWF TH,W
BTFSS STATUS,C ;0だったらgoto;
goto LIGO100 ;設定より小さいのでリミッター制御開始;
BTFSS STATUS,Z ;0だったらgoto;
goto MAIN400 ;;
BCF STATUS,C ;
BCF STATUS,Z ;
MOVFW LMHI ;
SUBWF TH,W
BTFSS STATUS,C ;0だったらgoto;
goto LIGO100 ;設定より小さいのでリミッター制御開始;
BTFSS STATUS,Z ;0だったらgoto;
goto MAIN400 ;;
BCF STATUS,C ;
MOVFW LMLO ;
SUBWF TL,W
BTFSC STATUS,C ;0だったらgoto;
goto MAIN400
MOVFW LMLO ;
SUBWF TL,W
BTFSC STATUS,C ;0だったらgoto;
goto MAIN400
LIGO100
CALL T03mS ;1ms待つ;
BCF GPIO,2
CLRF DETIM4
CALL T03mS ;2ms待つ;
BCF CMCON0,3 ;GP1選択;
LIGO200
BCF INTCON,5 ;TMR0割り込み禁止;
BTFSS PIR1,3
GOTO LIGO200
BCF OV_F,1
CLRWDT
GOTO MAIN2
;リミッター制御ここまで;
;ドエルタイム設定;
MAIN400
BCF STATUS,C ;
BCF STATUS,Z ;
MOVFW DETIM ;
SUBWF TH,W
MOVWF DETIM2
BTFSS STATUS,C ;0だったらgoto;
goto MAIN500 ;小さかったら通電;
BTFSC STATUS,Z ;1だったらgoto;
goto MAIN500 ;;
goto MAIN500 ;小さかったら通電;
BTFSC STATUS,Z ;1だったらgoto;
goto MAIN500 ;;
BCF DETIM4,0
COMF DETIM2,W
MOVWF TMR0
BCF INTCON,2 ;TMR0割り込みフラグリセット;
BSF INTCON,5 ;TMR0割り込み許可 128usで1カウント;
GOTO MAIN600 ;リミッター制御はじめからここまで18us;
MAIN500
BSF GPIO,2
BSF GPIO,5
MAIN600
BCF CMCON0,3 ;GP1選択;
CALL T03mS ;1ms待つ;
CALL T03mS ;2ms待つ;
GOTO MAIN1
COMF DETIM2,W
MOVWF TMR0
BCF INTCON,2 ;TMR0割り込みフラグリセット;
BSF INTCON,5 ;TMR0割り込み許可 128usで1カウント;
GOTO MAIN600 ;リミッター制御はじめからここまで18us;
MAIN500
BSF GPIO,2
BSF GPIO,5
MAIN600
BCF CMCON0,3 ;GP1選択;
CALL T03mS ;1ms待つ;
CALL T03mS ;2ms待つ;
GOTO MAIN1
;***************************
;タイマサブルーチン
;***************************
;タイマサブルーチン
;***************************
; << 162.5uS待つサブルーチン >>
T05mS
MOVLW D'80'
MOVWF T05mCNT
T05mLP
NOP ; 何もせず1サイクル消費
DECFSZ T05mCNT,F ; ループ回数-1して0になったら次の命令をスキップ
GOTO T05mLP ;
RETURN ; このサブルーチン呼出し元に戻る
T05mS
MOVLW D'80'
MOVWF T05mCNT
T05mLP
NOP ; 何もせず1サイクル消費
DECFSZ T05mCNT,F ; ループ回数-1して0になったら次の命令をスキップ
GOTO T05mLP ;
RETURN ; このサブルーチン呼出し元に戻る
; << 1mS待つサブルーチン >>
T03mS
MOVLW D'6' ; 5
MOVWF T50mCNT ; セット
T03mLP
CALL T05mS ; 何もせず1サイクル消費
DECFSZ T50mCNT ,F ; ループ回数-1して0になったら次の命令をスキップ
GOTO T03mLP ;
GOTO $+1
GOTO $+1
GOTO $+1
GOTO $+1
GOTO $+1
GOTO $+1
GOTO $+1
GOTO $+1
GOTO $+1
GOTO $+1
GOTO $+1
GOTO $+1
GOTO $+1
NOP
RETURN ; このサブルーチン呼出し元に戻る
; << 20mS待つサブルーチン >>
T50mS
MOVLW D'122' ; ループ回数249を
MOVWF T50mCNT ; セット
T50mLP
CALL T05mS ; 何もせず1サイクル消費
DECFSZ T50mCNT,F ; ループ回数-1して0になったら次の命令をスキップ
GOTO T50mLP ;
RETURN ; このサブルーチン呼出し元に戻る
T03mS
MOVLW D'6' ; 5
MOVWF T50mCNT ; セット
T03mLP
CALL T05mS ; 何もせず1サイクル消費
DECFSZ T50mCNT ,F ; ループ回数-1して0になったら次の命令をスキップ
GOTO T03mLP ;
GOTO $+1
GOTO $+1
GOTO $+1
GOTO $+1
GOTO $+1
GOTO $+1
GOTO $+1
GOTO $+1
GOTO $+1
GOTO $+1
GOTO $+1
GOTO $+1
GOTO $+1
NOP
RETURN ; このサブルーチン呼出し元に戻る
; << 20mS待つサブルーチン >>
T50mS
MOVLW D'122' ; ループ回数249を
MOVWF T50mCNT ; セット
T50mLP
CALL T05mS ; 何もせず1サイクル消費
DECFSZ T50mCNT,F ; ループ回数-1して0になったら次の命令をスキップ
GOTO T50mLP ;
RETURN ; このサブルーチン呼出し元に戻る
; << 10mS待つサブルーチン >>
T10mS
MOVLW D'61' ; ループ回数249を
MOVWF T50mCNT ; セット
T10mLP
CALL T05mS ; 何もせず1サイクル消費
DECFSZ T50mCNT,F ; ループ回数-1して0になったら次の命令をスキップ
GOTO T10mLP ;
RETURN ; このサブルーチン呼出し元に戻る
END
T10mS
MOVLW D'61' ; ループ回数249を
MOVWF T50mCNT ; セット
T10mLP
CALL T05mS ; 何もせず1サイクル消費
DECFSZ T50mCNT,F ; ループ回数-1して0になったら次の命令をスキップ
GOTO T10mLP ;
RETURN ; このサブルーチン呼出し元に戻る
END