Hab ein kleines Problem mit meinem 8051 kompatiblem Controller (es handelt sich um einen Atmel 89C51ED2. Hier in der Schule haben wir die IDE Ride. Wenn ich mein Programm dort debugge zeigt der UART an, dass die Daten gesendet werden. Zum Test habe ich den Interrupt des UARTs an und erhöhe P2 jedes mal (auf unserer Schulplatine sind dort LEDs). Der Debugger zeigt auch an dass P2 jedes mal erhöht wird, auf dem Board aber bleibt P2 auf 0 und nichts wird gesendet (das geht an eine Schrittmotorsteuerung) So sende ich: #define smcSend(parameter) \ do { \ while(!send_enable); \ SBUF = (uint8_t)parameter; \ send_enable = 0; \ } while(0); Und das ist meine ISR des UARTs: void serial_IT(void) interrupt 4 { ++P2; RI = TI = 0; /* empfangen wird aber nichts */ send_enable = 1; return; } Ich kenn mich mit den 8051 nicht aus, nur mit AVR.
Bowle Gus, der 8051-UART erzeugt erst einen Senderinterrupt, nachdem das erste Zeichen abgeschickt wurde. Also vor dem ersten smcSend(parameter) sollte send_enable = 1; stehen, damit SBUF in jedem Fall beschrieben wird. Anschliessend müssten Senderinterrupts kommen (falls die Initialisierung richtig war). Allerdings ist bei dieser Implementierung von smcSend() der Interruptbetrieb eigentlich überflüssig. Ciao, Yagan
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.