主机通信子程序如下要点.doc

上传人:工**** 文档编号:559906915 上传时间:2023-03-17 格式:DOC 页数:13 大小:69KB
返回 下载 相关 举报
主机通信子程序如下要点.doc_第1页
第1页 / 共13页
主机通信子程序如下要点.doc_第2页
第2页 / 共13页
主机通信子程序如下要点.doc_第3页
第3页 / 共13页
主机通信子程序如下要点.doc_第4页
第4页 / 共13页
主机通信子程序如下要点.doc_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《主机通信子程序如下要点.doc》由会员分享,可在线阅读,更多相关《主机通信子程序如下要点.doc(13页珍藏版)》请在金锄头文库上搜索。

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;读从机应答信号XRLA,R2;查对地点(异或,同样为0)JNZCLP1;

2、若地点不切合,则重发CLP2:CLRTB8;准备发送数据帧(只有寻址的从机才能接收)MOVSBUF,R3;发丧命令帧JNBTI,$;等候发送完成CLRTIJNBRI,$;等候从机应答CLRRIMOVA,SBUF;读应答信息JBAcc.7,CLP2;假如非法命令则重发(ERR=1)CJNER3,#01H,SRX0;若原命令不要求从机发送,则转STX:JNBAcc.1,CLP2;R3=01H要求从机发送,发送未准备好,则从头联系STX1:JNBRI,$;从机发送数据块长度,主机等候接收完成CLRRIMOVA,SBUF;主机接收数据块长度MOVR5,A;保留数据块长度MOVR7,A;暂存数据块长度R

3、X_DATA:JNBRI,$;接收从机发来的数据CLRRIMOVA,SBUFMOVR1,A;寄存数据并计算校验和ADDA,R6MOVR6,A;寄存校验和INCR1;指向下一数据储存单元DJNZR5,STX1;判所有数据接收完成否?未完持续JNBRI,$;接收主机发来的数据校验和CLRRIMOVA,SBUFCJNEA,R6,ERROR;校验和不正确,则发81H表示数据犯错RET;正确接收完成,返回ERROR:MOVSBUF,#81HJNBTI,$CLRTIMOVA,R7;恢复R5(收到该数据块的长度)以便恢复R1值MOVR5,ALOOP:DECR1;恢复R1首地点DJNZR5,LOOPMOVR6

4、,00H;恢复累加和AJMPSTX1;从头等候接收SRX0:JCSRX;若原命令要求从机接收,转从机接收RET;不然返回SRX:JNBAcc.0,CLP2;从机接收未准备好,从头联系SRX1:MOVA,R4;从机接收已准备好则主机发送数据块长度MOVSBUF,AWAIT1:JBCTI,SRX1;等候主机发送完成SJMPWAIT1TX_DATA:MOVA,R0;主机发送数据,并计算校验和MOVSBUF,AJNBTI,$CLRTIADDA,R6MOVR6,AINCR0;指向下一发送数据DJNZR4,TX_DATA;判所有数据发送完成否?未完持续MOVA,R6;主机发送校验和MOVSBUF,AJNB

5、TI,$CLRTIJNBRI,$;等候从机应答CLRRIMOVA,SBUF;接受应答信CLRCySUBBA,#81HJZRE_SEND;收到应答是81H则从头发送数据RET;所有数据发送成功,则返回RE_SEND:MOVA,R7;恢复该数据块长度MOVR4,ALOOP:DECR0;回到该数据块首地点DJNZR4,LOOPMOVR6,#00H;清校验和相关从机中止、T1、波特率和串行口的初始化,可按以下早先达成:ORG0023HLJMPSERVEORG0050H;串行中止服务程序进口MOVTMOD,#20H;准时器T1初始化工作于方式2MOVTL1,0F3HMOVTH1,0F3HSETBTR1M

6、OVPCON,#80H;SMOD=1波特率倍增MOVSCON,#0F0H;串行方式3,同意接收,SM2=1同时,可用伪指令定义本从机地点:SLAVEQUR2,PSW.5为从机发送准备就绪状态标记(PSW.5=1,发送准备就绪),PSW.1为从机接收准备就绪状态标记(PSW.1=1接收准备就绪)。能够在主程序中对PSW.1和PSW.5置位。通讯中止服务子程序以下:SERVE:CLRRI;清接收标记位PUSHAcc;保护现场PUSHPSWSETBRS0;选择寄存器工作区CLRRS1MOVA,SBUF;接收主机发送来的地点XRLA,#SLAV;比较与本从机地点符合否JZSS1;同样,则转接收以下的数

7、据SRET:POPPSW;不符合,则恢复现场,中止返回POPAccRETISS1:CLRSM2;准备接收数据MOVSBUF,#SLAV;发回本机地点答复主机JNBTI,$;等候发送完成CLRTIJNBRI,$;等候主机应答CLRRIJNBRB8,SS2;若遇到RB8=0则从机转接收命令帧SETBSM2;不然置位SM2并返回等候主机从头联系SJMPSRETSS2:MOVA,SBUFCJNEA,#0AH,SS20;判断命令正确否SS20:JCSS3;A=10,非法命令,则向主机答复ERR=1JNBTI,$CLRTISJMPSRET;发送犯错报告后返回等候主机从头联系SS3:MOVDPTR,#TAB

8、;置DPTR为命令表首地点MOVB,A;将命令暂存在B寄存器中B=ARLA;左移实现A*2ADDA,B;3AA(由于LJMP指令为3字节)JMPA+DPTR;命令散转指令TAB:LJMPCOMD0;从机接收数据LJMPCOMD1;从机发送数据LJMPWEBCAM-UP;从机将摄像头上转LJMPWEBCAM-DOWN;从机将摄像头下转LJMPWEBCAM-LEFT;从机将摄像头左转LJMPWEBCAM-RIGHT;从机将摄像头右转LJMPFOCUS-IN;从机将摄像头焦距调大LJMPFOCUS-OUT;从机将摄像头焦距调小LJMPVOLTAGE-L;从机将摄像头电压调大LJMPVOLTAGE-S

9、;从机将摄像头电压调小COMD1:JBPSW.5,SS4;本从机发送标记位为1,则转从机发送SS4MOVSBUF,#00H;不然发送TRDY=0状态字,表示从机发送未准备好JNBTI,$CLRTILJMPSRET;发送未准备就绪,返回SS4:MOVSBUF,#02H;向主机发送TRDY=1表示发送准备就绪JNBTI,$CLRTICLRPSW.5;清发送准备就绪标记位L_STLP:MOVA,R4MOVR7,A;暂存数据块长度MOVSBUF,R4;从机开始发送数据块长度JNBTI,$CLRTITX_DATA:MOVA,R0;向主机发送数据MOVSBUF,AJNBTI,$CLRTIADDA,R6;发

10、数据时计算累加和MOVR6,A;累加和存入R6INCR0DJNZR4,TX_DATAMOVA,R6MOVSBUF,AJNBTI,$CLRTIJNBRI,$;等候主机应答CLRRIMOVA,SBUF;接受应答信CLRCySUBBA,#81HJZRE_SEND;收到应答是81H则从头发送数据SETBSM2;所有数据发送成功,则置位SM2LJMPSRET;转中止返回RE_SEND:MOVA,R7;恢复该数据块长度MOVR4,ACLRCy;清进位标记为恢复该数据块首地点R0做准备MOVA,R0SUBBA,R4;恢复该数据块首地点R0MOVR0,AMOVR6,#00H;累加和复位AJMPL_STLP;从机从头发送COMD0:JBPSW.1,SS5;PSW.1=1,接收已准备好,转MOVSBUF,#00H;PSW.1=0,接收未准备好,发送RRDY=0状态字JNBTI,$CLRTILJMPSRET;转中止返回SS5:MOVSBUF,#01H;发送接收已准备就绪信号,RRDY=1JNBTI,$CLRTICLRPSW.1;清接收准备就绪标记L_SRLP:JNBRI,$;接收主机发送数据块长度CLRRIMOVA,SBUFMOVR5,A;寄存数据块长度MOVR7,A;暂存数据块长度RX_DATA:JNBRI,RX_DATA;接收数据CLRRIMOVA,SBUFMOV

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号