河南理工大学毕业设计(论文)说明书
若是,则置SM2为‘0’,继续接收主机送来的数据;若不是,则禁止T0定时,不在接收后面的数据。当被寻址从机接收完一帧信息后,字符间隔定时器会产生定时中断,进入TO中断服务程序。图5-5是TO中断服务程序流程图。
图5-5 TO中断服务程序流程图
进入TO中断服务程序后,首先清除TO中断请求标志,停止TO定时器,接着判断是接收完成还是发送超时,若是接收完成,再判断校验和是否正确,若正确,对接收的命令进行解释,看是主机读还是主机写操作,若是主机读,则将数据打包,送到专门用于通信的数组,接着,禁止接收,置本机为应答工作方式,最后启动发送,发送第一个字节,同时启动发送时限定时器TO。当一个字节发送完后,便进入通信中断服务程序,继续发送余下数据。如果在上边判校验和时,发现不正确,则置SM2为‘1’,恢复本机
- 22 -
河南理工大学毕业设计(论文)说明书
的侦听状态,以便接收主机的重发信息。
5.3.2 主机通信软件设计
该系统主机的主要任务是循环读取从机的检测结果,并送终端显示,其通信软件由3部分组成:主程序中负责寻址从机的寻址模块、通信中断服务程序和TO中断服务程序。寻址模块程序流程图见图5-6。
图5-6 寻址模块程序流程图
对从机寻址是按照从机的编号顺序进行的,即从1号从机开始,主机发送该从机信息帧的第1个字节启动寻址,同时启动发送超时定时器TO,然后检测通信结束标志.当主机成功的接收到该从机的应答信息后,便会置位该标志,完成与该从机的通信。接下来,寻址下一从机,直到所有从机都被寻址。最后,主机完成其它功能后,又从1号从机开始下一循环的寻址。通信中断服务程序和TO中断服务程的设计方法与从机的大同小异,在此不再介绍。
- 23 -
河南理工大学毕业设计(论文)说明书
第6章 程序设计
程序是单片机灵魂,没有对应的程序,单片机系统是无法完成任何动作的,解决所涉及的问题的。编写程序必须对机器的指令系统非常的熟悉,而且不能脱离具体的机器,因此程序不能在不同的机器上通用。未了使本系统能够成功运行,程序是必不可少的,所以这次编写了一个主机程序,两个从机程序。
6.1 主机程序如下:
#include
/********************************* 按键扫描子程序
*********************************/ key_serial() interrupt 0 using 1 {
++cort; }
/********************************* 发送子程序
*********************************/ void master(void) {
if(cort==1) {
SBUF=0x01; while(TI!=1);TI=0; P3_5=0; SM2=0;
while (RI!=1);RI=0; P2=SBUF;
- 24 -
河南理工大学毕业设计(论文)说明书
}
}
SM2=1; P3_5=1;
if(cort==2) {
SBUF=0x02; }
if(cort==3)cort=1; SM2=1;
while(TI!=1);TI=0; SM2=0; P3_5=0;
while(RI!=1);RI=0; P2=SBUF; SM2=1; P3_5=1;
/***************主程序****************/ void main(void) {
P2=0xff; TMOD=0x20; TL1=0xfd; TH1=0xfd; PCON=0x00; TR1=1; SCON=0xf8; EA=1; EX0=1; IT0=1; P3_5=1;
- 25 -
河南理工大学毕业设计(论文)说明书
while(1) {
master(); } }
//发送
6.2 从机1程序如下:
#include
unsigned char serial_receiver; sbit P3_5=P3^5;
/**************************************** 串行口中断子程序
****************************************/ void serial (void) interrupt 4 using 1 { }
/*****************主程序******************/
ES=0; RI=0;
if(SBUF==0x01) {
P3_5=1; SM2=0; P1=0x10; SBUF=0x10; while(TI!=1);TI=0;
}
SM2=1; ES=1; P3_5=0;
- 26 -