PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : serielle übertragung beim Atmel mega32



katiiiiii
26.01.2005, 11:47
hi Leute!

Aus dem Datenblatt des Atmel mega 32 hab i folgenden Code entnommen! Nun frage ich mich, ob des gleich so mit der übertragung funktioniert oder ob ich den Code noch optimieren muss, damit was geht. Wenn ja, habt ihr vl tipps was ich da noch programmieren muss?

void USART_Transmit( unsigned char data )
{
/* Wait for empty transmit buffer */
while ( !( UCSRA & (1<<UDRE)) )
;
/* Put data into buffer, sends the data */
UDR = data;
}

Beim CodeVisionAVR sind folgende einstellungen schon gemacht worden:

// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On
// USART Transmitter: Off
// USART Mode: Asynchronous
// USART Baud rate: 9600
UCSRA=0x00;
UCSRB=0x10;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x67;

Also sind die register schon so gesetzt worden, so wie ich das brauche!

Mfg
kati

katiiiiii
26.01.2005, 12:08
Also, ich hab den Code nun zu compilierten versucht und ich hab einen Fehler. UDRE ist nicht definiert, heißt es. Aber was genau heißt das? Im Datenblatt ist es ein Register, das zeigt, wenn der transmit buffer bereit ist eine neue nachricht zu empfangen. Da ich aber nur Daten senden muss und nicht empfangen muss, ist das bei mir ja nicht nötig oder?
Tut mir leid, wenn i damit nerv, aber programmieren zählt leider nicht zu meinen Stärken.

Hoff,ihr könnt mir helfen!

Mfg
Kati

bluebrother
26.01.2005, 12:21
benutzt du den avr-gcc? Dann musst du
#include <avr/io.h>
machen. Das bindet dann avr/iom32.h ein (das spezielle IO für den Mega32) und da ist UDRE definiert.
Welches Header-File du beim CodeVision brauchst weiss ich leider nicht, dürfte aber ähnlich sein. (beim ImageCraft ist es iom32v.h)

katiiiiii
26.01.2005, 12:58
hallo! das Problem hab i mitn lehrer schon gelöst. UDRE ist nicht in der include datei drinen gestanden. mittels datenblatt hab ichs hinzugefügt.
UDRE=0x0b oder so! i hoff, des stimmt so!
mfg

bluebrother
26.01.2005, 16:01
Hi,

eigentlich sollte das in einem vorhandenen Header-File definiert sein. Wenn du dir das selber definierst bekommst du spätentens dann Probleme wenn sich die Adresse mal ändert ... ich würde deshalb vom selber definieren abraten, irgendwo müsstest du ein Header-File haben in dem das definiert ist.

katiiiiii
26.01.2005, 18:01
nein, nicht im atmel mega32! i hab die ganze libary durchsucht.
der lehrer hat das mit mir ausgebessert. war ja sein vorschlag. und wieso sollt sich das ändern?