Forum: Mikrocontroller und Digitale Elektronik Einzelner Pin


von Markus (Gast)


Lesenswert?

Hallo..

Versuche schon den ganzen Tag den Wert eines Pins abzufragen.

Mega8515
Sprache: ASM
Pin D6

<Wenn Pin D6 auf Masse dann>
ldi temp, 254
<wenn nicht dann>
ldi temp, 0


bitte helft mir.

Danke, Markus

von dave (Gast)


Lesenswert?

SBIS PIND, 6
ldi temp, 254
SBIC PIND, 6
ldi temp, 0

dave

von Markus (Gast)


Lesenswert?

Hallo Dave...

hmm, mit SBis habe ich es auch schon getestet aber bin nicht darauf
gekommen dann noch sbic zu machen.

Vielen Dank........

lg, markus

von A.K. (Gast)


Lesenswert?

Besser:

ldi temp, 254
SBIC PIND, 6
ldi temp, 0

von Markus (Gast)


Lesenswert?

Danke..

und wie löse ich es wenn mehrer Pin's abgefragt werden soll ?

zb.:

sbis PinC, <pin0 und pin1 und pin2>
ldi temp, 100


vielen dank,

markus

von ...HanneS... (Gast)


Lesenswert?

z.B.:

 in temp1,pinc        ;gesamten Port einlesen
 cpi temp1,0b00000111 ;mit Konstante vergleichen (Bit 0, 1 und 2)
 brne stimmtnicht     ;wegspringen, wenns nicht überein stimmt
 ldi temp,100         ;was tun, wenns stimmt
stimmtnicht:          ;Sprungziel (Label)
 ...                  ;irgendwas anderes auswerten oder tun...

...

von dave (Gast)


Lesenswert?

@AK: Ja gut ;) aber manchmal isses andersrum auch nich verkehrt.

 IN temp1, pinc
 ANDI temp1, 0b0000 0111
 BRNE stimmtnicht
 LDI temp, 100             ; if, then
 RJMP ende_gelaende
stimmtnicht:
 LDI temp, 123             ; else..
ende_gelaende:
 NOP
 NOP  ;..

Meistens brauchts ein ANDI vorher, weil sonst würde das Ergebnis des
Vergleichs von anderen PINs verändert werden. Und für das ELSE musst du
noch mit RJMPs arbeiten.

dave

von Markus (Gast)


Lesenswert?

ok.

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.