Forum: Mikrocontroller und Digitale Elektronik Attiny15 kennt SBIW nicht


von Claudio (Gast)


Lesenswert?

Hallo

ich möchte bei einem Attiny15L einen Taster abfragen doch mit sbiw 
klappt das nicht weil er den befehl nicht kennt.

von Peter D. (peda)


Lesenswert?

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

von Claudio (Gast)


Lesenswert?

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

von Hannes (Gast)


Lesenswert?

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.

...

von Karl H. (kbuchegg)


Lesenswert?

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?

von Hannes (Gast)


Lesenswert?

An sbci hatte ich jetzt gar nicht gedacht... (schäm)

...

von johnny.m (Gast)


Lesenswert?

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!

von Hannes (Gast)


Lesenswert?

Beeinflusst dec das Carry??

Ich denke nicht...

...

von johnny.m (Gast)


Lesenswert?

Oh, Karl Heinz ist auch noch wach... Klar, mit sbci gehts natürlich noch 
kürzer. Da hatte ich jetzt wiederum nicht dran gedacht...

von johnny.m (Gast)


Lesenswert?

@Hannes:
Hast natürlich recht! Mit dec gehts nicht...

von Karl H. (kbuchegg)


Lesenswert?

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?

von Karl H. (kbuchegg)


Lesenswert?

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?

von johnny.m (Gast)


Lesenswert?

> 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...)

von Peter D. (peda)


Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

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
Noch kein Account? Hier anmelden.