图3.1.2 单片机程序流程图
3.1.3 主函数设计
对于单片机,主程序主要实现图3.1.2中所示的流程。因而主程序的设计主要包括初始化函数的设计、接收函数的设计、串口中断服务程序的设计和步进电机运动函数的设计。主函数即为附录B中的函数main所示。
3.1.4 初始化函数设计
单片机在上电或者程序出现跑飞和出现异常时,都需要进行初始化,因而在程序中,初始化函数非常重要,本课题中的初始化函数主要是串口中断的初始化。初始化函数即为附录B中的函数init。
而初始化函数的主要内容有:设置串行口工作在模式1,8-bit UART, 使能接收;设置定时器1工作在模式2,8-bit reload;SMOD=1,串行口波特率加倍;设置为最常用的波特率9600b/s;默认message=0x00;打开总中断和串口中断等等。
3.1.5 接收函数设计
接收函数的作用是在接到串口中断命令后,接收从上位机发出的控制数据列。当flag=0时,程序一直停在WHILE循环处等待中断。当有中断时,flag置1,接收数据。Flag的设定是为了防止一个数据被接收两次。
接收函数的代码如下:
uchar recv()
{ uchar mes;
while(!flag);
mes=message;
flag=0;
return mes;
}
3.1.6 串行中断服务程序
串行中断服务程序是为了仅需简单调用即可完成串口输入输出的处理。当上位机发出中断命令后,即进入串行中断服务程序,接收上位机发出的控制数据。代码如下:
UART_SER() interrupt 4 //串行中断服务程序
{ RI=0; //标志位清零
message=SBUF; //接受字符,并存入字符串str1[]
ES=0;
ES=1;
flag=1;
}
3.1.7 步进电机运动函数设计
步进电机运动函数用来生成控制电机转速的时钟信号。根据处理后的数据得出转速控制数据后,利用本函数每隔相应的时间产生一个上升沿,驱动电机运转一步。主要代码为:
void run_step(uint vv)
{ CWX=0; //沿X方向进给一个当量
delay(vv);
CWX=1; //将cwX端口电平拉高
delay(vv);
}
延时程序delay的代码为:
void delay (uint us) //定义延时程序
{ uint i,j;
for(i=0;i<us;i++) 三通管拉制仪材料分配系数精确控制系统设计+PCB+源程序(9):http://www.youerw.com/jixie/lunwen_2394.html