Hallo ich möchte bei einem Attiny15L einen Taster abfragen doch mit sbiw klappt das nicht weil er den befehl nicht kennt.
Claudio wrote: > ich möchte bei einem Attiny15L einen Taster abfragen doch mit sbiw > klappt das nicht weil er den befehl nicht kennt. Das können ja nicht mal AVR, die SBIW kennen, damit. Besser nimmt man SBIS, SBIC, IN+SBRS, IN+BLT+BRTS usw. Peter
Ich möchte mit dem Attiny15 eine LED blinken lassen doch dieser einfache Code klappt nicht sbi DDRB,0 ; PB1 ist Ausgang loop: sbi PORTB,0 ; Ausgang auf Eins (LED ist aus) loop1: sbiw ZL,1 ; Ziehe von ZH:ZL eine 1 ab brne loop1 ; wenn noch nicht Null, wiederhole cbi PORTB,0 ; Ausgang auf Null (LED ist an) loop2: sbiw ZL,1 ; Ziehe von ZH:ZL eine 1 ab brne loop2 ; wenn noch nicht Null, wiederhole rjmp loop ; und das Ganze von vorne
Dann subtrahiere doch Byteweise. Wo ist das Problem? Statt loop1: sbiw ZL,1 ; Ziehe von ZH:ZL eine 1 ab brne loop1 ; wenn noch nicht Null, wiederhole schreibst Du ;bei den Deklarationen: .def null=r2 ;R2 heißt jetzt 'null' ;beim Init: clr null ;R2 (null) hat jetzt den Wert 0 ;in Deiner Schleife: loop1: subi ZL,1 ;Ziehe von ZL eine 1 ab sbc zh,null ;ziehe Carry und Inhalt des Registers null ab brne loop1 ;wenn noch nicht Null, wiederhole Das Register 'null' wird öfter gebraucht als Du denkst. ...
Na ja. Wenn der Tiny keinen SBIW hat, musst du halt die Subtraktion ausschreiben subi ZL,1 ; Ziehe von ZH:ZL eine 1 ab sbci ZH,0 Hast du dir schon mal ausgerechnet, wie schnell der kleine Teufel bis 65536 gezählt hat?
Das kann auch nicht funktionieren, weil, wie Du im Betreff schon ganz richtig festgestellt hast, der ATTiny15 den Befehl sbiw nicht kennt! Du wirst das schon mit zwei aufeinanderfolgenden 8-Bit-Subtraktionen machen müssen, also in der Art
1 | ldi r16, 0 |
2 | dec ZL |
3 | sbc ZH, r16 |
Abgesehen davon: Je nachdem, mit welcher Taktfrequenz Du arbeitest, wird die LED so schnell blinken, dass Du da gar nix von mitbekommst... sie flackert dann höchstens. BTW: > sbi DDRB,0 ; PB1 ist Ausgang Das ist ein Widerspruch!
Oh, Karl Heinz ist auch noch wach... Klar, mit sbci gehts natürlich noch kürzer. Da hatte ich jetzt wiederum nicht dran gedacht...
Aber mal was ganz anderes subi zl, 1 sbci zh, 0 brne xxxx Der brne wird wohl nicht das Angestrebte machen (erst bei zh=0, zl=0 nicht mehr springen). Der branscht nicht mehr sobald das High Byte 0 geworden ist. Oder irre ich mich da?
johnny.m wrote:
> Oh, Karl Heinz ist auch noch wach...
Ja. Meine Frau ist übers Wochende in Schladming Schi fahren.
Käptn Picard ist auch schon mit Welt retten fertig.
Was soll man sonst machen?
> Käptn Picard ist auch schon mit Welt retten fertig.
Kuck ma, da hab ich'n Vorteil: Ich hab das Filmchen auf DVD (wie auch
die anderen 9). Kann ichs mir direkt hinterher noch mal angucken...;-)
(Dann aber im englischen O-Ton...)
Karl heinz Buchegger wrote: > Aber mal was ganz anderes > > subi zl, 1 > sbci zh, 0 > brne xxxx > > Der brne wird wohl nicht das Angestrebte machen (erst bei > zh=0, zl=0 nicht mehr springen). Der branscht nicht mehr > sobald das High Byte 0 geworden ist. > Oder irre ich mich da? Ja, Du irrst. Beitrag "Re: Banale Assembler-Schleifenfrage" Peter
Peter Dannegger wrote: >> Oder irre ich mich da? > > Ja, Du irrst. > > Beitrag "Re: Banale Assembler-Schleifenfrage" > Ich wusste doch das da irgendwas war. Vielen Dank.
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.