回路設計は出来たので次はプログラムです。
これまで作ったプログラムソースをコピペしながら作ってみました。
仕様は
・ドエルタイムは7ms(14msサイクル以下はその半分)
・入力信号のコンパレータ基準電圧は2.03V(低回転制御時は0.42V)
・10000rpmでレブリミッター作動
・タコメーターのオープニングデモ:IGスイッチON時に10000rpmを3秒間保持
・916rpm以下は低回転制御
・低回転制御中はドエルタイム制御なし
ザックリこんな感じで、机上のテストではうまく出来ました(^^)
次はハードの組み付けかな!?
ではプログラムを公開します。相変わらずアセンブラですが・・・
**ここから**~**ここまで**をコピペすれば作動するはずですが???
変なところがあったら教えてね(なんせ素人ですから・・・)
;******ここから*******;
errorlevel -302 ; Suppress message 302
errorlevel -305 ; Suppress message 305
errorlevel -305 ; Suppress message 305
LIST P=12f683
#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
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-0)をデジタルI/Oに設定
MOVLW B'00011110'
MOVWF CMCON0 ;GP0コンパレーター入力;
BSF STATUS,RP0 ;■バンク1;
MOVLW B'01110000' ;60h 内部クロックを8MHzに設定;
MOVWF OSCCON ;CLOCK=8MHz;
MOVLW B'10100010' ;
MOVWF VRCON ;基準電圧の設定 低電圧0.42V;
MOVLW B'00000001' ;
MOVWF PIE1 ;TMR1割り込み許可;
MOVLW B'11100000' ;
MOVWF INTCON ;割り込み許可;
MOVLW B'11010111' ;
MOVWF OPTION_REG ;
; GPIO(GP2-0)をデジタルI/Oに設定
MOVLW B'00011110'
MOVWF CMCON0 ;GP0コンパレーター入力;
BSF STATUS,RP0 ;■バンク1;
MOVLW B'01110000' ;60h 内部クロックを8MHzに設定;
MOVWF OSCCON ;CLOCK=8MHz;
MOVLW B'10100010' ;
MOVWF VRCON ;基準電圧の設定 低電圧0.42V;
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は入力;
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は入力;
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'10100010' ;
MOVWF VRCON ;基準電圧の設定 低電圧0.42V;
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選択;
BSF STATUS,RP0 ;■バンク1;
MOVLW B'10100010' ;
MOVWF VRCON ;基準電圧の設定 低電圧0.42V;
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選択;
;******************************;
; オープニングデモ;
;******************************;
; オープニングデモ;
;******************************;
BTFSS OPNF,0
GOTO LOW700 ;1だったらスキップ;
BCF 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'10100010' ;
MOVWF VRCON ;基準電圧の設定 低電圧0.42V;
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'10100010' ;
MOVWF VRCON ;基準電圧の設定 低電圧0.42V;
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'10100010' ;
MOVWF VRCON ;基準電圧の設定 低電圧0.42V;
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
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
;**************************;
; 通常点火;
;**************************;
MAINST
BSF STATUS,RP0 ;■バンク1;
MOVLW B'10000101' ;
MOVWF VRCON ;基準電圧の設定 高電圧2.03V;
BCF STATUS,RP0 ;■バンク0;
MOVLW B'00000001' ;プリスケーラ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
; 通常点火;
;**************************;
MAINST
BSF STATUS,RP0 ;■バンク1;
MOVLW B'10000101' ;
MOVWF VRCON ;基準電圧の設定 高電圧2.03V;
BCF STATUS,RP0 ;■バンク0;
MOVLW B'00000001' ;プリスケーラ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選択;
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選択;
GOTO MAIN100
MAINST200
BSF STATUS,RP0 ;■バンク1;
MOVLW B'10000101' ;
MOVWF VRCON ;基準電圧の設定 高電圧2.03V;
BCF STATUS,RP0 ;■バンク0;
MOVLW B'00000001' ;プリスケーラ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' ;プリスケーラ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選択;
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選択;
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'
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'
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' ; ループ回数を;
MOVWF T50mCNT ; セット;
T10mLP
CALL T05mS ; 何もせず1サイクル消費;
DECFSZ T50mCNT,F ; ループ回数-1して0になったら次の命令をスキップ;
GOTO T10mLP
RETURN ; このサブルーチン呼出し元に戻る;
END
T10mS
MOVLW D'61' ; ループ回数を;
MOVWF T50mCNT ; セット;
T10mLP
CALL T05mS ; 何もせず1サイクル消費;
DECFSZ T50mCNT,F ; ループ回数-1して0になったら次の命令をスキップ;
GOTO T10mLP
RETURN ; このサブルーチン呼出し元に戻る;
END
;******ここまで*******;