Hallo Profis ;) ich bin hier in der Programmierung von AVRs noch ein Anfänger und hab jetzt mal eine Frage. Ich habe mir die usart.h und usart.c Dateien von Ulrich Radig geladen und wollte das Senden und Empfangen über die Uart testen. Das Senden funktioniert auch schon super nur beim Empfangen stell ich mich leider zu doof an... Technische Daten: Controller: ATmega32 Quarz: 16MHz Betriebsspannung: +5V Mein Programm: #include <avr/io.h> #include <avr/pgmspace.h> #include <avr/delay.h> #include "usart.h" #define F_CPU 16000000// Angepasst 16MHZ int main(void) { unsigned long a; DDRC=0xFF; PORTC=0xFF; usart_init(9600); // Einstellung der Baudrate usart_write("\n\r!!!ACHTUNG SYSTEM WIRD GESTARTET!!!\n\r"); //Über die UART ausgeben usart_write("\n\r"); // Leerzeile usart_write("\n\r!!!Bitte Namen eingeben!!!\n\r"); // Namensabfrage return(0); } Es währe super wenn Ihr mir iwie helfen könntet, dass ich z.B. meinen Namen über ein Terminal Programm eingeben kann und diesen dann Später wieder über UART senden. Vielen Dank schonmal im Vorraus :D Andi
Da der Empfang der Zeichen über die Interrupt Service Routine läuft, muß du den globalen Interrupt auch freigeben. Sonst passiert da nichts ;-)
Andi schrieb: > Das Senden funktioniert auch schon super nur beim Empfangen stell ich > mich leider zu doof an... Wie Michael schon sagte: Interrupts mittels sei() freigeben. Das ist der erste Teil. Das andere. Die Funktion ist offenbar so zu benutzen
1 | ....
|
2 | |
3 | int main() |
4 | {
|
5 | unsigned long a; |
6 | |
7 | DDRC = 0xFF; |
8 | PORTC = 0xFF; |
9 | |
10 | usart_init(9600); // Einstellung der Baudrate |
11 | |
12 | usart_write("\n\r!!!ACHTUNG SYSTEM WIRD GESTARTET!!!\n\r"); //Über die UART ausgeben |
13 | |
14 | usart_write("\n\r"); // Leerzeile |
15 | usart_write("\n\r!!!Bitte Namen eingeben!!!\n\r"); // Namensabfrage |
16 | |
17 | while( 1 ) { |
18 | |
19 | if( usart_status.usart_ready ) { |
20 | usart_write( "\n\rDu heisst " ); |
21 | usart_write( usart_rx_buffer ); |
22 | usart_status.usart_ready = 0; |
23 | }
|
24 | }
|
25 | |
26 | return(0); |
27 | }
|
Hallo ich versteh des nicht so ganz den bei mir kommt bei der Zeile mit usart_write( usart_rx_buffer ); eine Fehlermeldung mit der Bezeichnung "invalid initializer"
Markus schrieb: > Hallo ich versteh des nicht so ganz den bei mir kommt bei der > Zeile mit > usart_write( usart_rx_buffer ); > eine Fehlermeldung mit der Bezeichnung "invalid initializer" Ich (und du auch) habe die falsche Funktion benutzt. ANstelle von usart_write wollten wir in allen Fällen usart_write_str haben. usart_write macht eigentlich ganz was anderes und wird wie printf benutzt. Bei dir macht das keinen Unterschied (ausser dass du dem µC Mehrarbeit aufbürdest), beim letzten Aufruf macht es aber einen Unterschied.
1 | ....
|
2 | |
3 | int main() |
4 | {
|
5 | unsigned long a; |
6 | |
7 | DDRC = 0xFF; |
8 | PORTC = 0xFF; |
9 | |
10 | usart_init(9600); // Einstellung der Baudrate |
11 | |
12 | usart_write_str("\n\r!!!ACHTUNG SYSTEM WIRD GESTARTET!!!\n\r"); //Über die UART ausgeben |
13 | |
14 | usart_write_str("\n\r"); // Leerzeile |
15 | usart_write_str("\n\r!!!Bitte Namen eingeben!!!\n\r"); // Namensabfrage |
16 | |
17 | while( 1 ) { |
18 | |
19 | if( usart_status.usart_ready ) { |
20 | usart_write_str( "\n\rDu heisst " ); |
21 | usart_write_str( usart_rx_buffer ); |
22 | usart_status.usart_ready = 0; |
23 | }
|
24 | }
|
25 | |
26 | return(0); |
27 | }
|
Hey Danke :D also das Senden und Empfangen klappt bei mir jetzt Kann ich den "usart_rx_buffer" Wert auch iwie vergleichen, z.B. wie bei einer Passwortabfrage?
Andi schrieb: > Hey Danke :D > also das Senden und Empfangen klappt bei mir jetzt > Kann ich den "usart_rx_buffer" Wert auch iwie vergleichen, z.B. wie bei > einer Passwortabfrage? Spätestens jetzt lässt sich die Standardantwort "Du brauchst ein C-Buch" nicht mehr vermeiden. String-Verarbeitung in C
Ja da hast du nicht ganz unrecht =) Könntest du mir vielleicht eines empfehlen, das für "Anfänger" gut verständlich ist? =)
Andi schrieb: > Ja da hast du nicht ganz unrecht =) > Könntest du mir vielleicht eines empfehlen, das für "Anfänger" gut > verständlich ist? =) Empfehlung ist immer der Klassiker Kernighan & Ritchie Programmieren in C ansonsten http://openbook.galileocomputing.de/c_von_a_bis_z/
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.