全局变量问题
请教个问题,在中断中能不能对全局变量改变之后在main中使用而不返回初始值?全局变量当然能在中断中改变,也能在main中使用,我没懂你的“不返回初始值”是什么意思。 定义成 volatile变量就可以了
“不返回初始值” 估计是 中断中改变了,main中还是原来的值 本来就是这样的啊,全局变量就是要这么干,不然叫什么全局变量 绿茶山人 发表于 2013-5-7 09:50 static/image/common/back.gif
全局变量当然能在中断中改变,也能在main中使用,我没懂你的“不返回初始值”是什么意思。 ...
#include <REG52.H>
#define uchar unsigned char
#define uint unsigned int
ucharimt={'a'};
ucharimu;
uchar c,t,f,y;
//uchar *rx=imu;
bit flag_send=1;
void delay900ms(void) //误差 -0.000000000205us
{
unsigned char a,b,c;
for(c=127;c>0;c--)
for(b=128;b>0;b--)
for(a=24;a>0;a--);
}
void delay20us(void) //误差 -0.46875us
{
unsigned char a,b;
for(b=3;b>0;b--)
for(a=1;a>0;a--);
}
void init(void)
{
TMOD=0x20; //T1方式2
TH1=0xfd; //波特率 1200 晶振12M
TL1=0xfd;
SCON=0x50;//串口工作于方式1即10位(1+8+1)
TR1=1; //启动定时器1
ES=1; //串口中断允许
EA=1; //总中断打开
}
void send (void)
{
//uchar i=0;
ES =0;
//for(i=0;i<1;i++)
// {
//SBUF=imu;
SBUF=imt;
while(!TI);
TI=0;
// ES=0;
// }
ES=1 ;
}
void main(void)
{
t=0;
flag_send=0;
init();
while(1)
{
if(t==1)
{
f++;
}
if(flag_send)
{
y++;
flag_send =0;
}
if(f==100)
{
if(y==1)
{
while(!flag_send)
{
send() ;
y=0;
f=0;
t=0;
}
}
if(y==2)
{
send() ;
send() ;
y=0;
f=0;
t=0;
}
if(y==3)
{
send() ;
send() ;
send() ;
y=0;
f=0;
t=0;
}
if(y==4)
{
send() ;
send() ;
send() ;
send() ;
y=0;
f=0;
t=0;
}
if(y==5)
{
send() ;
send() ;
send() ;
send() ;
send() ;
y=0;
f=0;
t=0;
}
if(y==6)
{
send() ;
send() ;
send() ;
send() ;
send() ;
send() ;
y=0;
f=0;
t=0;
}
}
}
}
void uart(void) interrupt 4
{
if(RI)
{
RI=0;
t=1;
flag_send=1;
// imu=SBUF;
// rx ++;
// if(rx>imu) //+5的时候只接收6位
// {
// rx=imu;
//}
}
}
我上面用的办法是判断ri触发次数(发几个字符给他,他就触发几次),从而来使(h==1).....等等
我不知道怎么把收的的数据赋值给变量 ,随便设一个h把,然后(h==1)的时候执行一个程序,(h==2).......指点一下
页:
[1]