Forum: Mikrocontroller und Digitale Elektronik programm


von Holk (Gast)


Lesenswert?

ist dieses programm zur auslesung von analogen signalen und zur ausgabe 
uber uart richtig?
.include "8535def.inc"       ;Definitionsdatei einbinden,


.def temp  =r19
.def hexl  =r20
.def hexh  =r21

ldi r17,RAMEND
out SPL,r17

ldi temp,4000000/(9600*16)-1    ;Baudrate einstellen
out UBRR,temp


adc:


ldi     temp,$00
out     ADMUX,temp        ;choose channel 0 from ADC
sbi  ADCSR,ADSC    ;Singlemode on

rcall  fertig      ;wait until convert is finished

in  hexl,ADCL    ;read lowbyte
in  hexh,ADCH    ;read hibyte

sts     $60,hexl                ;save low byte
sts     $68,hexh     ;save high byte


;-----------------------
;ADC aktivieren,    In 2
;-----------------------

ldi   temp,$01
out     ADMUX,temp        ;choose channel 1 from ADC
sbi  ADCSR,ADSC    ;Singlemode on

rcall  fertig      ;wait until convert is finished

in  hexl,ADCL    ;read lowbyte
in  hexh,ADCH    ;read hibyte

sts     $70,hexl                ;save low byte
sts     $78,hexh     ;save high byte


;------------------------------------------------------------
;werte aus den speicher und dem UART Register ubergeben.
;------------------------------------------------------------


         lds r16,$60
         rcall serout
         lds r16,$68
         rcall serout

         lds r16,$70
         rcall serout
         lds r16,$78
         rcall serout





rjmp  adc      ;next conversion


fertig:
sbis  ADCSR,ADIF    ;wait until conversion is finished,ADCSR:ADC Control 
and Status Register
rjmp  fertig      ;beendet
ret

serout:
sbis USR,UDRE                  ;wait until UDR is ready for the next 
byte

out UDR,r16
ret

von andreas (Gast)


Lesenswert?

warum gehst du nicht uber register statt speicher
beispiel:
.include "8535def.inc"

.def temp =r19



ldi r16,RAMEND
out SPL,r16

ldi temp,4000000/(9600*16)-1              ;set baudrate
out UBRR,temp

adc:

ldi temp,$00
out ADMUX,temp                            ;choose channel 0 from ADC
sbi ADCSR,ADSC                            ;Singlemode on

rcall fertig                              ;wait until convert is 
finished

in r20,ADCL                              ;read lowbyte
rcall serout

in r20,ADCH                              ;read highbyte
rcall serout




ldi temp,$01                              ;choose channel 1 from ADC
out ADMUX,temp
sbi ADCSR,ADSC                            ;Singlemode on

rcall fertig

in r20,ADCL
rcall serout

in r20,ADCH
rcall serout

rjmp adc                                  ;next conversion


fertig:
sbis ADCSR,ADSC
rjmp fertig
ret

serout:
sbis USR,UDRE
rjmp serout
out UDR,r20
ret

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.