51单片机初学问题求解,谢谢!

2019-07-16 04:58发布

大家好,我是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++;


}谢谢!





友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。