PS=1;串行中断为优先级; PT0=0;定时中断为低优先级 TR1= 1; 启动串行口通讯
TH0 = 0x4c;定时器在11.0592M晶振下定时方式1时延时50MS的值 TL0 = 0x00; 计数值重装 }
void time_init()
{ TH0 = 0x4c;定时器在11.0592M晶振下定时方式1时延时50MS的值
TL0 = 0x00; 计数值重装 milli_second=0; ET0=1;开启中断 TR0=1;开启定时器 }
主流程图如图3-1所示。
开始串口初始化,设定时器工作方式T0 50ms定时,T1波特率发生,9600bps,启动串行通讯 For循环,判断电机的启动键值,若启动键按下start_motor=1?Y开定时器0中断,启动定时器0 ,50ms定时N电机停转动Y方向direction =1?N正转;D-DC-C-CB-B-BA-A-AD,通电,完成一个8拍反转;D-DA-A-AB-B-BC-C-CD,通电,完成一个8拍Pedometer步数计加1Pedometer步数计加1判断T0ms溢出中断是否到了20次判断T0ms溢出中断是否到了20次NYNYT0溢出20次,电机转过1s,根据步数转速=600*pedometer*0.001953125T0溢出20次,电机转过1s,根据步数转速=600*pedometer*0.001953125图3-1 主流程图
定时器T0中断处理过程如图3-2所示。
开始T0,50ms溢出中断Y关闭定T0中断和计时ET0 = 0 ,TR0 =0重新送如定时初值TH0 = 0x4c;TL0 =0x00milli_second+ 1milli_second = 20是否到1秒?N中断返回等待下一次中断Y转速rev=600*pedometer*0.001953125
图3-2 定时器T0中断函数
开始串行中断接收标志位RI=1?Y串行中断服务函数RI置0;将SBUF中数据读入接收数组receive_data[0]中延时,接着调用数据处理函数HandleSwitch判断receive_data[0]的值0X180x7a0X100X380X5a启停电机加速减速正转反转 图3-3 串行中断子函数
3.2 解码程序设计
解码程序主要部分:
if(Infrared_in==0) 等待9MS的引导码低电平 {
Time=0;先清0
while(Infrared_in==0)引导码到了 {
Time++;数值自增,直到引导码4.5ms低电平掠过 }
if(Time>Lead_min && Time
相关推荐: