打印

请教红外中全局变量问题,谢谢

[复制链接]
1372|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
huangqi412|  楼主 | 2007-3-27 20:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
uchar address,value; //红外协议地址和值 全局   有问题


uchar read()           //读数据
{
uchar wei,time,shj;
shj=0;                 //清除
for(wei=0;wei<6;wei++) //读6个
{
shj=shj<<1;            //提前移位

if(ir)                 //为1送1并等变0
{
shj=shj|0x01;
if(ir)
{;}
}
else 
{
if(!ir)                    //为0,等待变1
{;}
}

for(time=10;time>0;time--) //延时1ms
{ysh100us();}
}

return(shj);
}


void irread(void) interrupt 0  //采用中断方法 rc5
{
uchar time;
value=0x00;                   //去掉value值
EA=0;                         //关中断
for(time=5;time>0;time--)     //在500us排除干扰
{
ysh100us();
if(ir)
{
goto out;     //如果为干扰,跳出 使用了goto
}
}

if(!ir)        //不是干扰,等变1
{;}
if(ir)         //等变0
{;}

for(time=0;time<10;time++) //延时1ms
{ysh100us();}

address=read();  //读地址
  value=read();  //读指令
out:EA=1;        //退出
}


void irchsh() //ir初始化,要开中断
{
EX0=1;
IT0=1;
EA=1;
}

//************************

main()
{
P1=0xff;
P3=0xff;
P0=0xff;
P2=0xfe;
irchsh();   //开中断

while(1)
{
P0=value;   //显示
}
}

//1 为什么value在中断后只闪一下马上又变成了ff
//查了不是中断干扰原因 在while中应该不会变化
//2 value总是和time一个值0x09。怪事。
//到main中又变0xff,全局变量有问题??

相关帖子

沙发
huangqi412|  楼主 | 2007-3-27 20:14 | 只看该作者

大家指点一下啊,谢谢

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

622

主题

24960

帖子

18

粉丝