单片机定时器中断执行服务函数后不关闭中断允许位,计数器清0重新计数,会在发生中断,中断会再进入吗

单片机定时器中断后计数器和中断再进入

pangyinglong 2019-12-03 12:41:05  1407  收藏 9
分类专栏: 单片机 文章标签: 单片机 定时器 定时器中断 时间
版权

单片机
专栏收录该内容
10 篇文章0 订阅
订阅专栏
1、单片机定时器中断后计数器是否还会计数

解决:单片机定时器中断后计数器还是会计数的,如果重新赋值,会按照设置的时间进行计时。如果没有,则从0开始。

2、单片机在执行定时器中断时,是否在没执行当前中断情况再次执行定时器中断(中断嵌套?)

解决:中断在执行时,如果又有一个中断产生,将不会进入中断函数,知道当前中断执行结束后,才允许下一个新的中断进入。

总结:定时器中断在执行中断过程中,计数器一直计数,但是产生的中断不能进入中断函数。只有上一个中断结束后,才会发生新的中断进入。

测试:

单片机:stc12c5a60s2

软件:keil

串口软件:stc-isp

思路:在定时中断执行函数中使用串口打印0-9,采用两次打印,它们之间间隔1s,定时中断时间是10ms。通过查看串口发送的数据,如果是相同的数字两两相邻,表示延迟1s过程中中断没有再次进入;如果数字是连续而且很快显示出来的,表示在延迟1s的过程中多次进入了中断。

代码:

void time0_inter() interrupt 1{
    //2msʱ¼ä
    TF0 = 0;
    TH0 = 0xF8;
  TL0 = 0x30;
    adc.transFlag++;
    if(adc.transFlag>=10){
        adc.transFlag=0;
    }
    uart0_send_byte('0'+adc.transFlag);
    //²âÊÔ¶¨Ê±ÖжÏʱÊÇ·ñ»á¼ÌÐø¼Æʱ
    delay1s();
    uart0_send_byte('0'+adc.transFlag);
    
    //´ò¿ªADC
    adc_switch(ADC_OPEN);
}
结果:

 

                                     

由结果可以看出:定时器在延迟1s的过程中没有多次进行定时中断函数执行。

可以得出的结论是:

如果在定时中断执行函数中处理的时间超过定时时间,那么会出现中断丢失的问题,即需要进行中断处理时,由于上一个中断还未结束,失去这个时间点需要处理执行指令的机会。

如果中断函数执行处理的时间小于定时中断时间,那么就能够在下一次中断到来之前结束本次中断,这样新来的中断就能够执行需要的处理指令。
————————————————
版权声明:本文为CSDN博主「pangyinglong」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/pangyinglong/article/details/103365005

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值