Kód: Vybrat vše
;BUFFER1,BUFFER1+1,BUFFER2,BUFFER2+1,RDSDA,RDSCL nadefinovány na začátku programu
RDS: MOV DPTR,#05B9h ;=0000010110111001b
MOV R1,#26 ; počet přijímaných bitů
MOV A,#0
MOV R0,#3 ;přijmi 3 bity
CALL RDSCTI ;přijímací rutina
MOV B,#0
XCH A,B ;v B vyšší bajt
MOV R0,#8 ;přijmi 8 bitů
CALL RDSCTI
XCH A,B ;v A nižší bajt
TST1: JNB B.2,DOPLN ;pokud je 2^10 nulový, doplň bit
TST2: XRL A,DPL ;XOR A a nižšího bajtu DPTR
XCH A,B ;provádí XRL B,DPH
XRL A,DPH
XCH A,B
DJNZ R1,DOPLN ;dokud není 26bitů, doplňuje
MOV BUFFER1,A ;v BUFFER1 nižší bajt
MOV BUFFER1+1,B ;v BUFFER1+1 vyšší bajt
MOV R1,#26 ;to samé jako výše
MOV R0,#3
CALL RDSCTI
MOV B,#0
XCH A,B ;v B vyšší bajt
MOV R0,#8
CALL RDSCTI
XCH A,B ;v A nižší bajt
TST3: JNB B.2,DOPLN
TST4: XRL A,DPL
XCH A,B ;provádí XRL B,DPH
XRL A,DPH
XCH A,B
DJNZ R1,DOPLN
MOV BUFFER2,A ;v BUFFER2 nižší bajt
MOV BUFFER2+1,B;v BUFFER2+1 vyšší bajt
JMP POROVN
DOPLN: CALL RDSCTI1 ;do C přijatý bit
RLC A ;rotuj A
XCH A,B ;provádí RLC B
RLC A
XCH A,B
JNB B.2,DOPLN ;pokud je 2^10 nulový, doplň bit
JMP TST4
RDSCTI: ;přečte tolik bitů, kolik je v R0
CTI1: JB RDSCL,CTI10 ;čekej na náběžnou hranu
JMP CTI1
CTI10: MOV C,RDSDA ;data bit vlož do C
DEC R1 ;odečti R1
CTI20: JNB RDSCL,CTI100 ;čekej na spádovou hranu
JMP CTI20
CTI100: RLC A ;rotuj A přes C
DJNZ R0,CTI1 ;proveď tolikrát, kolik je v R0
KONC: RET
RDSCTI1: ;přečte 1 bit
CTI2: JB RDSCL,CTI30 ;čekej na náběžnou hranu
JMP CTI2
CTI30: MOV C,RDSDA ;data bit vlož do C
DEC R1 ;odečti R1
CTI40: JNB RDSCL,CTI50 ;čekej na spádovou hranu
JMP CTI40
CTI50: RET
POROVN: MOV A,BUFFER1
XRL A,BUFFER2 ;porovnej BUFFER1 a BUFFER2
JNZ RDSS ;při neshodě provádí celé čtení znova
MOV A,BUFFER1+1 ;porovnej BUFFER1+1 a BUFFER2+1
XRL A,BUFFER2+1 ;při neshodě provádí celé čtení znova
JNZ RDS ;(při nenulovosti A provede skok)
CALL ZOBRAZ ;zobraz na LCD výsledky