public readbyte
public sendbyte
proc segment code
bytes segment data
; bits segment bit
public ?sendbyte?BYTE
public ?readbyte?BYTE
rseg bytes
?sendbyte?BYTE:
ds 1
?readbyte?BYTE:
ds 1
rseg proc
readbyte:
nop
SIM_RXD:
setb ; SETB
MOV TH0,#0f4h ;TH0,#0E8H; ;232(E8)波特率为4800
MOV TL0,#0f4h ;TL0,#0E8H; ;244(F4)波特率为9600
MOV R2,#250 ;
MOV R3,#8 ;
CLR A
CLR TF0
MOV R4,#8 ; 8 times
MOV R6,#8 ;8 bits
MOV R5,#0
SIM_RXD_LOOP1:
JNB ,SIM_RXD_10 ;;,SIM_RXD_10 ;检测到开始位:低电平,则跳
AJMP SIM_RXD_LOOP1
SIM_RXD_10:
SETB TR0 ;打开计时T0开关
NOP
NOP
SIM_RXD_11:
JB ,SIM_RXD_END ;;,SIM_RXD_END ;检测出错则跳
JNB TF0,$
CLR TF0
DJNZ R4, SIM_RXD_11 ; 始位时间未完则等
MOV R4,#8
;开始接收8位数据位
;开始检测8位数据位
SIM_RXD_101:
JNB ,SIM_RXD_102;,SIM_RXD_102
INC R5 ;NO. of bit =1
SIM_RXD_102:
JNB TF0,$
CLR TF0
DJNZ R4,SIM_RXD_101 ;检测8次
CJNE R5,#4,$+3 ;当R5=>5时,0-->c,否则C=1
CPL C
RRC A ;取出检测数据,
MOV R5,#0
MOV R4,#8
DJNZ R6,SIM_RXD_101 ; 8 bits
NOP
NOP
NOP
JNB ,SIM_RXD_END;JNB ,SIM_RXD_END ;停止位不为1则出错
JNB TF0,$
JNB ,SIM_RXD_END;JNB ,SIM_RXD_END ;停止位不为1则出错
;CLR ;=0,收到正确数据
CLR TR0 ; CLOSE T0
RET
SIM_RXD_END:
;S
232(E8)波特率为4800 来自淘豆网m.daumloan.com转载请标明出处.