43 黑幣
查閱有關(guān)資料51中斷函數(shù)聲明變量為全局變量?不知道這個說法對不對。1、在中斷函數(shù)內(nèi)聲明變量bit flag = 0;那么變量可以被正常賦值使用;
2、在中斷函數(shù)內(nèi)聲明為uchar flag = 0;此時該變量不能被正常賦值使用;
3、把變量uchar flag = 0;聲明到全局變量,該變量可以正常賦值使用;
單片機(jī)STC89C52;編譯平臺keil5代碼如下:
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit number0 = P1^0;
sbit number1 = P1^1;
sbit number2 = P1^2;
sbit number3 = P1^3;
sbit number4 = P1^4;
sbit number5 = P1^5;
sbit number6 = P1^6;
sbit number7 = P1^7;
sbit number8 = P3^2;
sbit number9 = P3^3;
sbit call = P3^4;
uchar temp[14];
bit flag_REC = 0;
uchar i = 0;
bit flag = 0;
void delay(uint z)
{
uint x,y;
for(x = z; x > 0; x--)
for(y = 114; y > 0 ; y--);
}
void UART_INIT()
{
SM0 = 0; SM1 = 1;
REN = 1;
EA = 1;
ES = 1;
TMOD = 0x20;
TH1 = 0xfd;
TL1 = 0xfd;
TR1 = 1;
}
void main()
{
uchar b;
UART_INIT();
while(1)
{
if(flag_REC == 1)
{
flag_REC = 0;
for(b = 0; b < i; b++)
{
switch(temp[b])
{
case '0': number0 = 0; break;
case '1': number1 = 0; break;
case '2': number2 = 0; break;
case '3': number3 = 0; break;
case '4': number4 = 0; break;
case '5': number5 = 0; break;
case '6': number6 = 0; break;
case '7': number7 = 0; break;
case '8': number8 = 0; break;
case '9': number9 = 0; break;
case 'C': call = 0; break;
}
delay(50);
P1 = 0XFF;
P3 = 0Xff;
delay(50);
}
i = 0;
}
}
}
void sint() interrupt 4
{
uchar dat;
if(RI)
{
RI=0;
dat=SBUF;
if(dat=='*'&&(i==0))
{
temp[i]=dat;
flag=1;
}
else
if(flag==1)
{
i++;
temp[i]=dat;
if(dat == '#')
{
flag = 0;
flag_REC = 1;
}
}
}
}
反復(fù)查閱相關(guān)資料和分析沒有結(jié)果,望各位師傅不吝賜教!在此感謝各位!
我來回答