8 Bit Serial out

Gast #59327
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
@Dirk

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

MfG  Manfred Glahe
Gast
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
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
Hi,

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

Ich bedanke mich


Mfg

Dirk
Gast
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

Eine eigene Frage? Dieser Thread ist über 22 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.