多机通信举例:例8—4现有1台主机与10台从机进行双向通信
从机地址为:00H——09H
设主、从机以方式3进行串行通信,波特率为1200,F晶振为6MHZ
下面以主机发送数据,从机接收数据为例说明
主机设定有关寄存器的内容如下:R1——存放主机发送的数据块首地址R2——存放寻址的从机地址R3——存放主机发送数据块的长度通信命令约定:“01H”:表示主机发送数据,从机接收数据;“02H”:表示主机接收数据,从机发送数据
主机通信程序流程图如图8—8所示:NY图8—8主机通信程序流程图由图8—8流程图可得主机通信程序清单如下:MAIN:MOVTMOD,#20H;定时器T1设置工作方式2
MOVTL1,#0F3H;T1置初值
定时器T1初始化串行口初始化向从机发送地址向从机发送命令发送数据块从机地址相符
开始结束延时接收从机返回的地址发送无效地址FFH定时器T1初始化开始MOVTH1,#0F3HSETBTR1;启动T1
MOVPCON,#00H;波特率不倍增
MOVSCON,#0D8H;串行口设置工作方式3,TB8置1,表示发送地址
SADDR:MOVA,R2;取出从机地址
MOVSBUF,A;发送从机地址
JNBRI,$;等待从机应答
CLRRI;接收到从机应答,RI清零
MOVA,SBUF;取出从机应答数据(从机地址)
XRLA,R2;核对应答地址
JZMSEND;若地址相符转发送命令
SETBTB8;地址不相符,置地址标志,以便重发地址
CLRTIMOVSBUF,#0FFH;发送无效地址,使所有从机SM2置1
SJMPSADDR;重发地址
MSEND:CLRTB8;地址相符,准备发送命令、数据等
MOVSBUF,#01H;发送命令,要求从机接收数据
LCALLDELAY10;延迟10MS
MAGAIN:MOVSBUF,@R1;主机发送数据
JNBTI,$;等待一个字符发送