Attiny15 kennt SBIW nicht

Gast #485258
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
Gast #485263
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.

...
Gast #485267
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!
Gast #485275
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...)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren