51单片机主函数较短,定时中断设定的定时时间较长。是不是主函数一直重复运行?
51单片机主函数较短,定时中断设定的定时时间较长。是不是主函数一直重复运行?比如这个程序:#include<reg52.h>voidmain(){P2=0xf0;TMOD...
51单片机主函数较短,定时中断设定的定时时间较长。是不是主函数一直重复运行?
比如这个程序:
#include<reg52.h>
voidmain()
{
P2=0xf0;
TMOD=0x01;
TH0=0x00;
TL0=0x00;
EA=1;
ET0=1;
TR0=1;
}
voiddelay() interrupt 1
{
P2=~P2;
}
我经过仿真之后发现,是我猜想的那样,程序在主函数一直重新执行,导致了TH0、TL0一直被重新赋值,中断一直没有产生(主函数耗时比定时溢出耗时短很多)。烧录到单片机上也是一样,只有前四个灯亮。
但是,我之后又猜想以下的程序:
#include<reg52.h>
voidmain()
{
P2=0xfe;
P2=0xfd;
}
我的猜想是:因为没有延迟,所以第一二个两个灯看上去都亮着。我先仿真,和我猜想一样,重复执行主函数。
问题:烧录到单片机里,只有第二个灯是亮着的。但仿真和我的猜想一样啊!
(本人新手,所以问题可能比较奇怪。我知道一般人不会把while(1)去掉。) 展开
比如这个程序:
#include<reg52.h>
voidmain()
{
P2=0xf0;
TMOD=0x01;
TH0=0x00;
TL0=0x00;
EA=1;
ET0=1;
TR0=1;
}
voiddelay() interrupt 1
{
P2=~P2;
}
我经过仿真之后发现,是我猜想的那样,程序在主函数一直重新执行,导致了TH0、TL0一直被重新赋值,中断一直没有产生(主函数耗时比定时溢出耗时短很多)。烧录到单片机上也是一样,只有前四个灯亮。
但是,我之后又猜想以下的程序:
#include<reg52.h>
voidmain()
{
P2=0xfe;
P2=0xfd;
}
我的猜想是:因为没有延迟,所以第一二个两个灯看上去都亮着。我先仿真,和我猜想一样,重复执行主函数。
问题:烧录到单片机里,只有第二个灯是亮着的。但仿真和我的猜想一样啊!
(本人新手,所以问题可能比较奇怪。我知道一般人不会把while(1)去掉。) 展开
1个回答
展开全部
这么说也不无不可,在等待定时溢出中断的过程中,主程序一直都在循环中重复运行。比如:
main()
{
TMOD=0x01;
TH0=TL0=0;
TR0=1;
ET0=1;
EA=1;
while(1); //等待溢出中断时,主程序一直在这里原地循环。
}
main()
{
TMOD=0x01;
TH0=TL0=0;
TR0=1;
ET0=1;
EA=1;
while(1); //等待溢出中断时,主程序一直在这里原地循环。
}
更多追问追答
追问
这个我能够理解。
我一开始的疑问是:当没有while(1)死循环时。是不是在等待定时器溢出这个过程中,主函数依旧在重新执行?
比如这个程序:
追答
没有while,程序就跑飞了,不会在主程序里面呆着。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询