主机通信子程序如下要点Word文档下载推荐.docx
- 文档编号:17829092
- 上传时间:2022-12-11
- 格式:DOCX
- 页数:8
- 大小:16.95KB
主机通信子程序如下要点Word文档下载推荐.docx
《主机通信子程序如下要点Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《主机通信子程序如下要点Word文档下载推荐.docx(8页珍藏版)》请在冰豆网上搜索。
读从机应答信号
XRLA,R2;
核对地址(异或,相同为0)
JNZCLP1;
若地址不符合,则重发
CLP2:
CLRTB8;
准备发送数据帧(只有寻址的从机才能接收)
MOVSBUF,R3;
发送命令帧
CLRTI
等待从机应答
读应答信息
JBAcc.7,CLP2;
若是非法命令则重发(ERR=1)
CJNER3,#01H,SRX0;
若原命令不要求从机发送,则转
STX:
JNBAcc.1,CLP2;
R3=01H要求从机发送,发送未准备好,则重新联络
STX1:
从机发送数据块长度,主机等待接收完毕
主机接收数据块长度
MOVR5,A;
保存数据块长度
MOVR7,A;
暂存数据块长度
RX_DATA:
接收从机发来的数据
MOVA,SBUF
MOV@R1,A;
存放数据并计算校验和
ADDA,R6
MOVR6,A;
存放校验和
INCR1;
指向下一数据存储单元
DJNZR5,STX1;
判全部数据接收完毕否?
未完继续
接收主机发来的数据校验和
MOVA,SBUF
CJNEA,R6,ERROR;
校验和不正确,则发81H表明数据出错
RET;
正确接收完毕,返回
ERROR:
MOVSBUF,#81H
JNBTI,$
MOVA,R7;
恢复R5(收到该数据块的长度)以便恢复R1值
MOVR5,A
LOOP:
DECR1;
恢复R1首地址
DJNZR5,LOOP
MOVR6,00H;
恢复累加和
AJMPSTX1;
重新等待接收
SRX0:
JCSRX;
若原命令要求从机接收,转从机接收
否则返回
SRX:
JNBAcc.0,CLP2;
从机接收未准备好,重新联络
SRX1:
MOVA,R4;
从机接收已准备好则主机发送数据块长度
MOVSBUF,A
WAIT1:
JBCTI,SRX1;
等待主机发送完毕
SJMPWAIT1
TX_DATA:
MOVA,@R0;
主机发送数据,并计算校验和
MOVSBUF,A
JNBTI,$
ADDA,R6
MOVR6,A
INCR0;
指向下一发送数据
DJNZR4,TX_DATA;
判全部数据发送完毕否?
MOVA,R6;
主机发送校验和
MOVSBUF,A
JNBTI,$
JNBRI,$;
MOVA,SBUF;
接受应答信
CLRCy
SUBBA,#81H
JZRE_SEND;
收到应答是81H则重新发送数据
全部数据发送成功,则返回
RE_SEND:
MOVA,R7;
恢复该数据块长度
MOVR4,A
DECR0;
回到该数据块首地址
DJNZR4,LOOP
MOVR6,#00H;
清校验和
有关从机中断、T1、波特率和串行口的初始化,可按如下预先完成:
ORG0023H
LJMPSERVE
ORG0050H;
串行中断服务程序入口
MOVTMOD,#20H;
定时器T1初始化工作于方式2
MOVTL1,0F3H
MOVTH1,0F3H
MOVPCON,#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;
保护现场
PUSHPSW
SETBRS0;
选择寄存器工作区
CLRRS1
MOVA,SBUF;
接收主机发送来的地址
XRLA,#SLAV;
比较与本从机地址相符否
JZSS1;
相同,则转接收以下的数据
SRET:
POPPSW;
不相符,则恢复现场,中断返回
POPAcc
RETI
SS1:
CLRSM2;
准备接收数据
MOVSBUF,#SLAV;
发回本机地址回复主机
等待主机应答
JNBRB8,SS2;
若受到RB8=0则从机转接收命令帧
SETBSM2;
否则置位SM2并返回等待主机重新联络
SJMPSRET
SS2:
MOVA,SBUF
CJNEA,#0AH,SS20;
判断命令正确否
SS20:
JCSS3;
A<
10,命令正确,则转命令散转处理
MOVSBUF,#80H;
A>
=10,非法命令,则向主机回复ERR=1
SJMPSRET;
发送出错报告后返回等待主机重新联络
SS3:
MOVDPTR,#TAB;
置DPTR为命令表首地址
MOVB,A;
将命令暂存在B寄存器中B=A
RLA;
左移实现A*2
ADDA,B;
3A→A(因为LJMP指令为3字节)
JMP@A+DPTR;
命令散转指令
TAB:
LJMPCOMD0;
从机接收数据
LJMPCOMD1;
从机发送数据
LJMPWEBCAM-UP;
从机将摄像头上转
LJMPWEBCAM-DOWN;
从机将摄像头下转
LJMPWEBCAM-LEFT;
从机将摄像头左转
LJMPWEBCAM-RIGHT;
从机将摄像头右转
LJMPFOCUS-IN;
从机将摄像头焦距调大
LJMPFOCUS-OUT;
从机将摄像头焦距调小
LJMPVOLTAGE-L;
从机将摄像头电压调大
LJMPVOLTAGE-S;
从机将摄像头电压调小
COMD1:
JBPSW.5,SS4;
本从机发送标志位为1,则转从机发送SS4
MOVSBUF,#00H;
否则发送TRDY=0状态字,表示从机发送未准备好
LJMPSRET;
发送未准备就绪,返回
SS4:
MOVSBUF,#02H;
向主机发送TRDY=1表示发送准备就绪
CLRPSW.5;
清发送准备就绪标志位
L_STLP:
MOVA,R4
MOVR7,A;
MOVSBUF,R4;
从机开始发送数据块长度
JNBTI,$
CLRTI
MOVA,@R0;
向主机发送数据
MOVSBUF,A
ADDA,R6 ;
发数据时计算累加和
累加和存入R6
INCR0
DJNZR4,TX_DATA
MOVA,R6
全部数据发送成功,则置位SM2
转中断返回
CLRCy;
清进位标志为恢复该数据块首地址R0做准备
MOVA,R0
SUBBA,R4;
恢复该数据块首地址R0
MOVR0,A
MOVR6,#00H;
累加和复位
AJMPL_STLP;
从机重新发送
COMD0:
JBPSW.1,SS5;
PSW.1=1,接收已准备好,转
MOVSBUF,#00H;
PSW.1=0,接收未准备好,发送RRDY=0状态字
SS5:
MOVSBUF,#01H;
发送接收已准备就绪信号,RRDY=1
CLRPSW.1;
清接收准备就绪标志
L_SRLP:
JNBRI,$;
接收主机发送数据块长度
MOVA,SBUF
MOVR5,A;
存放数据块长度
JNBRI,RX_DATA;
接收数据
MOVR6,A
INCR1
DJNZR5,RX_DATA ;
判全部数据接收完毕否,未完继续
正确接收完毕,复位
DECR1;
恢复R0首地址
DJNZR5,LOOP
MOVR6,00H ;
AJMPL_SRLP ;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 主机 通信 子程序 如下 要点