【原创】基于单片机的红外遥控系统设计毕业论文设计

发布时间 : 星期四 文章【原创】基于单片机的红外遥控系统设计毕业论文设计更新完毕开始阅读

(3)中断优先级寄存器。如表2-7所示。

表2-7 IP寄存器

IP D7 --- D6 --- D5 --- D4 PS D3 PT1 D2 PX1 D1 PT0 D0 PX0 STC89C52有两个中断优先级,即高优先级和低优先级,每个中断源都可以设置为高优先级,或者低优先级,以便CPU对所有的中断实现两级中断嵌套。 (4)中断允许控制寄存器 IE

STC89C52中断系统中,中断的允许或禁止是由片内可进行位寻址的8位中断允许寄存器IE来控制的。如表2-8所示[1]。

表2-8 IE寄存器

IE D7 EA

D6 ----- D5 ----- D4 ES D3 ET1 D2 EX1 D1 ET0 D0 EX0 EA:允许中断的总控制位 ES:串行口允许中断控制位

ET1ET0:定时器1,定时器0溢出中断允许控制位 EX0,EX1:外中断INT1,INT0的中断控制位

3 软件设计

3.1 主程序设计

本设计中主程序烧写在主机STC89C52中,主机完成步进电机转速计算,电机控制,LED数码管显示等功能

(1)转速计算

本设计的步进电机的步进角是0.087890625°(5.625 64 = 0.087890625°),8拍一步,那么一步转过的角度就是0.703125°( 8 * 0.087890625°= 0.703125°);那么步进电机转过一圈需要的步数是512步(360° 0.703125°= 512) ;512步一圈,所以每一步转过的圈数是0.001953125 圈(1 512 = 0.001953125 圈)。

综上所述,在程序中声明一个uint变量pedometer并初始化0,用来统计步进电机转过的步数,那么在主程序中每当电机转过一步,pedometer自增1;电机启动的同时启动T0定时器, T0每计50ms就申请中断,当中断达到20次后,步进电机运行1s了,此时统计一下pedometer的值 ,此值就是步进电机一秒内转过的步数,所以 转速 = 每1秒的步数 * 每1步转过的圈数,此值是步进电机每秒的转速,再乘上60s就是步进电机的每分钟的转速了。T0中断20次后要调用 time_chuli()函数[10]。

void time_chuli() 每秒钟的时间处理 {

每分钟60秒,所以速度*60的倍数

rate=60*10*pedometer*0.001953125;其中0.001953125是1512得来的,因

为每512个8拍等于360度,一步也就是1512

}

计算得到了转速,自然要送到数码管显示出来,显示方式是动态扫描 (2)void Disply_rev()显示函数 {

uchar a,b,c;a是十位数,b个位数,c是小数点后第一位 uint k;定义一个临时变量存储转速

pedometer=0;临时速度清零 乘上10是因为转速有一个小数位

k=rev;每分钟的转数,因为包含了一个小数位,放大10倍 a=k 100;获得十位 k=k % 100; b=k 10;获得个位 c=k ;获得小数位 }

(3)定时器,串口初始化函数 void Serial_initialize(void) 串口初始化 {

SCON = 0x50; 串行口工作在方式1,10位异步的接收和发送,波特率可

变,有定时器1控制

TMOD = 0x21; 两个定时器一起工作, 定时器0定时方式1 ,16位定时器

方式,定时器1是方式2,波特率发生器

TH1 = 0xfd;T1波特率9600bps, TL1 = 0xfd; PCON=0x00;smod 波特率加倍位是0 EA=1;开总中断, ES=1;开串行中断

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所示。

联系合同范文客服:xxxxx#qq.com(#替换为@)