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:
1
; Interruptroutine: wird ausgeführt sobald ein Byte über das UART empfangen wurde
2
int_rxc:
3
push temp ; temp auf dem Stack sichern
4
in temp, UDR
5
;ldi temp, 0b11111111
6
out PORTB, temp
7
pop temp ; temp wiederherstellen
8
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
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..
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:
1
sbis USR,RXC ;exit if no new word is received
2
rjmp exit
3
4
in temp, UDR
5
sbic USR, FE
6
rjmp exit
Ideen woran das liegt? Muss ich eines der Bits nach Empfang wieder von
Hand setzen/löschen?
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
...
Eine eigene Frage?
Dieser Thread ist über 19 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.