英锐恩单片机论坛,Microchip单片机,模拟器件,接口电路,麦肯单片机,单片机应用交流

 找回密码
 立即注册
搜索
电子烟方案单片机单片机开发深圳单片机开发
单片机方案国产单片机8位单片机电子烟方案开发
查看: 2860|回复: 0
打印 上一主题 下一主题

如何有效的实时控制LED闪烁。

[复制链接]
跳转到指定楼层
1#
发表于 2009-3-24 14:09:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在很多设计中需要有精彩而实用的LED闪烁来表示设备工作正常与否和工作状态。
在一些实时性要求不高的设计中可以用插入延时来控制LED闪烁。
它的缺点现而易见:1:LED闪烁方式反映慢。2:在延时过程不能干其它工作(中断除外),浪费了资源。3:代码雍长,真正控制LED就几个个指令,其它的延时代码占了99%的空间。
如果用TMR1或TMR2来做一个时钟,上面的种种缺点就可以避免,使得你可以腾出大量的时间做更有效的工作。
下面是用TMR1作时钟的C代码(RB1、RB2、RB3控制LED)示例:
void set_tmr1(){
TMR1L=0xdc;
TMR1H=0xb;       /*设定初值3036*/
T1CON=0B10001;             /*设定TMR1   0.125s溢出一次*/
}
void interrupt time(){
           if(TMR1IF){
                         T1CON=0B10000;            /*关闭TMR1*/
                         TMR1L=0xdc;                  
                         TMR1H=0xb;                   /*TMR1设初值*/
                         T1CON=0B10001;            /*从新设分频比,打开TMR1*/
                          if(s++>8){        /*每S清0*/
                                        s=0;
                                        if(ss++>60)/*每分钟清0*/
                                                     ss=0;
             }
            TMR1IF=0;
            return;
          }
}

unsigned char s;                    /*每0.125S累加1*/
unsigned char ss;                  /*每1秒累加1*/
void main(){
               set_tmr1();
........;                             /*设定I/O口,开TMR1中断*/
              while(1){
                    if(...)                              /*判断闪烁方式语句,下同*/
                    RB1=(bit)(s>4);            /*每1s闪烁一次,占空比50%(调节>后面值可以改变)*/
                   if(...)
                     RB2=(bit)(!ss);             /*每1分钟闪烁一次,亮1秒,熄59秒*/
                   if(...)
                    RB3=(bit)(s==0 || s==2 || s== 4 || s== 6);      /*每0.25S闪烁一次*/
                      .........;                            /*其它工作*/
                  }
}
这样的框架对于基于要求实时性高的软件查询的程序是很有效的。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|公司首页|Microchip单片机,模拟器件,接口电路,麦肯单片机,单片机应用交流 ( 粤ICP备09008620号 )

GMT+8, 2024-7-6 04:37 , Processed in 0.052042 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表