www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik UART Problem


Autor: dieter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Thomas F. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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).

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.