ヘルプが必要!

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終わり
 

Welcome to EDABoard.com

Sponsor

Back
Top