hallo,
ich wollte zum test mal den adc wert über rs232 ausgeben. das funtzt auch aber ob ich nun die spannung verändere oder nicht es ist immer der selbe adc wert der ausgegeben wird.
wo kann der fehler liegen?
mfg spec
Init
;12F683 alle Comparator-/ADC-Eingänge auf Digital umschalten
; beginnt in der Bank 0
BCF STATUS,RP0 ;Bank 0
CLRF GPIO ;Init GPIO
MOVLW 07h ;Set GP<2:0> to
MOVWF CMCON0 ;digital I/O
MOVLW 01h ;Right, Vdd Vref, AN0
MOVWF ADCON0
BSF STATUS,RP0 ;Bank 1
MOVLW 51h ;Set GP<1> to
MOVWF ANSEL ;digital I/O
MOVLW 01h ;Set GP<1> as output
MOVWF TRISIO
BCF STATUS,RP0 ;Bank 0
; interner Taktgenerator
bsf STATUS, RP0 ; Bank 1
movlw B'01100101'
movwf OSCCON ; 4-MHz
bcf STATUS, RP0 ; Bank 0
Main
BSF ADCON0,GO ;Start conversion
Next
BTFSC ADCON0,GO ;Is conversion done?
GOTO Next
movfw ADRESH ; es soll z.B. der Buchstabe'A' gesendet werden
call Send_RS ; Datenwort ausgeben via RS-232
goto Main
;***************************************************************
;senden des Bytes, das im Register W steht
Send_RS ; Ausgabe eines Bytes seriell
movwf Byte ; Byte in w
movlw 8 ; es werden 8 Bit gesendet
movwf cycl_1
bcf GPIO,2
call Warte_s ; 1 Stopbit (1)
bsf GPIO,2
call Warte_s ; 1 Startbit (0)
Send_1 rrf Byte, f ; aktuelles Bit in das Carry-Flag schieben
btfsc STATUS, C
bcf GPIO,2 ; Lo wenn Bit = 1
btfss STATUS, C
bsf GPIO,2 ; Hi wenn Bit = 0
call Warte_s ; 1 Bit lang warten
decfsz cycl_1, f ; waren das schon 8 Bit?
goto Send_1 ; nein, es geht weiter
bcf GPIO,2 ; Byte zuende, 1 Stoppbit (1) senden
call Warte_s ;
return
;**********************************************************
;ein Bit Zeitverzoegerung mit einer Warteschleife
; Timing muß genau stimmen (5%)
;
; senden 4 MHz 10 MHz
; 2400 Bps = 69d 173d
; 9600 Bps = 16d 43d
Warte_s movlw D'16' ; 9600 Bps / 4 MHz senden
movwf cycl_2
Warte1 ; 6 Zyklen Schleife
nop
nop
nop
decfsz cycl_2, 1
goto Warte1
return
end