大家好,我是51
单片机的一名初学者,在学中断时候遇到了一些问题,希望大家能够解答。
代码如下:
//大家请看我下边的程序,想法是流水灯,delay 函数延时,然后加入定时器中断, aa控制定时器进入次数,现在定时器进入一次计时50ms。可是我的delay(1500)值为1.5s,为什么最后结果显示还是进入了if函数?(结果:数码管变化)
我的想法是delay运行的时候不断定时,最终aa==40的时候在delay里面,也就是说运行完delay后aa必然大于40,但是最终为什么又进入了if呢?
谢谢大家!!!
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar t,n,aa;
sbit dula=P2^6;
sbit wela=P2^7; //数码管声明
uchar code table []=
{0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71}; //数码管段选
void delay (uint);
void main ()
{ n=0;
TMOD=1;
TH0=19964/256;
TL0=19964%256; //定时器50ms中断赋值
EA=1;
ET0=1;
TR0=1; //中断设置
t=0xfe;
P1=t;
dula=1;
P0=table [0];
dula=0;
wela=1;
P0=0xfe;
wela=0;
while (1)
{
delay (1500); //重点!!!!!!
if (aa==40)
{ aa=0;
n++;
if (n==16)
n=0;
dula=1;
P0=table [n];
dula=0; }
t=_crol_ (t,1);
P1=t;
}
}
void delay (uint x)
{
uint y;
for (;x>0;x--)
for (y=114;y>0;y--);
}
void
timer() interrupt 1
{
TH0=19964/256;
TL0=19964%256;
aa++;
}谢谢!
我想的是下一次delay中aa达到了40,那么出了delay之后就不可能有aa==40 (>)
一周热门 更多>