定时中断的一种管理方法

[复制链接]
2228|4
 楼主| ocon 发表于 2007-6-14 22:02 | 显示全部楼层 |阅读模式
各软定时器都使用同一个timer0作为时基,各计数器的判断和改写都放在中断里完成,然后管理相应的标志位,在工作循环里按这些标志操作。例如:
//中断处理
#int_timer0
void get_time()
{
    set_timer0(get_timer0()+13); //刷新timer0初值
    count++;
    if(count>=20) //timer0每溢出20次
    {
        count=0;
        get_in(); //扫描一次IO
        sec++;
        show++;
        take++;
        if(sec>=1000)
        {
            sec=0;
            sec_tick=1; //秒节拍标志
        }
        if(show>=200)
        {
            show=0;
            show_tick=1; //动画节拍标志
        }
        if(take>=1000)
        {
            take=0;
            take_tick=1; //其他时间标志
        }
    }
}

工作循环中需要开始定时的时候:
show=0; 
show_tick=0;
然后等待show_tick==1即可。
程序匠人 发表于 2007-6-14 23:11 | 显示全部楼层

加油,我先占个沙发

gyt 发表于 2007-6-15 06:37 | 显示全部楼层

谢谢共享

ayb_ice 发表于 2007-6-15 08:06 | 显示全部楼层

这有新意吗。。。

 楼主| ocon 发表于 2007-6-15 11:13 | 显示全部楼层

楼上,我水平有限啊,呵呵

您需要登录后才可以回帖 登录 | 注册

本版积分规则

145

主题

5006

帖子

14

粉丝
快速回复 在线客服 返回列表 返回顶部