单片机可以开启多少个定时中断

青岛黄工 2013-05-16 04:39:11
STC单片机两个定时器一起用,怎么低优先级的中断不能执行呢
有知道的朋友吗?程序如下:

#include<STC89C5xRC.H>
#define uint unsigned int
#define uchar unsigned char
sbit k1=P0^0;
sbit k2=P0^1;
void delayms(uint z)
{
uint y;
for(;z>0;z--)
for(y=100;y>0;y--);
}
void to0int() interrupt 1
{

k1=1;
delayms(300);
k1=0;
delayms(300);
TR0=0;

}
void to1int() interrupt 5
{
EA=0;
k2=1;
delayms(300);
k2=0;
delayms(300);
EA=1;


}
void main()
{
TMOD=0x02; //定时器0模式选择
TL0=TH0=0; //定时器0赋值
TL2=TH2=0xff;
TR0=1; //定时器0开始
TR2=1;
ET0=1; //定时器0溢出中断允许位
ET2=1;
EA=1; //开总中断
while(1)
{

}
}
总是执行中断1,中断5根本没有机会得多执行,实际应用的时候,单片机开启多个定时中断,应该可以的,对吧。
...全文
456 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
默寞 2013-05-17
  • 打赏
  • 举报
回复
你的delayms函数在两个中断中都调用,应该会有冲突 写两个延时函数在两个中断中分别调用试试
keith_cheung 2013-05-17
  • 打赏
  • 举报
回复
这与单片机有关。
青岛黄工 2013-05-17
  • 打赏
  • 举报
回复
设置长了也没有用啊,如下处理: #include<STC89C5xRC.H> #define uint unsigned int #define uchar unsigned char sbit k1=P0^0; sbit k2=P0^1; uint m,n; void delayms(uint z) { uint y; for(;z>0;z--) for(y=100;y>0;y--); } void to0int() interrupt 1 { m++; if(m>60000) { m=0; } } void to1int() interrupt 3 { n++; if(n>60000) { n=0; } } void main() { TMOD=0x22; //定时器0模式选择 TL0=TH0=0; //定时器0赋值 TL1=TH1=0xff; TR0=1; //定时器0开始 TR1=1; ET0=1; //定时器0溢出中断允许位 ET1=1; EA=1; //开总中断 while(1) { if(m=50) { EA=0; k1=0; delayms(500); k1=1; delayms(500); EA=1; } if(n=60000) { EA=0; k2=1; delayms(500); k2=0; delayms(500); EA=1; } } 不在中断程序中延时,这样子可以
xiaobr17622 2013-05-17
  • 打赏
  • 举报
回复
中断中不应该调用延时函数呀!你可以看看你定时器1的定时周期,再看一下你中断服务函数中延时的时间。
cjf764555750 2013-05-17
  • 打赏
  • 举报
回复
不同的单片机的中端个数不同,低优先级中断没有被执行,应该是高优先级中端的发生频率比较高
青岛黄工 2013-05-17
  • 打赏
  • 举报
回复
这个程序没有多大意义,只是看中断执行的过程,呵呵。。。。。
ymm198606 2013-05-16
  • 打赏
  • 举报
回复
高优先级的中断时间太短了;

27,511

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧