单片机双机串口通信程序设计

我要用汇编程序。

第1个回答  2019-05-27
初始化程序:
BTLEQU2FH;波特率放在内部RAM的2FH单元
MOVTMOD,#21H;T0方式1,16位计数器,T1方式2,串口用
SETBTR0;启动T0
MOVBTL,#0F3H;波特率设定为1200
MOVSCON,#0C0H;串口方式3,9位数据,禁止接收
接收及验证程序:
NUMEQU2BH;同步符个数值存放在内部RAM的2BH单元
TEMPEQU2CH
ROM-CH:DB55H,55H,55H,55H,55H,55H,55H,55H,55H,55H
DB55H,55H,55H,55H,55H,55H,55H,55H,55H,55H;20字节同步符
MIMDB'WSC':3字节密码“WSC”
SETBP3.5;置电台收状态
SETBREN;允许串口接收
A1:MOVNUM,#0;记录连续到同步符55H的个数
A2:JBRI,A2;串口有数据转A3
A3:CLRRI;清接收中断标志
MOVA,SBUF;读串口数据
CJNEA,#55H,A1;不是同步符转A1
INCNUM;收到的同步符个数加1
MOVA,NUM;取收到的同步符个数
CJNEA,#5,A2;未收够连续5个55H转A2
A4:MOVNUM,#0;密码验证,记录收到密码字节数
A5:MOVDPTR,#MIM;密码字符首址
MOVA,NUM
MOVCA,@A+DPTR;查表取密码
MOVTEMP,A;保存密码
JBRI,A6;串口收完一个字节转A6

A6:CLRRI;清接收中断标志
MOVA,SBUF;读串口数据
CJNEA,TEMP,A4;与密码不符转A4
INCNUM;收到的密码个数加1
MOVA,NUM;取已收到的密码字节数
CJNEA,#3,A5;密码未收完转A5
发送程序:
CLRP3.5;置电台发状态
MOVB,#23
MOVDPTR,#ROM-CH
B1:CLRA
MOVCA,@A+DPTR;查表发送同步符和密码共24字节
INCDPTR
LCALLSEND-CH;调发送单字节子程序
DJNZB,B1

CLRA
MOVDPTR,#7000H;外部RAM数据首址,发送外部RAM中的数据到电台
B2:CJNER4,#0,B3
CJNER3,#0,B3;R4R3=发送字节数
B3:MOVXA,@DPTR;取数据
INCDPTR
LCALLSEND-CH
CJNER3,#0,B4
CJNER4,#0,B5
B4:DECR3
LJMPB2
DECR3
DECR4
LJMPB2

SEND-CH:SETBTB8
MOVSBUF,A
DB0,0,0,0,0,0,0,0
JNBTI,$;延时4μs
CLRTI
RET
结语
相似回答
大家正在搜