Hallo! Ich habe mit dem programmieren von Mikrocontrollern erst vor kurzem angefangen, doch jetzt habe ich ein Problem. Ich benutze zum Programmieren das STK500 und den Mikrocontroller ATMEGA8535. Mit dem unten stehenden Programm möchte ich, den Buchstaben x über rs232 an den PC senden, doch da kommt nix an. Könnt Ihr mir anhand des Programmes sagen was ich falsch mache. Danke! #include <stdint.h> #include <avr/io.h> #ifndef F_CPU #define F_CPU 4000000 #endif #define UART_BAUD_RATE 9600 UBRR = F_CPU / (UART_BAUD_RATE * 16L) - 1; int main(void) { UCSRB |= (1<<TXEN); UCSRC |= (1<<URSEL)|(3<<UCSZ0); while (!(UCSRA & (1<<UDRE))); UDR = 'x'; return 0; }
> UBRR = F_CPU / (UART_BAUD_RATE * 16L) - 1;
Das geht so nicht. Das UBRR kann (zumindest beim Mega8535) nicht als
ganzes angesprochen werden. UBRRH und UBRRL müssen getrennt geschrieben
werden, weil die Register im I/O-Space nicht hintereinander liegen.
Abgesehen davon:
Läuft der µC auch wirklich mit den angegebenen 4 MHz? (Fusebits richtig
gesetzt?)
Danke für deine Antwort! Wie muss dann das Programm aussehen, wenn ich das ändere? Der Controller läuft mit 1MHz, mein Fehler.
1 | #define UART_BAUD_RATE 9600
|
2 | |
3 | #define BAUD (F_CPU / (UART_BAUD_RATE * 16L) - 1)
|
4 | |
5 | int main(void) |
6 | {
|
7 | UCSRB |= (1<<TXEN); |
8 | UCSRC |= (1<<URSEL)|(3<<UCSZ0); |
9 | |
10 | UBRRH = BAUD >> 8; |
11 | UBRRL = BAUD; |
12 | |
13 | //...usw...
|
14 | }
|
BTW: Zuweisungen an Register und Variablen sind nur innerhalb von Funktionen erlaubt. Das was Du oben versucht hast, müsste eigentlich mindestens zwei Fehlermeldungen beim Compilieren verursacht haben!
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.