Moin moin Irgendwie habe ich gerade leichte schwierigkeiten den Timer im Tiny13 für mein Programm richtig zu verwenden. Der Codeauszug: interrupt: in savesreg,sreg inc r21 cpi r21,10 brne _int0 sbr flags,refresh_display clr r21 _int0: out sreg,savesreg reti Stück aus dem hauptsprogramm: ende: sbrc flags,refresh_display rjmp mai0 rjmp ende Das ganze soll alle 10 Interrupts halt das refresh_display bit setzen in einem selbstgebastelten Flag register, damit das Hauptprogramm das display mit neuen Daten füttert. Das tolle ist: es geht nicht :) wenn ich in der interrupt routine "manuell" ein zeichen immer wieder auf das display ausgebe, funktioniert das einwandfrei. ergo= der timerinterrupt funktioniert. allerdings halt nicht mehr in dieser obigen kombination. Umgebung: Tiny13,AVR Studio,PonyProg
Mir ist aufgefallen: sbr flags,refresh_display Richtig wäre: sbr flags,1<<refresh_display sbr/cbr erwartet nicht die Bitnummer (wie sbrs/sbrc) sondern die Bitmaske... Den Rest des Codes habe ich nicht geprüft. ...
Nabend Danke Hannes. Das war der eine Grund. Der andere war, dass SBR REG,0 nicht funktioniert, sondern dass SBR REG,1 das Bit "0" anspricht.. somit war auch noch in meinen Definitionen ein Fehler. Funktioniert jetzt, danke. mfg
Na der zweite Grund entspricht doch dem Ersten... Ist doch das gleiche Problem, nur eben mit Zahl statt mit Platzhalter. Aber tröste dich, das passiert mir auch gelegentlich. Jedenfalls freut es mich, dass es nun funktioniert. Bit- & Bytebruch... ...HanneS...
ne ich glaub das verstehst du jetzt falsch.. in meiner header datei war "refresh_display" als "0" definiert. weils "bit 0" ansprechen sollte.. die funktion SBR setzt das bit 0 allerdings wenn mann SBR REG,1 benutzt.. ich zählte von 0-7, SBR zählt anscheinend von 1-8. mfg
Hi Esgibt einen Unterschied zwischen den Befehlen SBI und SBR (abgesehen vom Ziel). Bei SBI gibt der Parameter die Bitnummer (0..7) an. Der Parameter von SBR ist eine Bitmaske (0..255). Das heisst wenn du 0 benutzt wird kein Bit gesetzt. Der Wert 1 den du dann benutzt hast entspricht der Maske für Bit 0. MfG HG
@Hartmut: Danke, genau das meine ich die ganze Zeit... Thorsten: Du solltest öfters mal die Online-Hilfe zu AVR-Studio benutzen. Cursor auf einen (unklaren) ASM-Befehl setzen und F1 drücken. Das ist manchmal sehr aufschlussreich. Leider kommt man damit nicht an die Hilfe zu den Direktiven und Operatoren, die erreichst du aber über den Menüpunkt HELP. Bit- & Bytebruch... ...HanneS...
Moin Okay ich denke ich habs jetzt auch verstanden, was Ihr meint. Danke euch. Bei unklaren Befehlen hab ich mir bis jetzt immer das Atmel Datenblatt mit dem relativ ausfühlich beschriebenen Befehlssatz angeschaut. Werds auch mal mit der Hilfe probieren. mfg
SBR ist in Wirklichkeit nur ein bitwise OR. CBR ein bitwise AND sbr R23, 8 und ori R23, 8 werden zB beide auf 0x6078 übersetzt.
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.