8 Bit Serial out

Gast #59327
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
Gast #59330
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
Gast #59331
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é
Gast #59334
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

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