Fehler bei ADC
-
Bei dem Folgendem Programm habe ich ein großes problem.
eEss sollte die vom ADC eingelesene spannung in Bit an LEDs anzeigen, und es sollten von den 10 Bit (da es ein 10bit ADC ist) die niedrigeren 8 bit gespeichert und angezeigt werden (da die ersten 8 bit in einem eigenem Byte gespeichert werden und die letzten 2 auch). Die 8 niedrigen sollten in "ADRESL" gespeichert sein, doch sobald ich diese daten in den arbeitsspeicher oder sonst wohin schreibe, werden nich die niedrigen 8 bit sondern die höheren 2 bit hineingeschrieben.
Die stelle wo es in den arbeitsspeicher geschrieben wird is mit "?????" markiert.
Ich habe keine Ahnung warum das so ist, habe auch schon meinen Lehrer gefragt und der wusste auch keinen Rat.Bitte helft mir!
#include <P16f877.INC> ERRORLEVEL -302 ;SUPPRESS BANK SELECTION MESSAGES ;********************************************************** ;* Variablen wait EQU 0x20 leds EQU 0x21 ;* ADC Initialisierung init ;* PortB vorbereiten bsf STATUS, RP0 ; auf Bank 1 umschalten movlw B'00000000' ; PortB alle output movwf TRISB bcf STATUS, RP0 ; auf Bank 0 zurückschalten clrf PORTB ; alle LEDs ausschalten ;* ADC einschalten BSF ADCON0, 0 ; ADON=1 ;* ADC-Eingang AN0 auswählen BCF ADCON0, 5 ; ADCHS2=0 BCF ADCON0, 4 ; ADCHS1=0 BCF ADCON0, 3 ; ADCHS0=0 ;* ADC speed für 20 MHz einstellen BSF ADCON0, 7 ; ADCS1=1 BCF ADCON0, 6 ; ADCS0=0 (-> 64Tosc Wartezeit) ;* Daten rechtsbündig BSF STATUS,RP0 ; Bank1 BCF ADCON1, 7 ; ADFM=1 BCF STATUS,RP0 ; Bank0 ;********************************************************** ;* Hauptprogrammschleife Main ;Eingangsspannung wandeln BSF ADCON0, 2 ; ADC starten loop BTFSC ADCON0, 2 ; ist der ADC fertig? GOTO loop ; nein, weiter warten ; Wert nach PortB schreiben movf ADRESL ,0 ; ????? Hier ist der Fehler, es sollten eigentlich die LOW stellen übernommen werden, es werden jedoch immer die High in den arbeitsspeicher geschrieben. movwf leds movwf PORTB ; obere 8-Bit nach PortB ; Warten, damit der ADC sich erholen kann clrf wait warten DECFSZ wait, f goto warten goto Main end ;**********************************************************
-
Woher weißt du denn, dass die high bits in das W Register geladen werden?
movwf PORTB ; obere 8-Bit nach PortB
Der Kommentar passt nicht zum vorangegangenen Code
-
das weis ich weil ich das programm mit Proteus simuliert habe, und da kann man sich alle register ansehen