Forum: Mikrocontroller und Digitale Elektronik 8 Bit Serial out


von Dirk (Gast)


Lesenswert?

Hi,

leider habe ich ein kleines Verstaendisproblem. Ich moechte per ASM 8
Bit Serial ausgeben. Dazu habe ich diese Subroutine geschrieben, aber
leider funktioniert es nicht richtig. Ich hoffe jemand kann mir kurz
auf die Spruenge helfen.

Mfg

Dirk

ldi txcount, 0x08


txrrf:
ror outdata      ; Bit shiften Rechts
dec txcount      ; Counter erhoehen
tst txcount      ; if counter = 0 then
breq zero      ; goto zero
rjmp txnext      ; else goto txnext
zero:
ret        ; Return

von Khani (Gast)


Lesenswert?

Punkt A : Wohin willst Du das ausgeben ?
Punkt B : Was genau funktioniert nicht ?

MfG, Khani

von Manfred Glahe (Gast)


Lesenswert?

@Dirk

Sieht nicht falsch aus, aber Du machst doch noch keine Ausgabe in der
Rutine. Du schiebst nur outdata nach rechts.

MfG  Manfred Glahe

von crazy horse (Gast)


Lesenswert?

ldi txcount, 0x08

txrrf:
ror outdata      ; Bit shiften Rechts
//hier muss irgendwas stehen, was die geschobenen Daten
//auch tatsächlich ausgibt, das jeweilige Bit steht in C
dec txcount      ; Counter erhoehen
tst txcount      ; if counter = 0 then
//unnötig
breq zero      ; goto zero
rjmp txnext      ; else goto txnext
//wo ist txnext??
zero:
ret        ; Return

besser so:
dec txcount
brne txrrf
ret

von André Kronfeldt (Gast)


Lesenswert?

Hallo,

dec => decrement, nicht 'Counter erhöhen'

ldi txcount, 0x08
txrrf:
  - Hier Bit0 von outdata irgendwo ausgeben -
ror outdata      ; Bit shiften Rechts
dec txcount      ; Counter erniedrigen
brne txrrf       ; if Zeroflag cleared, goto txrrf
ret              ; Return

Sonst isses eigentlich okay.

Grüße,
André

von André Kronfeldt (Gast)


Lesenswert?

Mist, war ich einen kleinen Tacken zu spät ;-(

von Dirk (Gast)


Lesenswert?

Hi,

wunderbar das war es .... irgendwie bin ich mit dem abfragen der
Variabel ins schleudern gekommen ..... (tst txcount usw.)

Ich bedanke mich


Mfg

Dirk

von Dirk (Gast)


Lesenswert?

Hi,

ich hab mein Fehler gefunden und zwar habe ich txcount-1 gerechnet ....
aber ich habe vergessen Txcount wieder zuladen.


txbits:
ldi txcount, 0x08    ; Shiftout Counter = 8 Bit
txnext:
sbi portc,1        ; REMOTE LINE HIGH
rcall txwait      ; 562 µs warten
cbi portc,1        ; REMOTE LINE LOW
rcall txwait      ; 562 µs warten
sbrs outdata,0      ; Skip if Bit in Register = 1
rcall txrrf        ; Shiftout
rcall txwait      ; 562 µs warten
rcall txwait      ; 562 µs warten

txrrf:
ror outdata          ; Bit shiften Rechts
dec txcount          ; Counter erniedrigen
brne txrrf           ; if Zeroflag cleared, goto txrrf
ldi txcount, 0x08    ; TxCount wieder laden (DAS FEHLTE)
ret


Mfg

Dirk

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.