receive_loop: ldi temp, UCSR0A ; warten bis ein Byte angekommen ist sbrs temp , RXC0 rjmp receive_loop lds temp, UDR0 ; empfangenes Byte nach temp kopieren out PORTD, temp ; und an Port D ausgeben. rjmp receive_loop Hallo Leute, ich möchte ein Zeichen per poling über Hyperterminal empfangen, zb wenn ich ein 1 schreibe geht ein LED an und bei 0 geht die aus. ist es so richtig wie ich geschrieben habe. ich bin in µc eine Angängerin. ich habe eine Atmega88P danke
wir frage ist was übertragen wird? eine '0' order eine 0 (0x00) Wenn du in einem Terminialprogramm eine '0' eintippts wird eigentlich eine 48 (0x48) übertragen und diese weist du jetzt dem Port zu.
ich will einfach das Beispiel im AVR-Tutorial Empfangen von Zeichen per Polling zum laufen bringen. nur als Übung
Sahra Nana schrieb: > ich will einfach das Beispiel im AVR-Tutorial Empfangen von Zeichen per > Polling zum laufen bringen. nur als Übung OK. Was ist mit dem Beispiel. Klappt es bei dir nicht? http://www.mikrocontroller.net/articles/AVR_Checkliste#UART.2FUSART
ich habe nach meinem µC den Text angepasst, und so geschrieben: ; Port D = Ausgang ldi temp, 0xFF out DDRD, temp ; Baudrate einstellen ldi temp, HIGH(UBRR_VAL) sts UBRR0H, temp ldi temp, LOW(UBRR_VAL) sts UBRR0L, temp ; Frame-Format: 8 Bit ldi temp, (1<<USBS0)|(3<<UCSZ00) sts UCSR0C, temp ldi temp,1<< RXEN0 ; RX (Empfang) aktivieren sts UCSR0B , temp receive_loop: ldi temp, UCSR0A ; warten bis ein Byte angekommen ist sbrs temp , RXC0 rjmp receive_loop lds temp, UDR0 ; empfangenes Byte nach temp kopieren out PORTD, temp ; und an Port D ausgeben. rjmp receive_loop das Programm zeigt keine Fehler, also 0 Fehler 0 Warning, aber ich kann nicht in Hyperterminal was schreiben.
Sahra Nana schrieb: > das Programm zeigt keine Fehler, also 0 Fehler 0 Warning, aber ich kann > nicht in Hyperterminal was schreiben. Da heißt erst mal gar nichts. 0 Fehler, 0 Warnung heißt nur, dass dein Programm keine 'Grammatik-Fehler' aufweist. "Das Segelboot schimpft die Gabel" ist laut Duden auch korrekt und trotzdem ein sinnloser Satz. Kannst du senden, sprich: Hast du schon getestet ob die UART funktioniert und ob PC und AVR miteinander prinzipiell können? Immer mit dem Senden anfangen. Da kann man Hardwarefehler leichter diagnostizieren.
Sahra Nana schrieb:
> senden kann ich ja, aber empfangen leider nicht..........
OK. das ist gut.
Das heist, die Leitung steht prinzipiell
Dann mach mal folgendes.
1 | ... |
2 | receive_loop: |
3 | ldi temp, UCSR0A ; warten bis ein Byte angekommen ist |
4 | sbrs temp , RXC0 |
5 | rjmp receive_loop |
6 | |
7 | lds temp, UDR0 ; empfangenes Byte nach temp kopieren |
8 | |
9 | ldi temp, 0xAA ; <------------ |
10 | out PORTD, temp ; und an Port D ausgeben. |
11 | rjmp receive_loop |
hier wird nicht das empfangene Zeichen ausgegeben, sondern einfach das Bitmuster für 0xAA (das ist abwechselnd 0 und 1). Wenn du 8 LED am PORT D hast, musst du das auf jeden Fall sehen. Das Ziel ist es, herauszufinden, ob überhaupt etwas empfangen wird. Irgendwas. Sobald du am Hyperterminal eine Taste drückst, muss sich am PORT D etwas tun (Im Hyperterminal hast du das Handshake, die 'Flusskontrolle', ausgeschaltet?) > MFG
Die Checkliste von weiter oben bist du schon durchgegangen. Da ist insbesondere ein Test drinnen, der darüber Aufschluss geben kann, ob vom PC überhaupt etwas weggesendet wird. (Das du im hyperterminal deine tastendrücke nicht siehst, bedeutet erst mal gar nichts. Je nach Einstellung des lokalen Echos ist das normal)
schön guten Morgen, welche checkliste meinste du, und wo finde ich die? MFG S.N
Sahra Nana schrieb: > schön guten Morgen, > welche checkliste meinste du, und wo finde ich die? Beitrag "Re: zeichen empfangen"
ich habe die Liste gechekt, anscheint habe alles richtig eingestellt, wenn ich das Programm laufen lasse, leucht die Diode, die am Port PD7 angeschlossen habe permanent. aber der Hyperterminal reagiert nicht, soll man vielleich etwas in HyT umstellen. danke
ich habe jetzt das auskommentiert: ;ldi temp, 0xAA und wenn nich irgendwas eintippe, wird die Diode leuchten, aber der HYTerminal, zeigt nicht was ich schreibe
Hi! > ldi temp, UCSR0A ; warten bis ein Byte angekommen ist > sbrs temp , RXC0 sollte eher lauten: lds temp, UCSR0A ; warten bis ein Byte angekommen ist sbrs temp , RXC0 Viel Erfolg, Uwe
vielleicht RX /TX vertauscht, probier mal Pin 2 und 3 des Sub-D Steckers zu vertauschen. Grüße Gebhard
Sahra Nana schrieb: > ich habe jetzt das auskommentiert: > ;ldi temp, 0xAA > und wenn nich irgendwas eintippe, wird die Diode leuchten, aber der > HYTerminal, zeigt nicht was ich schreibe Das ist normal. HyperTermianl wartet darauf, dass dein AVR die Zeichen zurückschickt, die er empfangen hat. AUf die Art kann man nämlich gut kontrollieren, ob die Übertragung klappt. Nur dann wenn Hyperterminal das getippte auch anzeigt kann man sicher sein, dass die Strecke PC->AVR und wieder zurück einwandfrei funktioniert und nicht zb irgendwo ein Kabel abgefallen ist.
es geht auch mit ldi, das Problem war: ich soll was in HyT einstellen, und zwar die Ascii setup, die 2 häckschen oben im Bild
Hi
>es geht auch mit ldi
Das 'ldi' macht deine Routine wirkungslos!
ldi temp, UCSR0A lädt die Adresse des Registers
lds temp, UCSR0A lädt den Inhalt des Registers
MfG Spess
Sahra Nana schrieb: > es geht auch mit ldi, Äh. Nein ldi macht etwas ganz anderes > das Problem war: ich soll was in HyT einstellen, > und zwar die Ascii setup, die 2 häckschen oben im Bild Das erste Häkchen bestimmt nur was passiert, wenn du 'Return' drückst. Das zweite Häkchen. Nun, das mag für dich jetzt so aussehen, als ob es dein Problem löst. Aber das tut es nicht. Es besagt nur, dass Hyperterminal die Zeichen die es rausschickt auch gleichzeitig anzeigt. Ob die Zeichen tatsächlich rausgehen bzw. ob sie auch korrekt empfangen werden kann man damit nicht feststellen.
'Früher' <tm> hat man sowas mit einem Längschlitzschraubendreher durch Brücken von TxD und TxD direkt am 8051 'überprüft'. Dran gehalten und kurz ins Terminalwindow gehackt, ferrrtisch.
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.