welche bits muss ich setzen im UART Control register,wenn ich dauern 1 Byte senden will. d.h.ich hol mir ein analogen wert mach eine AD wandlund. dann hole ich mit den AD-Byte und geb ihn uber das UART aus.dann mach ich die nachste AD wandlung usw.. IST das Programm richtig. Wie ist es mit den Start und Stopbits bei UART. Wird nur ein startbit und am ende 1 stopbit angehangt,wenn die bytes nur schnell genug rauskommen.denn wenn nur ein byte rauskommt und danach nichts geht der pegel auf high und bleibt dort.wenn jedoch die ganze zeit bytes rauskommen,und das programm schnell genug ablauft muste nur 1 startbit+1databyte+1stopbit kommen? .include "8535def.inc" ;Definitionsdatei einbinden, .def temp =r19 .def hexl =r20 .def hexh =r21 ldi temp,4000000/(9600*16)-1 ;Baudrate einstellen out UBRR,temp adc: ldi temp,$00 out ADMUX,temp ;Kanal 0 vom ADC auswählen sbi ADCSR,ADSC ;Singlemode ein rcall fertig ;Warten bis Wandlung beendet in hexl,ADCL ;lowbyte auslesen in hexh,ADCH ;hibyte auslesen sts $60,hexl ;low byte speichern sts $68,hexh ;high byte speichern ;--------------------------------------------------- ;werte aus den speicher holen und im port B rausgeben ;--------------------------------------------------- lds r16,$60 rcall serout lds r16,$68 rcall serout rjmp adc ;die nächsten Wandlungen fertig: sbis ADCSR,ADIF ;Warten bis Wandlung,ADCSR:ADC Control and Status Register rjmp fertig ;beendet ret serout: sbis UCSRA,UDRE ;warten bis UDR fur das nachste Byte bereit ist rjmp serout out UDR,temp ret
Es gibt eine Application Note, in der beschrieben wird, wie man softwaremäßig ein UART implementiert wird und darin wird außerdem allgemein die Übertragung erklärt: AVR304 / AVR305 http://www.atmel.com/atmel/products/prod201.htm Vielleicht hilft dir das weiter! Zu deinem Programm: Vielleicht ist das nur ein Ausschnitt aus deinem gesamten Programm, aber so wie es hier steht wird es sicher nicht ohne Probleme laufen. Du verwendest Unterprogramme, aber initialisiert den Stackpointer nicht. Der Controller wird so bei einem "ret" sicher nicht das machen, was du willst. Warum machst du den Umweg über das SRAM? du kannst ja einfach die Register hexl, hexh nach temp kopieren: mov temp, hexl. lds r16,$68 - sollte das nicht lds temp, $68 heißen? Sonst wird ja bei serout immer $00 ausgegeben (wegen ldi temp,$00 am Anfang).
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.