📄 monichuankou.txt
字号:
;***************8模拟串口中断服务程序**********
;**************连线是:P3.2--P1.6**************
;******************* P1.7--P1.7****************
Jie_S:
CLR EA
CLR EX0
main1:
MOV R1,#50H ;接收数据首地址
JNB P1.7,main1 ;jnb p0.1, ;等待高电平
;**********收到高电平保持120US高电平否则是干扰信号
MAINa:
mov r7,#60
jieshou:
jnb P1.7,main ;p0.1
djnz r7,jieshou
CLR P1.7 ;CLR P0.1
SETB P3.2 ;SETB P0.0
;/////////////////////////将P0.1拉低,并等待P0.0变高
JIESHOU1:
JNB P3.2,JIESHOU1 ;P0.0
SETB P1.7 ;P0.1
MOV R2,#08H
;/////////////////// P0.0变高开始接受信号到49H内 //////////
JIESHOU2:
JNB P3.2,JIESHOU2 ;P0.0
JIESHOU3:
NOP
NOP
NOP
NOP
MOV C,P1.7 ;P0.1
RRC A
MOV @R1,A ;数据送接收地址
JIESHOU4:
JB P3.2,JIESHOU4 ; P0.0
DJNZ R2,JIESHOU2
INC R1 ;地址加1,指向下一个接收数据地址
CJNE R1,#57H,JIESHOU1 ;控制接收数据个数
SETB P1.7 ;P0.1
SETB P3.2 ;P0.0
;ACALL MAIN10
MOV A,50H
XRL A,#40H
JZ CSA1
SJMP CSA
CSA1:
MOV A,50H
XRL A,51H
XRL A,52H
XRL A,53H
XRL A,54H
;MOV 56H,A
XRL A,55H
JZ CSA2
CSA:
SETB EA
SETB EX0
RETI
CSA2: MOV A,56H
XRL A,#0DH
JZ CSA3
SJMP CSA
CSA3:
MOV CUP,#00H
MOV R0,#00H
CALL FF
SJMP CSA
;AJMP MAIN1
;**************将接收的数据处理******************
MAIN10:
MOV A,50H
XRL A,#40H
JZ CSA
MOV A,56H
XRL A,#0DH
JZ CSA
MOV CUP,#00H
MOV R0,#00H
CALL FF
RET;AJMP Main
;**************************************************
;;**************************************************
;口线初始化:
/*FASONG: MOV R1,#40H ;(R1)发送数据首地址
;20H通信正常=0通信口正常;否=1
CLR P3.2 ;p0.0 ;p0.0=0
SETB P1.7 ;p0.1 ;p0.1=1
;*********************
;等待p0.1=0表应答,
FASONG1:
MOV R7,#50
;如在100US内p0.1变高表是干扰信号
FASONG2:
JNB P1.7,FASONG ;p0.1 ;p0.1=0=100US---OK
DJNZ R7,FASONG2
MOV R7,#30
;如在160US内p0.1不变底表是干扰信号
FASONG3:
JNB P1.7,FASONG4 ;p0.1 ;100US>p0.1=0<160US-----OK
DJNZ R7,FASONG3
AJMP FASONG ;超时不应答,返回
;p0.1=0开始通信
FASONG4:
NOP
NOP
SETB P3.2
NOP
CLR P3.2
ACALL FASONGTA
RET
;xxxxxxxxxxxxxxxxxxxx通信XXXXXXXXXXXXXXXXXX
FASONGTA:
MOV R3,#08H
MOV A,@R1 ;@R1,送数据,发送
FWLP: RrC A ;先发送最低位
JC FAWR1
AJMP FWR0
FAWR1: SETB P3.2
SETB P1.7 ;p0.1 ;发送高电平
nop
NOP
NOP
NOP
NOP
NOP
SETB P3.2 ;p0.0
NOP
NOP
NOP
NOP
NOP
CLR P3.2 ;p0.0
NOP
NOP
NOP
NOP
NOP
CLR P1.7 ;p0.1
nop
NOP
NOP
NOP
NOP
AJMP FWLP1
FWR0:
CLR P1.7 ;p0.1 ;发送低电平
nop
NOP
NOP
NOP
NOP
SETB P3.2 ;p0.0
nop
NOP
NOP
NOP
NOP
CLR P3.2 ;p0.0
NOP
NOP
NOP
NOP
NOP
FWLP1:
DJNZ R3,FWLP
INC R1 ;发送数据地址加1,指向下一数据
CJNE R1,#4EH,FASONG4 ; 控制发送数据个数
;通信OK
CLR P3.2 ;p0.0
CLR P1.7 ;p0.1
MOV 21H,#00H ;=0通信正常标记
ret
;**************延时子程序**************************
yansinms: ;延时n毫秒子程序
mov r4,#63h
qn: mov r5,#0FAh
djnz r5,$
djnz r4,qn
djnz r7,yansinms
ret
yansi10Ms: ;延时10毫秒子程序
mov r4,#07dh
tim: acall clerwdt
djnz r4,tim
ret
yansi100ms: ;延时100毫秒子程序
mov r4,#63h
q100: mov r5,#0eAh
djnz r5,$
;acall clerwdt
djnz r4,q100
ret
yansi1Ms: ;延时1毫秒子程序
mov r4,#7Dh
tim1: nop
nop
djnz r4,tim1
ret
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -