www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik UART - senden funktioniert, Empang aber nicht?


Autor: Pascal Christian (passi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

ich habe ein Programm auf einem Atmega8 das Daten vom PC empfangen soll. 
Das selbe Programm sendet auch Daten an den PC, und das funktioniert 
schon, d.h. Baudrate etc. sollte richtig eingestellt sein.

Nun zum Problem:
Beim Senden eines Bytes an den µC wird zwar der Interrupt ausgelöst, 
aber ich erhalte keine Daten:

; Interruptroutine: wird ausgeführt sobald ein Byte über das UART empfangen wurde
int_rxc:
        push temp                         ; temp auf dem Stack sichern
        in temp, UDR
        ;ldi temp, 0b11111111
        out PORTB, temp
        pop temp                          ; temp wiederherstellen
        reti   


Betreibe ich das Programm mit der auskommentierten Zeile, dann bleiben 
die LEDs am PortB dunkel, egal was ich sende. Entferne ich das 
Kommentarzeichen und sende etwas, werden die LEDs hell, d.h. der 
Interrupt wird ausgelöst..

Woran kann das liegen?

Danke + Grüße
Passi

Autor: Michael Wilhelm (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn die leds low-aktiv geschaltet sind, ist doch alles klar 
(Vermutung).

MW

Autor: Pascal Christian (passi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Low-Aktiv bedeutet, bei 0->LED an?
Also wie ich schon schrieb, wenn ich 0b11111111 an den PortB anlege, 
sind die LEDs an. Und selbst wenn es andersrum wäre, müssten ja manche 
LEDs angehen (bzw. ausgehen) wenn ich z.B. 56 sende..

Autor: Pascal Christian (passi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok, jezt hab ich es geschafft das er das ausgibt was ich sende.. 
allerdings funktioniert das leider nur ein einziges Mal, danach springt 
er wohl wegen einer der beiden Abfragen ins Exit:

        sbis USR,RXC    ;exit if no new word is received
        rjmp exit

        in temp, UDR
        sbic USR, FE
        rjmp exit 


Ideen woran das liegt? Muss ich eines der Bits nach Empfang wieder von 
Hand setzen/löschen?

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein leider nicht. Meine Glaskugel ist verkratzt und deshalb sehe ich 
den Quellcode grade nicht um zu helfen

Autor: Pascal Christian (passi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das ist mein Interrupt-Code soweit:

; Interruptroutine: wird ausgeführt sobald ein Byte über das UART empfangen wurde
int_rxc:
    push temp                         ; temp auf dem Stack sichern

    sbis USR,RXC                      ;exit if no new word is received
    rjmp exit

    in temp, UDR
    sbic USR, FE
    rjmp exit 

    cpi RSINCOUNT, 1
    breq setled
    mov LEDADD, temp
    inc RSINCOUNT
    rjmp exit

setled:  
    ldi RSINCOUNT, 0
    cpi LEDADD, 1
    breq setLED1
    cpi LEDADD, 2
    breq setLED2
    cpi LEDADD, 3
    breq setLED3
    rjmp exit

setLED1:    mov ocr_1, temp   
            rjmp exit


setLED2:    mov ocr_2, temp   
            rjmp exit

setLED3:    mov ocr_3, temp   
            rjmp exit


exit:  pop temp 
       reti                              ; Interrupt beenden 



Edit: Achso, der Interupt wird übrigens immer noch erzeugt, also es muss 
an einem der Beiden exit-Jump Befehle liegen..?

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Interruptroutine: wird ausgeführt sobald ein Byte über das UART 
empfangen wurde
....
sbis USR,RXC                      ;exit if no new word is received

(das ist doch unsinn)
...
mov LEDADD, temp
...
mov ocr_1, temp
...

versuchs mal mit:
OUT LEDADD, temp
...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.