A
Arne Rossius
Guest
Hallo,
ich habe gerade ein Assemblerprogramm für einen AT90S2313 geschrieben,
welches aber nun nicht richtig funktioniert. Im Simulator ließ sich das
allerdings *nicht* nachvollziehen.
Der nicht funktionierende Programmteil soll von einem synchronen Bus ein
Byte einlesen. Im Simulator klappt das auch einwandfrei. In der Realität
wird jedoch das zuletzt gesendete Bit (LSB) nicht beachtet, soll heißen,
das Register "temp" ist nach dem Empfang gleich dem (testweise über
entprellte Taster) gesendeten Wert, 1 mal nach rechts geschoben.
Trotzdem beendet sich die Routine korrekterweise erst nachdem 8 Bits
empfangen wurden. Hier ist die Routine (temp = R16, temp2 = R17, PINB.0
= Daten, PINB.2 = Clock):
receivebyte:
clr temp
ldi temp2, 8
receivebit:
lsl temp
receivebitstart:
sbic PINB, 2
rjmp receivebitstart
cbr temp, 0x01
sbic PINB, 0
sbr temp, 0x01
receivebitend:
sbis PINB, 2
rjmp receivebitend
dec temp2
brne receivebit
ret
Hat jemand eine Idee, was da falsch sein könnte? Ich kann keinen Fehler
erkennen, im Simulator funktioniert es ja korrekt.
Gruß,
Arne
ich habe gerade ein Assemblerprogramm für einen AT90S2313 geschrieben,
welches aber nun nicht richtig funktioniert. Im Simulator ließ sich das
allerdings *nicht* nachvollziehen.
Der nicht funktionierende Programmteil soll von einem synchronen Bus ein
Byte einlesen. Im Simulator klappt das auch einwandfrei. In der Realität
wird jedoch das zuletzt gesendete Bit (LSB) nicht beachtet, soll heißen,
das Register "temp" ist nach dem Empfang gleich dem (testweise über
entprellte Taster) gesendeten Wert, 1 mal nach rechts geschoben.
Trotzdem beendet sich die Routine korrekterweise erst nachdem 8 Bits
empfangen wurden. Hier ist die Routine (temp = R16, temp2 = R17, PINB.0
= Daten, PINB.2 = Clock):
receivebyte:
clr temp
ldi temp2, 8
receivebit:
lsl temp
receivebitstart:
sbic PINB, 2
rjmp receivebitstart
cbr temp, 0x01
sbic PINB, 0
sbr temp, 0x01
receivebitend:
sbis PINB, 2
rjmp receivebitend
dec temp2
brne receivebit
ret
Hat jemand eine Idee, was da falsch sein könnte? Ich kann keinen Fehler
erkennen, im Simulator funktioniert es ja korrekt.
Gruß,
Arne