Was macht diese Source (Empfänger serielle ...)

Gast #104127
Lesenswert?

Hallo ich wollte mal frage was diese Source hier macht..
Ich soll die analysieren, aber ich weiss nicht genau was die macht

Es soll sich um eine Empfänger Source für die serielle Datenübertragung
handel, aber was bewirken die einzelnen Zeilen???

ORG 0000h
Start:
  MOV R1,#00h
  MOV R2,#07h
  jb P3.1,Start2
  sjmp Start
Start2:
  MOV A,P3
  ANL A,#01h
  MOV R3,A
  MOV A,R1
  MOV A,R3
  RL A
  MOV R1,A
Warte:
  jb P3.1,Warte
  DJNZ R2,Start2
  rr A
  MOV P0,A
  sjmp Start
end
Gast #104130
Lesenswert?

Ich will ja nicht unhöflich erscheinen ...
Für welchen MC soll der Code sein ? Welche serielle Übertragung ?
(UART, RC5, ...)
Die Antwort auf deine Frage ist hier sicher schonmal im Forum (oder bei
Google) diskutiert worden.

Grüße,
Alex
Gast #104133
Lesenswert?

ORG 0000h            ; 01 Code wird auf feste Speicheradresse fixiert
Start:               ; 02 hier geht das ganze Elend los
  MOV R1,#00h        ; 03 Register R1 kommt das fertige byte rein,
initial = 00
  MOV R2,#07h        ; 04 Register R2 zählt die Bits (0-7)
  jb P3.1,Start2     ; 05 wenns am Port3 bit 1 hochgeht dann gehts los
..
  sjmp Start         ; 06 war wohl nix, nochmal Däumchen drehen gehen

Start2:              ; 07 jetzt wirds ernst: es kommt 1 bit !
  MOV A,P3           ; 08 Datenwert einholen (P3)
  ANL A,#01h         ; 09 alles wegschmeissen ausser dem Bit 0 (dem
datenbit)
  MOV R3,A           ; 10 Nutzbit nach Register 3 zwischenlagern
  MOV A,R1           ; 11 bisher aufgelaufenes in den Akku laden
  MOV A,R3           ; 12 (FEHLER IM ASSEMBLER-PROGRAMM)
  RL A               ; 13 schon mal vorsorglich in Bitposition 0 Platz
machen
  MOV R1,A           ; 14 das bis dahin schon aufgelaufene in R1
zwischenbunkern

Warte:               ; 15 warten auf das nächste bit
  jb P3.1,Warte      ; 16 ist die 1 am Port3 bit 1 schon wieder runter?
wenn nicht dann warte
  DJNZ R2,Start2     ; 17 jetzt ist endlich das vorherige bit fertig,
das nächste kann eingeholt werden
  rr A               ; 18 die letzte Rotaion aus Zeile 13 war zuviel,
halt wieder aufheben
  MOV P0,A           ; 19 das fertige Byte auf Port P0 ausgeben
  sjmp Start         ; 20 kurzer relativer Sprung zum Anfang des Elends

end                  ; alles hat ein Ende, auch dieses Programm ....


Programmzeile 12 ist wohl fehlerhaft.
wenn da irgendwas wäre der art: ORL A,R3 würde es Sinn machen:
verknüpfe den Inhalt von Register 3 (es ist eh nur dessen Bitposition 0
relevant) mit dem Akku


PS: Ich habe keine Ahnung welcher Prozessor das ist, aber der
Assemblercode ist doch selbserklärend ....
Gast #104134
Lesenswert?

Noch eine Anmerkung:

Das Timing der Taktleitung ist mir nicht ganz klar: Grundzustand (siehe
Zeile 5) scheint LOW zu sein, und auf die steigende Flanke gehts los.
Die nächsten Bits werden dann aber an der fallenden Flanke abgeholt
(siehe Zeile 16)

Die Datenleitung ist so wie sie ist, da wird also nichts mit der
Taktleitung zusammen gemischt (manche Codierungen wechseln da die
Wertigkeit von 0 und 1). Puh, das ist schon so ca. 100 Jahre her, daß
ich da mal im Digital-Kursus was von RZ, NRZ und Konsorten gehört habe
... alles weiß ich auch nicht mehr aus dem Kopf, und Lust zum Nachsehen
hab ich auch nicht

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