Habe ein Programm in Hex Code im AVR Studio geöffnet. Dieses soll eigentlich IR-Signale erkennen und per USB an den PC melden! Ich möchte mir dieses Programm umschreiben um direkt (ohne USB) Ausgänge am µC zu schalten! Bin noch ganz am Anfang was µC angeht! So wie ich dass beobachten konnte wird in diesem Programm anfangs ein paar einstellungen vorgenommen wie Pullup Widerstände einschalten und solche Sachen. Anschließend wartet das Program sozusagen darauf dass R16 den Wert 2 oder 3 annimmt +0000006F: 9BB0 SBIS 0x16,0 Skip if bit in I/O register set +00000070: C005 RJMP PC+0x0006 Relative jump +00000071: 3002 CPI R16,0x02 Compare with immediate +00000072: F069 BREQ PC+0x0E Branch if equal +00000073: 3003 CPI R16,0x03 Compare with immediate +00000074: F041 BREQ PC+0x09 Branch if equal +00000075: CFF9 RJMP PC-0x0006 Relative jump +00000076: EF4F SER R20 Set Register +00000077: 99B0 SBIC 0x16,0 Skip if bit in I/O register cleared +00000078: CFF6 RJMP PC-0x0009 Relative jump +00000079: 954A DEC R20 Decrement +0000007A: F7E1 BRNE PC-0x03 allerdings verstehe ich nicht warum das abgefragt wird der wert in R16 kann sich doch nicht einfach so ändern wenn ständig nur dieser Programmteil ausgeführt wird. Eigentliche Frage: können Register auch noch anderweitig beschrieben werden? Ohne dass im Programm direkt durch Programmieren etwas in R16 geschrieben wird? Also ich stell mir dass jetzt so vor: Irgendeine Schnittstelle empfängt was und schreibt dann eben in R16 was rein. Ist dies so? Wenn ja welche und warum?!?
solche Bruchstücke (Recompilate) sagen nicht allzuviel aus. Allerdings kann sich der Wert von r16 natürlich durch eine Interruptfunktion geändert werden.
Hi Ja. Zum Beispiel in Interrupt-Routinen. Interrupts unterbrechen das laufende Programm, führen die Interrupt-Routine aus, und kehren dann an die Stelle zurück, an der das Programm unterbrochen wurde. Innerhalb der ISR können natürlich Register geändert werden. Auf diese Änderung kann das Hauptprogramm beispielsweise reagieren. MfG Spess
Ahh super und was genau führt nun zur Änderung? Bzw. wo kann ich nachsehen welche Interrupt Routinen auf welche Register zugreifen und was und warum sie dort was wie machen?
Hi Im Datenblatt des Controllers ist die Interruptsprungtabelle enthalten, die am Anfang des Programms steht. Von dort springt das Programm in die entsprechenden Routinen. Interruptroutinen enden immer mit einem 'reti'. MfG Spess
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.