📄 at89c51与p89c52点对点通讯接收.asm
字号:
/**************************************
*接收机采用P89C52X2BN芯片
*先发送请求信号,然后接收,接收后,送与
*显示程序,然后再发送请求信号。后经过与
*电脑的串口调试窗调试通信,验证程序正确
**************************************/
CS EQU P1.0 /**/
SID EQU P1.1
SCLK EQU P1.2
PSB EQU P1.3
REST EQU P1.4
HAN BIT 30H /*上下行识别*/
ORG 0000H
LJMP MAIN
ORG 0023H /*串行口中断矢量地址*/
LJMP SERVE2
ORG 0100H
MAIN: MOV SP,#60H
MOV TMOD,#20H /*定时器T1工作于方式2*/
MOV TH1,#0FDH /*波特率为9.6K*/
MOV TL1,#0FDH
SETB TR1
SETB EA /*CPU中断允许位*/
SETB ES /*串行口中断允许位*/
CLR HAN /*0为上行显示*/
MOV PCON,#00H /*串行通信波特率系数控制*/
MOV SCON,#50H /*串口状态控制寄存器*/
LCALL KAIPIN /*调用开屏,串口显示参考其他*/
MOV R1,#10H /*第一行显示16个*/
MOV R2,#10H /*第二行显示16个*/
XUN: MOV A,#00H /*发送请求信号00H*/
MOV SBUF,A
WAIT: JBC TI,XUN1 /*请求信号发送完没有*/
AJMP WAIT
XUN1: SJMP $
SERVE2:JBC RI,LOOP /*接收到没有,接收到跳"LOOP"*/
SJMP ENDT
LOOP: MOV A,SBUF /*取SBUF的内容*/
ACALL WRITESHU /*调用显示*/
LCALL DELAY /*调用延时*/
MOV A,#00H /*发送请求信号*/
MOV SBUF,A
AJMP HUAN /*判断换行信号*/
DDD: AJMP WAIT /*返回等待中断*/
ENDT: RETI /**/
/************************汇编换行程序段*/
HUAN: JNB HAN,HUAN1 /*判断第一行*/
JB HAN,HUAN3 /*判断第二行*/
HUAN1:DEC R1 /*一行为16个*/
MOV A,#00H /**/
CLR C /**/
SUBB A,R1 /*显示的一行满了没有*/
JNC HUAN2 /*满了,调换行*/
AJMP ENDT /*没满,返回*/
HUAN2:MOV A,#90H /*写入第二行首地址*/
MOV R1,#10H /*再度充填一行*/
LCALL WRITEZHI /*换行*/
SETB HAN /*置位换行,进行下一行*/
AJMP ENDT /*返回*/
/****************************************/
/***********************/
HUAN3:DEC R2
MOV A,#00H
CLR C
SUBB A,R2
JNC HUAN4
AJMP ENDT
HUAN4:MOV A,#80H
MOV R2,#10H
LCALL WRITEZHI
CLR HAN
AJMP ENDT
/***************************************/
/****************************************/
KAIPIN:
CLR REST
SETB REST
CLR PSB
MOV A,#30H ;功能设置
ACALL WRITEZHI
MOV A,#30H ;功能设置
ACALL WRITEZHI
MOV A,#0FH ;开光标
ACALL WRITEZHI
MOV A,#01H ;清屏
ACALL WRITEZHI
MOV A,#06H ;移动
ACALL WRITEZHI
MOV A,#80H
ACALL WRITEZHI
;**********************************
;写指令子程序
;**********************************
WRITEZHI: ;写指令
PUSH ACC
PUSH DPH
PUSH DPL
SETB CS
SETB SID
CLR SCLK
SETB SCLK ;1
CLR SCLK
SETB SCLK ;2
CLR SCLK
SETB SCLK ;3
CLR SCLK
SETB SCLK ;4
CLR SCLK
SETB SCLK ;5
CLR SCLK
CLR SID ;RW=0
SETB SCLK
CLR SCLK ;1
CLR SID ;RS=0
SETB SCLK
CLR SCLK ;1
CLR SID ;SID=0
SETB SCLK
CLR SCLK ;1
ACALL ZUOYI ;SID=A.7
ACALL ZUOYI ;SID=A.6
ACALL ZUOYI ;SID=A.5
ACALL ZUOYI ;SID=A.4
CLR SID ;1
SETB SCLK
CLR SCLK
SETB SCLK ;2
CLR SCLK
SETB SCLK ;3
CLR SCLK
SETB SCLK ;4
CLR SCLK
ACALL ZUOYI
ACALL ZUOYI
ACALL ZUOYI
ACALL ZUOYI
CLR SID
CLR SCLK
SETB SCLK ;1
CLR SCLK
SETB SCLK ;2
CLR SCLK
SETB SCLK ;3
CLR SCLK
SETB SCLK ;4
CLR CS
CALL DLY8
POP DPL
POP DPH
POP ACC
RET
;**********************************
;写数据子程序
;**********************************
WRITESHU: ;写数据
PUSH ACC
PUSH DPH
PUSH DPL
SETB CS
SETB SID ;CID=1
CLR SCLK
SETB SCLK ;1
CLR SCLK
SETB SCLK ;2
CLR SCLK
SETB SCLK ;3
CLR SCLK
SETB SCLK ;4
CLR SCLK
SETB SCLK ;5
CLR SCLK
CLR SID ;SID=0
SETB SCLK ;
CLR SCLK
SETB SID ;SID=1
SETB SCLK ;
CLR SCLK
CLR SID ;SID=0
SETB SCLK
CLR SCLK
ACALL ZUOYI
ACALL ZUOYI
ACALL ZUOYI
ACALL ZUOYI
CLR SID ;SID=0
SETB SCLK ;1
CLR SCLK
SETB SCLK ;2
CLR SCLK
SETB SCLK ;3
CLR SCLK
SETB SCLK ;4
CLR SCLK
ACALL ZUOYI
ACALL ZUOYI
ACALL ZUOYI
ACALL ZUOYI
CLR SID
SETB SCLK ;1
CLR SCLK
SETB SCLK ;2
CLR SCLK
SETB SCLK ;3
CLR SCLK
SETB SCLK ;4
CLR SCLK
CLR CS
CALL DLY8
POP DPL
POP DPH
POP ACC
RET
DLY8:
MOV R7,#10H
DEL: MOV R6,#10H
DEL1: DJNZ R6,DEL1
DJNZ R7,DEL
RET
ZUOYI:
RLC A
MOV SID,C
SETB SCLK
CLR SCLK
RET
DELAY:MOV 70H,#64H
LOOP2:MOV 71H,#64H
LOOP3:MOV 72H,#15H
LOOP4:DJNZ 72H,LOOP4
DJNZ 71H,LOOP3
NOP
NOP
NOP
NOP
DJNZ 70H,LOOP2
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -