资源描述:
《主机通信子程序如下》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、主机通信子程序如下:MOVTMOD,#20HMOVTL1,#0F3HMOVTH1,#0F3HSETBTR1MOVPCON,#80HSTAT:MOVSCON,#0D8H;串口方式3,允许接收,TB8=1CLRES;禁止串行中断CLP1:MOVSBUF,#0FFH;发送命令,所有从机SM2=1JNBTI,$;等待发送完毕CLRTI;清发送中断标志MOVA,R2;取寻址的从机地址MOVSBUF,A;发送寻址的从机地址JNBTI,$;等待发送完毕CLRTIJNBRI,$;等待寻址的从机应答(返回地址)CLRRIMOVA,SBUF;读从机应答信号
2、XRLA,R2;核对地址(异或,相同为0)JNZCLP1;若地址不符合,则重发CLP2:CLRTB8;准备发送数据帧(只有寻址的从机才能接收)MOVSBUF,R3;发送命令帧JNBTI,$;等待发送完毕CLRTIJNBRI,$;等待从机应答CLRRIMOVA,SBUF;读应答信息JBAcc.7,CLP2;若是非法命令则重发(ERR=1)CJNER3,#01H,SRX0;若原命令不要求从机发送,则转STX:JNBAcc.1,CLP2;R3=01H要求从机发送,发送未准备好,则重新联络STX1:JNBRI,$;从机发送数据块长度,主机等待接
3、收完毕CLRRIMOVA,SBUF;主机接收数据块长度MOVR5,A;保存数据块长度MOVR7,A;暂存数据块长度RX_DATA:JNBRI,$;接收从机发来的数据CLRRIMOVA,SBUFMOV@R1,A;存放数据并计算校验和ADDA,R6MOVR6,A;存放校验和INCR1;指向下一数据存储单元DJNZR5,STX1;判全部数据接收完毕否?未完继续JNBRI,$;接收主机发来的数据校验和CLRRIMOVA,SBUFCJNEA,R6,ERROR;校验和不正确,则发81H表明数据出错RET;正确接收完毕,返回ERROR:MOVSBUF
4、,#81HJNBTI,$CLRTIMOVA,R7;恢复R5(收到该数据块的长度)以便恢复R1值MOVR5,ALOOP:DECR1;恢复R1首地址DJNZR5,LOOPMOVR6,00H;恢复累加和AJMPSTX1;重新等待接收SRX0:JCSRX;若原命令要求从机接收,转从机接收RET;否则返回SRX:JNBAcc.0,CLP2;从机接收未准备好,重新联络SRX1:MOVA,R4;从机接收已准备好则主机发送数据块长度MOVSBUF,AWAIT1:JBCTI,SRX1;等待主机发送完毕SJMPWAIT1TX_DATA:MOVA,@R0;主
5、机发送数据,并计算校验和MOVSBUF,AJNBTI,$CLRTIADDA,R6MOVR6,AINCR0;指向下一发送数据DJNZR4,TX_DATA;判全部数据发送完毕否?未完继续MOVA,R6;主机发送校验和MOVSBUF,AJNBTI,$CLRTIJNBRI,$;等待从机应答CLRRIMOVA,SBUF;接受应答信CLRCySUBBA,#81HJZRE_SEND;收到应答是81H则重新发送数据RET;全部数据发送成功,则返回RE_SEND:MOVA,R7;恢复该数据块长度MOVR4,ALOOP:DECR0;回到该数据块首地址DJN
6、ZR4,LOOPMOVR6,#00H;清校验和有关从机中断、T1、波特率和串行口的初始化,可按如下预先完成:ORG0023HLJMPSERVEORG0050H;串行中断服务程序入口MOVTMOD,#20H;定时器T1初始化工作于方式2MOVTL1,0F3HMOVTH1,0F3HSETBTR1MOVPCON,#80H;SMOD=1波特率倍增MOVSCON,#0F0H;串行方式3,允许接收,SM2=1同时,可用伪指令定义本从机地址:SLAVEQUR2,PSW.5为从机发送准备就绪状态标志(PSW.5=1,发送准备就绪),PSW.1为从机接收
7、准备就绪状态标志(PSW.1=1接收准备就绪)。可以在主程序中对PSW.1和PSW.5置位。通信中断服务子程序如下:SERVE:CLRRI;清接收标志位PUSHAcc;保护现场PUSHPSWSETBRS0;选择寄存器工作区CLRRS1MOVA,SBUF;接收主机发送来的地址XRLA,#SLAV;比较与本从机地址相符否JZSS1;相同,则转接收以下的数据SRET:POPPSW;不相符,则恢复现场,中断返回POPAccRETISS1:CLRSM2;准备接收数据MOVSBUF,#SLAV;发回本机地址回复主机JNBTI,$;等待发送完毕CLR
8、TIJNBRI,$;等待主机应答CLRRIJNBRB8,SS2;若受到RB8=0则从机转接收命令帧SETBSM2;否则置位SM2并返回等待主机重新联络SJMPSRETSS2:MOVA,SBUFCJNEA,#