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,全局变量有问题?? |