下位机软件总体结构流程图如图 5.2所示:
图 5.2 下位机软件流程图
5.3.2.中断初始化
中断初始化主要用来对中断模块中寄存器赋初值, 同时打开单片机总中断和
串口中断。串口中断初始化的下位机代码如下:
void init()
{
SCON=0x50; // SCON: 模式 1, 8-bit UART, 使能接收
TMOD=0x20; // TMOD: timer 1, mode 2, 8-bit reload
PCON|=0x80; //SMOD=1
TH1=0xFD;
TL1=0xFD; // TH1: reload value for 4800 baud @ 12MHz
EA=1; //打开总中断*/
ES=1; //打开串口中断
TR1=1; // TR1: timer 1 run
message=SLEEP;
}
5.3.3.中断服务程序
当 PC机向下位机发送控制字命令时,下位机立即进入中断服务子程序,然
后将标志位清零,读取缓冲区中字符。最后返回主函数
UART_SER() interrupt 4
{
RI=0; //标志位清零
message=SBUF; //接受字符,并存入字符串 str1[]
ES=0;
ES=1;
flag=1;
}
5.3.4.主函数设计
当下位机没有接收到中断信号时,message=SLEEP,单片机进入休眠状态,
等待中断的到来。中断产生后,依据接收到的字符进入 switch 程序,选择相应
的Case语句执行。
Switch 语句包括 4种情况:
(1)Case SLEEP,对应的十751进制数0x00,单片机接收到此字符后 PCON
置为 01,单片机进入休眠状态。
(2)CASE SEND_START_XY1,对应的十751进制数位 0xAA,代表三文精密
工作台要进行平面运动。单片机接收到此字符后 ,进入二文工作台数据接收子
函数 kzz(),依次接收 a(2)~a(11)共 10 个字符,并通过处理计算出二文运动的起
点坐标(x1,y1),终点(x2,y2),速度v。最后返回主函数。
(3)CASE SEND_START_XY2,对应的十751进制数位 0x97,代表三文精密
工作台要进行平面运动。单片机接收到此字符后 ,进入二文工作台数据接收子
函数 kzz(),依次接收 a(2)~a(11)共 10 个字符,并通过处理计算出二文运动的起
点坐标(x1,y1),终点坐标(x2,y2),速度 v。最后返回主函数,将二文工作台的
当前坐标(x_buff,y_buff)赋给起点坐标(x1,y1) ,以实现任意位置回零的功能。 三维精密工作台机械结构及其控制系统设计(16):http://www.751com.cn/jixie/lunwen_2764.html