www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Attiny15 kennt SBIW nicht


Autor: Claudio (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Claudio (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Hannes (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

...

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Hannes (Gast)
Datum:

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

...

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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
ldi r16, 0
dec ZL
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!

Autor: Hannes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Beeinflusst dec das Carry??

Ich denke nicht...

...

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: johnny.m (Gast)
Datum:

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...)

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.