F
Fiann
Guest
何時間も頭をクラッキング
し てきた、と私は解決策を考え出すことができませんでした。
PICはPIC16F877Aを使用している私
です
というわけで、私は
、 ADCから値を受信し
、 その適切な値とは
、 液晶ディスプレイへの出力に変換するになって
いる 。
添付私がコードです...が
、 問題は出てくるゴミとされている値は
、 後に、私は"
" ハードウェアのスタックオーバーフローを得ています。私はPICをシミュレータのIDEを使用してテストした。
誰かのコードのデバッグに役立つもらえます
か ?ソ¥ースコードに基づいて、この値をどのように出力
されます :
メモリの内容の値を追加します*第一に標識b'00110000 'のために適切な値を取得します。
*後は、私は' 。 ' 、ドット
、 次
の 2つの値の小数点以下の桁を象徴して送信してください。
*それから、私は2番目のラベルは
、 メモリの
内容 値を追加b'00110000 'のために適切な値
を 取得します。
*後は、私は記憶にどんな価値を付加する第3の標識b'00110000 'のために適切な値
を 取得します。をクリックし
、 コードは
、 先頭には
、 ADCの値を再度確認して、行くと
、 新しい値は変更を出力します。
私
は、 コードの長さは分かるけど、みんな
、 私を心から期待することができます。
この問題はここから: 出力電流レディングコード:リストp = 16f877a
などp16f877a.inc__CONFIG 0x3f71のRS equ 1
メールequ 2
R0 equ 0x60
R0H equ 0x61
LCDIndex equ 0x62 ;は、文字列のインデックス作成に使用されます
ResultL equ 0x70
ResultH equ 0x71
被乗数equ 0x72
MSFH equ 0x73
MSFL equ 0x74
気温equ 0x75
最初のequ 0x76
2番目のequ 0x77
3番目のequ 0x78
FortyEight equ 0x79
10 equ 0x7A
0x0000の組織後藤のinit0x0005組織;================================================= =============================
;初期化
;================================================= =============================初期化:コールBANK1
clrf TRISB
clrf TRISCmovlw b'11111111 '
movwf TRISD ;入力として設定PORTDmovlw d' 255 '
movwf TRISAmovlw b'00000000 '
movwf ADCON1コールBANK0movlwが0x01
movwf ADCON0movlw高い( 0280h )
movwf MSFH
movlw低い( 0280h )
movwf MSFLmovlw d' 48 '
movwf FortyEightコールlcd_initCursorBlinkOffコール;================================================= =============================
;メイン
;================================================= =============================メイン:Cread
CurrentReadingTopコール
後藤SwitchCheck2
後藤Creadメイン後藤Vread
VoltageReadingTopコール
後藤SwitchCheck1
後藤Vread;================================================= ========================================
;------------------------------------------------- ----
;液晶-初期化シーケンス
;------------------------------------------------- ----lcd_init :
;------------------------------------------------- ----
;リセットシーケンス
;------------------------------------------------- ----; 1 ) 15ミリ秒待つ
movlw ( 3A98h )高
movwf R0H
movlw ( 3A98h )低
コールpauseUsL2 )命令は0x30を送信します。
bcf PORTC 、のRS ;セットのRS = 0
movlw 0x30
movwfポート
コールストローブ; 3 ) 5ms待つ
movlw高い( 1388h )
movwf R0H
movlw低い( 1388h )
コールpauseUsL; 4 )命令は0x30を送信します。
bcf PORTC 、のRS ;セットのRS = 0
movlw 0x30
movwfポート
コールストローブ; 5 ) 200us待つ
movlw高い( 00C8h )
movwf R0H
movlw低い( 00C8h )
コールpauseUsL6 ) 0x30命令を送信します。
bcf PORTC 、のRS ;セットのRS = 0
movlw 0x30
movwfポート
コールストローブ; 7 ) 200us待つ
movlw高い( 00C8h )
movwf R0H
movlw低い( 00C8h )
コールpauseUsL; 8 )命令は0x30を送信します。
bcf PORTC 、のRS ;セットのRS = 0
movlw 0x30
movwfポート
コールストローブ; 9 ) 40us待って
movlw高い( 0028h )
movwf R0H
movlw低い( 0028h )
コールpauseUsL;------------------------------------------------- ----
;液晶の初期化
;------------------------------------------------- ----; 1 )命令の0x38を送信します。
bcf PORTC 、のRS ;セットのRS = 0
movlw 0x38
movwfポート
コールストローブ2 ) 40us待って
movlw高い( 0028h )
movwf R0H
movlw低い( 0028h )
コールpauseUsL3 )命令0x0Fを送信します。
bcf PORTC 、のRS ;セットのRS = 0
movlw 0x0F
movwfポート
コールストローブ; 4 ) 40us待って
movlw高い( 0028h )
movwf R0H
movlw低い( 0028h )
コールpauseUsL; 5 )クリアスクリーン(命令が0x01の送信)
bcf PORTC 、のRS ;セットのRS = 0
movlwが0x01
movwfポート
コールストローブ; 6 ) 2ms待つ
movlw高い( 07D0h )
movwf R0H
movlw低い( 07D0h )
コールpauseUsL; 7 )命令は0x06を送信します。
bcf PORTC 、のRS ;セットのRS = 0
movlw 0x06
movwfポート
コールストローブ; 8 ) 40us待って
movlw高い( 0028h )
movwf R0H
movlw低い( 0028h )
コールpauseUsL復帰; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXpauseUs :
clrf R0 1
pauseUsL :
addlw -24
movwf R0
comf R0 1は、 F
movlw -4
btfss状況はC
後藤pauseUsH
pauseUsLoop :
addwf R0は、 F
btfsc状況はC
後藤pauseUsLooppauseUsH :
addwf R0は、 F
clrwdt
incfsz R0 1は、 F
後藤pauseUsLoop
btfsc R0 、 0
後藤$ 1
btfss R0 、 1
後藤pauseUsDone
nop
後藤$ 1
pauseUsDone :
復帰; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
;================================================= ========================================;------------------------------------------------- -----------------------------
;================================================= =============================
;呼出しサブルーチン
;================================================= =============================
;------------------------------------------------- -----------------------------;------------------------------------------------- ----
;銀行へ移動
;------------------------------------------------- ----BANK0 :
bcf状況、 RP1
bcf状況、 RP0
復帰BANK1 :
bcf状況、 RP1
bsf状況、 RP0
復帰BANK2 :
bsf状況、 RP1
bcf状況、 RP0
復帰BANK3 :
bsf状況、 RP1
bsf状況、 RP0
復帰
;_____________________________________________________
;------------------------------------------------- ----;------------------------------------------------- ----
;電圧レディングディスプレイ
;------------------------------------------------- ----VoltageReadingTopmovlw b'10000000 '
コールsendInstruction
clrf LCDIndexVoltageReadingLoopmovf LCDIndex 、水
VoltageReadコールaddlw 0
btfsc状況、 Zも
後藤VoltageReadingBottomコールsendData
incf LCDIndexは、 F
後藤VoltageReadingLoopVoltageReadaddwf PCLのは、 F
dt "電圧" 、 0に設定VoltageReadingBottommovlw b'11000000 '
コールsendInstruction
clrf LCDIndexVoltageReadingLoop2movf LCDIndex 、水
VoltageReadBottomコールaddlw 0
btfsc状況、 Zも復帰コールsendData
incf LCDIndexは、 F
後藤VoltageReadingLoop2VoltageReadBottomaddwf PCLのは、 F
"定数dt 240V " 、 0;_____________________________________________________
;------------------------------------------------- ----;_____________________________________________________
;------------------------------------------------- ----;------------------------------------------------- ----
;電流レディングディスプレイ
;------------------------------------------------- ----CurrentReadingTopmovlw b'10000000 '
コールsendInstruction
clrf LCDIndexCurrentReadingLoopmovf LCDIndex 、水
CurrentReadコールaddlw 0
btfsc状況、 Zも
後藤CurrentReadingBottomコールsendData
incf LCDIndexは、 F
後藤CurrentReadingLoopCurrentReadaddwf PCLのは、 F
"現在のdt " 、 0にあるCurrentReadingBottommovlw b'11000000 '
コールsendInstruction
clrf LCDIndex後藤CurrentValueCalculation;_____________________________________________________
;------------------------------------------------- ----;================================================= =========
;液晶固有のサブルーチン
;================================================= =========;------------------------------------------------- ----
;送信指導、データ、ストローブルーチン
;------------------------------------------------- ----sendInstruction :
bcf PORTC 、のRS
後藤送る
sendData :
bsf PORTC 、のRS
送信:
movwfポート
コールストローブ
movlw d' 40 '
コールpauseUs復帰ストローブ:
bsf PORTC 、メール
movlw d' 1 '
コールpauseUs
bcf PORTC 、メール
movlw d' 1 '
コールpauseUs復帰;_____________________________________________________
;------------------------------------------------- ----;------------------------------------------------- ----
;クリアスクリーン
;------------------------------------------------- ----ClearScreen :bcf PORTC 、のRS ;セットのRS = 0
movlwが0x01
movwfポート
コールストローブ
movlw高い( 7D0h )
movwf R0H
movlw低い( 7D0h )
コールpauseUsL復帰;_____________________________________________________
;------------------------------------------------- ----;------------------------------------------------- ----
;ターンカーソ¥ルと点滅オフ
;------------------------------------------------- ----CursorBlinkOffmovlw b'00001100 '
コールsendInstruction復帰;_____________________________________________________
;------------------------------------------------- ----;------------------------------------------------- ----
;ターンカーソ¥ルとて点滅
;------------------------------------------------- ----CursorBlinkOnmovlw b'00001111 '
コールsendInstruction復帰;_____________________________________________________
;------------------------------------------------- ----;------------------------------------------------- ----
;スイッチディスプレイボタンをチェック
;------------------------------------------------- ----SwitchCheck1btfss 、 0 PORTD後藤VreadSwitchDelayコール;遅延請求デバウンシングを避けるために
後藤CreadSwitchCheck2btfss 、 0 PORTD
後藤CreadSwitchDelayコール;遅延請求デバウンシングを避けるために
後藤Vread;_____________________________________________________
;------------------------------------------------- ----;------------------------------------------------- ----
;スイッチング遅延( 400ms )
;------------------------------------------------- ----SwitchDelaymovlw ( 0FFFFh )高
movwf R0H
movlw ( 0FFFFh )低
コールpauseUsLmovlw ( 0FFFFh )高
movwf R0H
movlw ( 0FFFFh )低
コールpauseUsLmovlw ( 0FFFFh )高
movwf R0H
movlw ( 0FFFFh )低
コールpauseUsLmovlw ( 0FFFFh )高
movwf R0H
movlw ( 0FFFFh )低
コールpauseUsL復帰;_____________________________________________________
;------------------------------------------------- ----;------------------------------------------------- -----------------------------;================================================= ================================================== ==========
;電流値の計算
;================================================= ================================================== ==========CurrentValueCalculationbsf ADCON0 、ゴーwaitADCComplete : ;変換が完了するまで待つ
btfsc ADCON0移動;変換時間がかかる
後藤waitADCCompletemovf ADRESH 、水
movwf ResultL
clrf ResultH;---------------------------乗算movlw d' 4 '
movwf被乗数movf ResultL 、水
movwf気温TimesFivemovf気温、水
addwf ResultLは、 F
btfsc状況はC
PlusOneコール
decfsz被乗数は、 F
後藤TimesFivemovlw d' 4 '
movwf被乗数後藤SixFourZeroPlusOnemovlw d' 1 '
addwf ResultHは、 F復帰
;---------------------------SixFourZeromovf MSFH 、水
subwf ResultH 、水
btfss状況はC
後藤InverseSixFourZero
btfsc状況、 Zも
後藤CheckBiggerSFZSixFourZeroTwo
movf MSFH 、水
subwf ResultHは、 F
movf MSFL 、水
subwf ResultLは、 F
btfss状況はC
MinusOneコール
後藤ClearCurrentValuesInverseSixFourZeromovf ResultH 、水
subwf MSFH 、水
movwf ResultH
movf ResultL 、水
subwf MSFL 、水
movwf ResultL
btfss状況はC
MinusOneコール
後藤ClearCurrentValuesMinusOnemovlw d' 1 '
subwf ResultHは、 F復帰CheckBiggerSFZmovf MSFL 、水
subwf ResultL 、水
btfss状況はC
後藤InverseSixFourZero
後藤SixFourZeroTwo;---------------------------ClearCurrentValuesまずclrf
2番目のclrf
3番目のclrf課movf FortyEight 、水
subwf ResultL 、水
btfss状況はC
後藤TakeAwayOne場合は、負のは、ここに行く
Divisionn
movf FortyEight 、水
subwf ResultLは、 F
movlw d' 1 '
addwf最初は、 F
後藤課TakeAwayOnemovlw d' 1 '
subwf ResultHは、 F
btfss状況はC
後藤AddBackOne場合は、負のは、ここに行く
後藤DivisionnAddBackOnemovlw d' 1 '
addwf ResultHは、 FFinishUpFirstmovf FortyEight 、水
subwf ResultL 、水
btfss状況はC
後藤TimesTenOne場合は、負のは、ここに行く
movf FortyEight 、水
subwf ResultLは、 F
movlw d' 1 '
addwf最初は、 F
後藤FinishUpFirstTimesTenOnemovlw d' 9 '
movwf 10movf ResultL 、水
movwf気温TimesTenFirstmovf気温、水
addwf ResultLは、 F
btfsc状況はC
PlusOneコール
decfsz 10は、 F
後藤TimesTenFirstmovlw d' 9 '
movwf 10;..................................DivisionSecondmovf FortyEight 、水
subwf ResultL 、水
btfss状況はC
後藤TakeAwayTwo場合は、負のは、ここに行くDivisionnSecond
movf FortyEight 、水
subwf ResultLは、 F
movlw d' 1 '
addwf第2は、 F
後藤DivisionSecondTakeAwayTwomovlw d' 1 '
subwf ResultHは、 F
btfss状況はC
後藤AddBackTwo場合は、負のは、ここに行く
後藤DivisionnSecondAddBackTwomovlw d' 1 '
addwf ResultHは、 FFinishUpSecondmovf FortyEight 、水
subwf ResultL 、水
btfss状況はC
後藤TimesTenTwo場合は、負のは、ここに行く
movf FortyEight 、水
subwf ResultLは、 F
movlw d' 1 '
addwf第2は、 F
後藤FinishUpSecondTimesTenTwomovlw d' 9 '
movwf 10movf ResultL 、水
movwf気温TimesTenSecondmovf気温、水
addwf ResultLは、 F
btfsc状況はC
PlusOneコール
decfsz 10は、 F
後藤TimesTenSecondmovlw d' 9 '
movwf 10;..................................DivisionThirdmovf FortyEight 、水
subwf ResultL 、水
btfss状況はC
後藤TakeAwayThree場合は、負のは、ここに行くDivisionnThird
movf FortyEight 、水
subwf ResultLは、 F
movlw d' 1 '
addwf第3は、 F
後藤DivisionThirdTakeAwayThreemovlw d' 1 '
subwf ResultHは、 F
btfss状況はC
後藤AddBackThree場合は、負のは、ここに行く
後藤DivisionnThirdAddBackThreemovlw d' 1 '
addwf ResultHは、 FFinishUpThirdmovf FortyEight 、水
subwf ResultL 、水
btfss状況はC
後藤TimesTenThree場合は、負のは、ここに行く
movf FortyEight 、水
subwf ResultLは、 F
movlw d' 1 '
addwf第3は、 F
後藤FinishUpThirdTimesTenThreemovlw d' 9 '
movwf 10movf ResultL 、水
movwf気温TimesTenThirdmovf気温、水
addwf ResultLは、 F
btfsc状況はC
PlusOneコール
decfsz 10は、 F
後藤TimesTenThirdmovlw d' 9 '
movwf 10;=============================================
;出力電流レディング
;=============================================
1つの場所にカーソ¥ルを移動
movlw b'00010100 '
コールsendData1つの場所にカーソ¥ルを移動
movlw b'00010100 '
コールsendData1つの場所にカーソ¥ルを移動
movlw b'00010100 '
コールsendData1つの場所にカーソ¥ルを移動
movlw b'00010100 '
コールsendData1つの場所にカーソ¥ルを移動
movlw b'00010100 '
コールsendDataまずmovf
addlw b'00110000 '
コールsendDatamovlw b'00101110 '
コールsendData2番目のmovf
addlw b'00110000 '
コールsendDatamovfサード
addlw b'00110000 '
コールsendDataコールpauseUsL後藤SwitchCheck2終わり
し てきた、と私は解決策を考え出すことができませんでした。
PICはPIC16F877Aを使用している私
です
というわけで、私は
、 ADCから値を受信し
、 その適切な値とは
、 液晶ディスプレイへの出力に変換するになって
いる 。
添付私がコードです...が
、 問題は出てくるゴミとされている値は
、 後に、私は"
" ハードウェアのスタックオーバーフローを得ています。私はPICをシミュレータのIDEを使用してテストした。
誰かのコードのデバッグに役立つもらえます
か ?ソ¥ースコードに基づいて、この値をどのように出力
されます :
メモリの内容の値を追加します*第一に標識b'00110000 'のために適切な値を取得します。
*後は、私は' 。 ' 、ドット
、 次
の 2つの値の小数点以下の桁を象徴して送信してください。
*それから、私は2番目のラベルは
、 メモリの
内容 値を追加b'00110000 'のために適切な値
を 取得します。
*後は、私は記憶にどんな価値を付加する第3の標識b'00110000 'のために適切な値
を 取得します。をクリックし
、 コードは
、 先頭には
、 ADCの値を再度確認して、行くと
、 新しい値は変更を出力します。
私
は、 コードの長さは分かるけど、みんな
、 私を心から期待することができます。
この問題はここから: 出力電流レディングコード:リストp = 16f877a
などp16f877a.inc__CONFIG 0x3f71のRS equ 1
メールequ 2
R0 equ 0x60
R0H equ 0x61
LCDIndex equ 0x62 ;は、文字列のインデックス作成に使用されます
ResultL equ 0x70
ResultH equ 0x71
被乗数equ 0x72
MSFH equ 0x73
MSFL equ 0x74
気温equ 0x75
最初のequ 0x76
2番目のequ 0x77
3番目のequ 0x78
FortyEight equ 0x79
10 equ 0x7A
0x0000の組織後藤のinit0x0005組織;================================================= =============================
;初期化
;================================================= =============================初期化:コールBANK1
clrf TRISB
clrf TRISCmovlw b'11111111 '
movwf TRISD ;入力として設定PORTDmovlw d' 255 '
movwf TRISAmovlw b'00000000 '
movwf ADCON1コールBANK0movlwが0x01
movwf ADCON0movlw高い( 0280h )
movwf MSFH
movlw低い( 0280h )
movwf MSFLmovlw d' 48 '
movwf FortyEightコールlcd_initCursorBlinkOffコール;================================================= =============================
;メイン
;================================================= =============================メイン:Cread
CurrentReadingTopコール
後藤SwitchCheck2
後藤Creadメイン後藤Vread
VoltageReadingTopコール
後藤SwitchCheck1
後藤Vread;================================================= ========================================
;------------------------------------------------- ----
;液晶-初期化シーケンス
;------------------------------------------------- ----lcd_init :
;------------------------------------------------- ----
;リセットシーケンス
;------------------------------------------------- ----; 1 ) 15ミリ秒待つ
movlw ( 3A98h )高
movwf R0H
movlw ( 3A98h )低
コールpauseUsL2 )命令は0x30を送信します。
bcf PORTC 、のRS ;セットのRS = 0
movlw 0x30
movwfポート
コールストローブ; 3 ) 5ms待つ
movlw高い( 1388h )
movwf R0H
movlw低い( 1388h )
コールpauseUsL; 4 )命令は0x30を送信します。
bcf PORTC 、のRS ;セットのRS = 0
movlw 0x30
movwfポート
コールストローブ; 5 ) 200us待つ
movlw高い( 00C8h )
movwf R0H
movlw低い( 00C8h )
コールpauseUsL6 ) 0x30命令を送信します。
bcf PORTC 、のRS ;セットのRS = 0
movlw 0x30
movwfポート
コールストローブ; 7 ) 200us待つ
movlw高い( 00C8h )
movwf R0H
movlw低い( 00C8h )
コールpauseUsL; 8 )命令は0x30を送信します。
bcf PORTC 、のRS ;セットのRS = 0
movlw 0x30
movwfポート
コールストローブ; 9 ) 40us待って
movlw高い( 0028h )
movwf R0H
movlw低い( 0028h )
コールpauseUsL;------------------------------------------------- ----
;液晶の初期化
;------------------------------------------------- ----; 1 )命令の0x38を送信します。
bcf PORTC 、のRS ;セットのRS = 0
movlw 0x38
movwfポート
コールストローブ2 ) 40us待って
movlw高い( 0028h )
movwf R0H
movlw低い( 0028h )
コールpauseUsL3 )命令0x0Fを送信します。
bcf PORTC 、のRS ;セットのRS = 0
movlw 0x0F
movwfポート
コールストローブ; 4 ) 40us待って
movlw高い( 0028h )
movwf R0H
movlw低い( 0028h )
コールpauseUsL; 5 )クリアスクリーン(命令が0x01の送信)
bcf PORTC 、のRS ;セットのRS = 0
movlwが0x01
movwfポート
コールストローブ; 6 ) 2ms待つ
movlw高い( 07D0h )
movwf R0H
movlw低い( 07D0h )
コールpauseUsL; 7 )命令は0x06を送信します。
bcf PORTC 、のRS ;セットのRS = 0
movlw 0x06
movwfポート
コールストローブ; 8 ) 40us待って
movlw高い( 0028h )
movwf R0H
movlw低い( 0028h )
コールpauseUsL復帰; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXpauseUs :
clrf R0 1
pauseUsL :
addlw -24
movwf R0
comf R0 1は、 F
movlw -4
btfss状況はC
後藤pauseUsH
pauseUsLoop :
addwf R0は、 F
btfsc状況はC
後藤pauseUsLooppauseUsH :
addwf R0は、 F
clrwdt
incfsz R0 1は、 F
後藤pauseUsLoop
btfsc R0 、 0
後藤$ 1
btfss R0 、 1
後藤pauseUsDone
nop
後藤$ 1
pauseUsDone :
復帰; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
;================================================= ========================================;------------------------------------------------- -----------------------------
;================================================= =============================
;呼出しサブルーチン
;================================================= =============================
;------------------------------------------------- -----------------------------;------------------------------------------------- ----
;銀行へ移動
;------------------------------------------------- ----BANK0 :
bcf状況、 RP1
bcf状況、 RP0
復帰BANK1 :
bcf状況、 RP1
bsf状況、 RP0
復帰BANK2 :
bsf状況、 RP1
bcf状況、 RP0
復帰BANK3 :
bsf状況、 RP1
bsf状況、 RP0
復帰
;_____________________________________________________
;------------------------------------------------- ----;------------------------------------------------- ----
;電圧レディングディスプレイ
;------------------------------------------------- ----VoltageReadingTopmovlw b'10000000 '
コールsendInstruction
clrf LCDIndexVoltageReadingLoopmovf LCDIndex 、水
VoltageReadコールaddlw 0
btfsc状況、 Zも
後藤VoltageReadingBottomコールsendData
incf LCDIndexは、 F
後藤VoltageReadingLoopVoltageReadaddwf PCLのは、 F
dt "電圧" 、 0に設定VoltageReadingBottommovlw b'11000000 '
コールsendInstruction
clrf LCDIndexVoltageReadingLoop2movf LCDIndex 、水
VoltageReadBottomコールaddlw 0
btfsc状況、 Zも復帰コールsendData
incf LCDIndexは、 F
後藤VoltageReadingLoop2VoltageReadBottomaddwf PCLのは、 F
"定数dt 240V " 、 0;_____________________________________________________
;------------------------------------------------- ----;_____________________________________________________
;------------------------------------------------- ----;------------------------------------------------- ----
;電流レディングディスプレイ
;------------------------------------------------- ----CurrentReadingTopmovlw b'10000000 '
コールsendInstruction
clrf LCDIndexCurrentReadingLoopmovf LCDIndex 、水
CurrentReadコールaddlw 0
btfsc状況、 Zも
後藤CurrentReadingBottomコールsendData
incf LCDIndexは、 F
後藤CurrentReadingLoopCurrentReadaddwf PCLのは、 F
"現在のdt " 、 0にあるCurrentReadingBottommovlw b'11000000 '
コールsendInstruction
clrf LCDIndex後藤CurrentValueCalculation;_____________________________________________________
;------------------------------------------------- ----;================================================= =========
;液晶固有のサブルーチン
;================================================= =========;------------------------------------------------- ----
;送信指導、データ、ストローブルーチン
;------------------------------------------------- ----sendInstruction :
bcf PORTC 、のRS
後藤送る
sendData :
bsf PORTC 、のRS
送信:
movwfポート
コールストローブ
movlw d' 40 '
コールpauseUs復帰ストローブ:
bsf PORTC 、メール
movlw d' 1 '
コールpauseUs
bcf PORTC 、メール
movlw d' 1 '
コールpauseUs復帰;_____________________________________________________
;------------------------------------------------- ----;------------------------------------------------- ----
;クリアスクリーン
;------------------------------------------------- ----ClearScreen :bcf PORTC 、のRS ;セットのRS = 0
movlwが0x01
movwfポート
コールストローブ
movlw高い( 7D0h )
movwf R0H
movlw低い( 7D0h )
コールpauseUsL復帰;_____________________________________________________
;------------------------------------------------- ----;------------------------------------------------- ----
;ターンカーソ¥ルと点滅オフ
;------------------------------------------------- ----CursorBlinkOffmovlw b'00001100 '
コールsendInstruction復帰;_____________________________________________________
;------------------------------------------------- ----;------------------------------------------------- ----
;ターンカーソ¥ルとて点滅
;------------------------------------------------- ----CursorBlinkOnmovlw b'00001111 '
コールsendInstruction復帰;_____________________________________________________
;------------------------------------------------- ----;------------------------------------------------- ----
;スイッチディスプレイボタンをチェック
;------------------------------------------------- ----SwitchCheck1btfss 、 0 PORTD後藤VreadSwitchDelayコール;遅延請求デバウンシングを避けるために
後藤CreadSwitchCheck2btfss 、 0 PORTD
後藤CreadSwitchDelayコール;遅延請求デバウンシングを避けるために
後藤Vread;_____________________________________________________
;------------------------------------------------- ----;------------------------------------------------- ----
;スイッチング遅延( 400ms )
;------------------------------------------------- ----SwitchDelaymovlw ( 0FFFFh )高
movwf R0H
movlw ( 0FFFFh )低
コールpauseUsLmovlw ( 0FFFFh )高
movwf R0H
movlw ( 0FFFFh )低
コールpauseUsLmovlw ( 0FFFFh )高
movwf R0H
movlw ( 0FFFFh )低
コールpauseUsLmovlw ( 0FFFFh )高
movwf R0H
movlw ( 0FFFFh )低
コールpauseUsL復帰;_____________________________________________________
;------------------------------------------------- ----;------------------------------------------------- -----------------------------;================================================= ================================================== ==========
;電流値の計算
;================================================= ================================================== ==========CurrentValueCalculationbsf ADCON0 、ゴーwaitADCComplete : ;変換が完了するまで待つ
btfsc ADCON0移動;変換時間がかかる
後藤waitADCCompletemovf ADRESH 、水
movwf ResultL
clrf ResultH;---------------------------乗算movlw d' 4 '
movwf被乗数movf ResultL 、水
movwf気温TimesFivemovf気温、水
addwf ResultLは、 F
btfsc状況はC
PlusOneコール
decfsz被乗数は、 F
後藤TimesFivemovlw d' 4 '
movwf被乗数後藤SixFourZeroPlusOnemovlw d' 1 '
addwf ResultHは、 F復帰
;---------------------------SixFourZeromovf MSFH 、水
subwf ResultH 、水
btfss状況はC
後藤InverseSixFourZero
btfsc状況、 Zも
後藤CheckBiggerSFZSixFourZeroTwo
movf MSFH 、水
subwf ResultHは、 F
movf MSFL 、水
subwf ResultLは、 F
btfss状況はC
MinusOneコール
後藤ClearCurrentValuesInverseSixFourZeromovf ResultH 、水
subwf MSFH 、水
movwf ResultH
movf ResultL 、水
subwf MSFL 、水
movwf ResultL
btfss状況はC
MinusOneコール
後藤ClearCurrentValuesMinusOnemovlw d' 1 '
subwf ResultHは、 F復帰CheckBiggerSFZmovf MSFL 、水
subwf ResultL 、水
btfss状況はC
後藤InverseSixFourZero
後藤SixFourZeroTwo;---------------------------ClearCurrentValuesまずclrf
2番目のclrf
3番目のclrf課movf FortyEight 、水
subwf ResultL 、水
btfss状況はC
後藤TakeAwayOne場合は、負のは、ここに行く
Divisionn
movf FortyEight 、水
subwf ResultLは、 F
movlw d' 1 '
addwf最初は、 F
後藤課TakeAwayOnemovlw d' 1 '
subwf ResultHは、 F
btfss状況はC
後藤AddBackOne場合は、負のは、ここに行く
後藤DivisionnAddBackOnemovlw d' 1 '
addwf ResultHは、 FFinishUpFirstmovf FortyEight 、水
subwf ResultL 、水
btfss状況はC
後藤TimesTenOne場合は、負のは、ここに行く
movf FortyEight 、水
subwf ResultLは、 F
movlw d' 1 '
addwf最初は、 F
後藤FinishUpFirstTimesTenOnemovlw d' 9 '
movwf 10movf ResultL 、水
movwf気温TimesTenFirstmovf気温、水
addwf ResultLは、 F
btfsc状況はC
PlusOneコール
decfsz 10は、 F
後藤TimesTenFirstmovlw d' 9 '
movwf 10;..................................DivisionSecondmovf FortyEight 、水
subwf ResultL 、水
btfss状況はC
後藤TakeAwayTwo場合は、負のは、ここに行くDivisionnSecond
movf FortyEight 、水
subwf ResultLは、 F
movlw d' 1 '
addwf第2は、 F
後藤DivisionSecondTakeAwayTwomovlw d' 1 '
subwf ResultHは、 F
btfss状況はC
後藤AddBackTwo場合は、負のは、ここに行く
後藤DivisionnSecondAddBackTwomovlw d' 1 '
addwf ResultHは、 FFinishUpSecondmovf FortyEight 、水
subwf ResultL 、水
btfss状況はC
後藤TimesTenTwo場合は、負のは、ここに行く
movf FortyEight 、水
subwf ResultLは、 F
movlw d' 1 '
addwf第2は、 F
後藤FinishUpSecondTimesTenTwomovlw d' 9 '
movwf 10movf ResultL 、水
movwf気温TimesTenSecondmovf気温、水
addwf ResultLは、 F
btfsc状況はC
PlusOneコール
decfsz 10は、 F
後藤TimesTenSecondmovlw d' 9 '
movwf 10;..................................DivisionThirdmovf FortyEight 、水
subwf ResultL 、水
btfss状況はC
後藤TakeAwayThree場合は、負のは、ここに行くDivisionnThird
movf FortyEight 、水
subwf ResultLは、 F
movlw d' 1 '
addwf第3は、 F
後藤DivisionThirdTakeAwayThreemovlw d' 1 '
subwf ResultHは、 F
btfss状況はC
後藤AddBackThree場合は、負のは、ここに行く
後藤DivisionnThirdAddBackThreemovlw d' 1 '
addwf ResultHは、 FFinishUpThirdmovf FortyEight 、水
subwf ResultL 、水
btfss状況はC
後藤TimesTenThree場合は、負のは、ここに行く
movf FortyEight 、水
subwf ResultLは、 F
movlw d' 1 '
addwf第3は、 F
後藤FinishUpThirdTimesTenThreemovlw d' 9 '
movwf 10movf ResultL 、水
movwf気温TimesTenThirdmovf気温、水
addwf ResultLは、 F
btfsc状況はC
PlusOneコール
decfsz 10は、 F
後藤TimesTenThirdmovlw d' 9 '
movwf 10;=============================================
;出力電流レディング
;=============================================
1つの場所にカーソ¥ルを移動
movlw b'00010100 '
コールsendData1つの場所にカーソ¥ルを移動
movlw b'00010100 '
コールsendData1つの場所にカーソ¥ルを移動
movlw b'00010100 '
コールsendData1つの場所にカーソ¥ルを移動
movlw b'00010100 '
コールsendData1つの場所にカーソ¥ルを移動
movlw b'00010100 '
コールsendDataまずmovf
addlw b'00110000 '
コールsendDatamovlw b'00101110 '
コールsendData2番目のmovf
addlw b'00110000 '
コールsendDatamovfサード
addlw b'00110000 '
コールsendDataコールpauseUsL後藤SwitchCheck2終わり