zeichen empfangen

OP #1640303
Lesenswert?

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
Gast #1640306
Lesenswert?

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.
OP #1640323
Lesenswert?

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.
#1640328
Lesenswert?

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.
#1640336
Lesenswert?

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
#1640345
Lesenswert?

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)
#1641474
Lesenswert?

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.
#1641562
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren