51单片机定时器中断程序如何退出

定时器怎么退出,自己写了个程序,这样的,程序开始先执行定时中断服务程序,中断请求响应共100次,之后退出定时器再执行其他程序,自己编写的,EA=0,可是第101次中断,中... 定时器怎么退出,自己写了个程序,这样的,程序开始先执行定时中断服务程序,中断请求响应共100次,之后退出定时器再执行其他程序,自己编写的,EA=0,可是第101次中断,中断程序照样响应,影响了后续的程序,如何在100次时完全退出定时器中断,不影响后面的程序?另外怎么把定时器中断写成一个子程序,想调用就调用,想停止就停止,不影响到其他子程序的运行? 展开
 我来答
野人无事不言L
推荐于2016-07-29 · TA获得超过1414万个赞
知道顶级答主
回答量:2242万
采纳率:0%
帮助的人:146.4亿
展开全部
我来帮你写一个,程序太简单了,下面是我帮你写的程序我测试过能满足你的要求,希望我的回答对你有帮助! /* * * * * * * * * * * * * * * * **/ #include "REG52.H" /* * */ sbit LED_A = P1^0; sbit LED_B = P1^1; sbit LED_C = P1^2; unsigned char TIME_BASE; unsigned char MACT_ENDB; unsigned char Rece_Errp; /* * 定时器初始化 */ void SystemInit(void) { TMOD = 0x01; TH0 = (65536 - 45872) / 256; // 定时50ms //晶振:11.0592MHZ TL0 = (65536 - 45872) % 256; ET0 = 1; TR0 = 1; EA = 1; } int main(void) { SystemInit(); while(1) { /* 程序一开始上电Rece_Errp = 0 定时器5秒加一次 */ if(Rece_Errp == 0) { LED_A = 0; // A亮5秒 LED_B = 1; // B是灭 LED_C = 1; // C是灭 } /* 判断是否5秒时间到 */ else if(Rece_Errp ==1) { LED_A = 1; // A是灭 LED_B = 0; // B亮5秒 LED_C = 1; // C是灭 } else if(Rece_Errp == 2) { LED_A = 1; // A是灭 LED_B = 1; // B是灭 LED_C = 0; // C亮5秒 } else { LED_A = 1; // A是灭 LED_B = 1; // B是灭 LED_C = 1; // C是灭 while(1); // 程序运行到这里停止 } } } void Timer0_IRQ(void) interrupt 1 { TH0 = (655365 - 45872) / 256; TL0 = (655365 - 45872) % 256; /* 进入中断50ms +1次 */ TIME_BASE++; if(TIME_BASE == 20) // 20ms * 50ms = 刚好等于1000ms 也就是1秒 { TIME_BASE = 0; MACT_ENDB++; // 一秒加一次 if(MACT_ENDB == 5) // 等于刚好5秒时间到 { MACT_ENDB = 0; Rece_Errp++; // 用来切换LED A、B、C5秒灭 } } }
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式