单片机编程中延时中断程序中不能定义变量吗?
延时中断程序中不能定义变量吗?如果定义了,程序好像就不执行中断程序了.如果把这个变量定义成全局变量就一切正常了,请问是这样吗?实现的是数字从23递减,减到0后再重复循环.
如果中断中定义uint i=0;程序就不循环一直显示23
如果把uint i=0;定义成全局变量就一切正常
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit dula=P2^6;
sbit wela=P2^7;
uchar code seg7[]=
{0X3F,0X06,0X5B,0X4F,
0X66,0X6D,0X7D,0X07,
0X7F,0X6F,0X77,0X7C,
0X39,0X5E,0X79,0X71};
uchar code seg7com[]={0Xfe,0Xfd,0Xfb,0Xf7};
uint shi;
uint ge;
uchar temp;
uint i=0;
void delay(uint i)
{ uint j;
for(;i>0;i--)
for(j=100;j>0;j--);
}
void display() //显示
{
shi=temp/10;
ge=temp%10;
wela=1;
P2=seg7com[0]; //选中第一个数码管位选
wela=0; //先选择为选再选择段选可有效防止鬼影
dula=1;
P0=seg7[shi]; //段选赋值
dula=0;
delay(50);
wela=1;
P2=seg7com[1]; //选中第一个数码管位选
wela=0;
dula=1;
P0=seg7[ge];
dula=0;
delay(50);
}
void init() //初始化
{
temp=23;
P0=0x00;
P2=0xff;
EA=1;
ET0=1;
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
}
main()
{
init(); //初始化
while(1)
{
display(); //显示
}
}
void intT0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
i++;
if(i==20)
{ i=0;
temp=temp-1;
if(temp==255) //减溢出了
temp=23;
}
}