Keil C 定时跑马灯,调试时间没变?

来源:百度知道 编辑:UC知道 时间:2024/05/31 12:28:17
#include<reg51.h>
bit i=0;
main()
{unsigned char index;
unsigned char a[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
TMOD=0x10;
TR1 = 1;
ET1 = 1;
EA=1;
while(1)
{
if(i)
{ i = 0;
P1=a[index] ;
index ++;
if (index>=8)
index = 0;

}
}
}
timer1() interrupt 3
{static unsigned char n;
TH1=0x10;
TL1=0x00;
TF1=0;
n++ ; //60次中断,i = 1
if(n==60)
{
n=0;
i = 1;

}
// n++; 61次中断,i = 1
}

改变n == 60,可得到不同的时间间隔,但我在调试时,却发现没变化,请高手指点,感激不尽,本人用的UV3

已经帮你全部修改好的程序,并已经通过keil软件调试可通过对n的改变可改变不同的时间间隔.程序如下:
#include<reg51.h>
volatile bit i=0; //-- 由于i在中断中用到,所以一般保险的话,需要声明成 volatile 类型 --//
void main(void)
{
unsigned char index;
unsigned char a[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
TMOD=0x10;
TH1=0x10;
TL1=0x00;
TR1 = 1;
ET1 = 1;
EA=1;
while(1)
{
if(i)
{
i = 0;
P1=a[index];
index++;
if (index>=8)
index = 0;
}
}
}

void timer1(void) interrupt 3
{
static unsigned char n;
TH1=0x10;
TL1=0x00;
TF1=0;
n++ ; //60次中断,i = 1
if(n==60) //-- 这里一般我习惯用 n>=60 去判定,因为 == 是一个点的判定,如果由于干扰,可能会判定错误 --//
{
n=0;
i = 1;
}
// n++; 61次中断,i = 1
}