用单片机实现5秒定时,期间每隔1秒引发一次中断服务程序
#include"reg51.h"inti=0,j=0;main(){EA=1;//开总中断ET0=1;//定时器0中断允许TMOD=0x01;//T0为16位定时模式T...
#include"reg51.h"
int i=0,j=0;
main()
{
EA=1;//开总中断
ET0=1;//定时器0中断允许
TMOD=0x01;//T0为16位定时模式
TH0=0x4b;//装定时器0初值
TL0=0xfc;
TR0=1;//开定时器1
while(j!=5);//等待中断,5s定时
}
void timer0() interrupt 1 using 0
{
TH0=0x4b;//装定时器0初值
TL0=0xfc;
i++;
if(i==20)//定时1s时间到
{
i=0;
j++;
}
}
自己写了一下,感觉不太对。我这个是每次定时器50ms溢出时都要引发中断,第20次中断时才代表1秒,也就是说只有这一次中断能进行真正的中断服务程序。有没有办法只在1s,2s。。。5s时才引发中断? 展开
int i=0,j=0;
main()
{
EA=1;//开总中断
ET0=1;//定时器0中断允许
TMOD=0x01;//T0为16位定时模式
TH0=0x4b;//装定时器0初值
TL0=0xfc;
TR0=1;//开定时器1
while(j!=5);//等待中断,5s定时
}
void timer0() interrupt 1 using 0
{
TH0=0x4b;//装定时器0初值
TL0=0xfc;
i++;
if(i==20)//定时1s时间到
{
i=0;
j++;
}
}
自己写了一下,感觉不太对。我这个是每次定时器50ms溢出时都要引发中断,第20次中断时才代表1秒,也就是说只有这一次中断能进行真正的中断服务程序。有没有办法只在1s,2s。。。5s时才引发中断? 展开
展开全部
没太明白你的意思。
按照我的理解是这里计时器是用来延时的。如果要在1S,2S。。。5S实现中断,那就当加个标志位,用别的函数实现1S。。。中断服务程序,如:
if(i==20)
{
i=0;
j++;
z=1;//标志变量,初值为0
}
if(z)
{
fun();//中断服务程序
}
按照我的理解是这里计时器是用来延时的。如果要在1S,2S。。。5S实现中断,那就当加个标志位,用别的函数实现1S。。。中断服务程序,如:
if(i==20)
{
i=0;
j++;
z=1;//标志变量,初值为0
}
if(z)
{
fun();//中断服务程序
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
把“int i,j;”改成“unsigned int i,j;”试试?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
搞个软件计数器就可以了 进入中断一次计数器加一
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询