单片机怎么在灯闪烁的同时去做另一件事情呢?

2020-01-13 18:34发布


程序中定时1s和10s有什么问题没有

BOOL  volatile  led_flag;
BOOL  volatile  flag_1s;
BOOL  volatile  flag_10s;

void Sys_10ms_Interrupt(void) //10ms中断函数
{
        static volatile  u16 led_timer = 0;
        static volatile  u16 count_timer = 0;
        static volatile  u16 count_timer2 = 0;
        count_timer++;
        flag_1s = 0;
        if(count_timer%100 == 0)       
        {       
                flag_1s = 1;          //1s定时
                count_timer2++;
                if(count_timer2 == 10)
                {                  
                        flag_10s = 1;       //10s定时
                        count_timer2 = 0;
                }
        }
        led_timer++;
        if(led_timer>10) //100ms 反转
        {
                led_flag =~led_flag;
                led_timer = 0;
        }
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
42条回答
carollim
1楼-- · 2020-01-13 23:14
直接是否等于100不好吗
pisgah
2楼-- · 2020-01-14 03:26
这是中断函式,在主函式内做你的其他事情(另一件事情...)
elec2000
3楼-- · 2020-01-14 03:57
本帖最后由 elec2000 于 2018-11-3 15:29 编辑

单片机程序中点灯是次要的,主要的是你其他的重要事情。
定时中断是你在干重要事情时,定时的被打断(10mS)去记录被打断多少次,,如果到了10次,则反转LED的状态;到了100次则确认1S时间到做一个 flag_1s = 1,同时count_timer2+1(一秒加1)。当count_timer2=10时,。。。。
而这个中断时间很短(与10mS比较),所以你有很多时间去干其他的重要事情。
laujc
4楼-- · 2020-01-14 05:31
 精彩回答 2  元偷偷看……
ali1019
5楼-- · 2020-01-14 07:14
不要浪費主程序只去做等待動作, 需善用中斷, 也不要在中斷裡做太多事情.
时光黑白
6楼-- · 2020-01-14 10:33
论坛上马潮老师的按键程序,了解一下

一周热门 更多>