一线研发之声之跑马灯变形记(三)

来源:本站
导读:目前正在解读《一线研发之声之跑马灯变形记(三)》的相关信息,《一线研发之声之跑马灯变形记(三)》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《一线研发之声之跑马灯变形记(三)》的详细说明。
简介:第二次变形:精度控制,添加中断定时器。

上述代码中,定时器的延时存在两个问题。

(1) 延时程序精度不高。在不同mcu和不同的外部晶振,这个函数都需要修改。当这个系统开启了更多的中断时,这个函数精度受到的影响就是随机性的。

(2) while+for的延时方法,属于一种“硬延时”,生生地耗掉mcu的运行资源。在实时性要求极高的嵌入式领域,这种做法显然不合时宜。

综上,在本次进化,我们需要引进系统的定时器中断功能。它至少涉及两个函数。

  /***** LED 跑马灯(从右至左)***************************/………………./**********************************************************/#define XTAL                        (36864000UL)#define TIMER_1MS                (XTAL/12UL/1000UL)        /*--------------------------------*/static volatile unsigned char  flag_80ms = 0;static void timer1(void) interrupt 3 using 1{        static unsigned char tcnt = 0;        TCNT1 += (-TIMER_1MS);/* 为何如此写法,详见章节…*/        if (++tcnt >= LIGHT_INTERVAL_TIME)        {                tcnt = 0;                flag_80ms = 1;        }}void timer_init(void){        TMOD  = 0x11;        // timer0 16-bit, timer1 16-bit        TCNT1 = (-TIMER_1MS);        TR1   = 1;        IE   |= 0x0A;        // ???? ial 0, enable timer 1, ex0,1}     /*********************************************************/void main(void){        led_light_init();        timer_init();         while (1)        {                if (flag_80ms)                {                        flag_80ms = 0;                         led_light_right2left();                }        }}   

代码3跑马灯的第二次变形

加上定时器中断后,定时器的精度提高了,mcu的运算资源也极大的释放。然而,我们不得不设置了一个全局变量“flag_80ms”,用来沟通main和定时中断,增加一个内部全局变量tcnt,用来累计1ms定时功能。此时,main.c文件里面的代码乱像已显,为此,我们迫切需要第三次的变形。

提醒:《一线研发之声之跑马灯变形记(三)》最后刷新时间 2024-03-14 01:05:36,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《一线研发之声之跑马灯变形记(三)》该内容的真实性请自行鉴别。