Forum: Mikrocontroller und Digitale Elektronik 2 Fragen zum AVR Befehlssatz


von vinculum (Gast)


Lesenswert?

1. Kann das Zeroflag nach erfolgtem Branch weiterverwendet werden. Ich 
möchte damit Sprünge kaskadieren, die außerhalb der Reichweite für rel. 
jumps liegen.

Bsp:
 tst a
 breq p21
 ...
 tst a
p21:
 breq p22
 ...
p22:

2. Das Manual ist für mich nicht eindeutig. Kann ich ein Output-Bit über 
ein in rx, pinb einlesen?

Bsp:
 ldi r16,0x55
 out portb, r16
 nop
 in r17, pinb

Ist r17 dann 0x55?

Danke.

von Hagen R. (hagen)


Lesenswert?

2. nein,

 in r17, PORTB

ist dann 0x55

 in r17, PINB

ist exakt das was an Pegeln an den Eingängen anliegt.


1.) Ja kannst du kaskadieren, mache ich auch so. Allerdings ist es quasi 
ein "mieser Trick" weil es einen Source weniger gut wartbar macht. Dh. 
das was in einem Source steht sollte normalerweise explizit und 
aussagekräfting sein. Kaskadierst du solche Sprünge dann besteht die 
Gafahr das wenn du inerhalb dieser Kette was veränderst damit auch an 
andere Stelle das Verhalten unabsichtlich veränderst. Ist also ein Trick 
den man nur anwenden sollte wenn es auf jedes Byte FLASH Speicher 
ankommt.

Gruß Hagen

von Torsten L. (bluehorn)


Lesenswert?

vinculum wrote:
> 1. Kann das Zeroflag nach erfolgtem Branch weiterverwendet werden. Ich
> möchte damit Sprünge kaskadieren, die außerhalb der Reichweite für rel.
> jumps liegen.

Ja, kann man. Wieso auch nicht, der breq-Befehl ändert den Inhalt des 
SREG ja nicht...

> 2. Das Manual ist für mich nicht eindeutig. Kann ich ein Output-Bit über
> ein in rx, pinb einlesen?

Ja, kannst Du.

> Bsp:
>  ldi r16,0x55
>  out portb, r16
>  nop
>  in r17, pinb
>
> Ist r17 dann 0x55?

Nicht unbedingt, denn eine externe Komponente könnte die Port-Pins mit 
mehr Kraft (sprich: Strom) auf GND ziehen. Aber prinzipiell geht das. 
Nur - wozu? :)

Gruss, Torsten

von vinculum (Gast)


Lesenswert?

Vielen Dank erstmal.

<Nur - wozu?>

Ein Software-Zähler steuert die Output-Pins 0-3 zyklisch an. Auf 4-7 
liegen Inputs. Ich spare mir dann das Halten des Zählerstandes in einer 
Variablen. Beim asynchronen Einlesen sind input und Zählerstand gleich 
in einem byte vorhanden. So ähnlich wie eine Tastaturmatrix.

von Michael U. (amiga)


Lesenswert?

Hallo,

wenn es lesbarer bleiben soll:

Bsp:
 tst a
 brne p21
 rjmp p22

p21:
 ...
 tst a
 brne p21a
 rjmp p22

p21a:
 ...

p22:

Gruß aus Berlin
Michael

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.