daihui713:
中断查询解码————意思就是 边解码 边PWM循环, 例如:以50us的时基础作为定时中断,时间一到就去中断里面解码,以累计的方式判断什么引导码用户码数据码反码等, 中断函数里面最多也就是++,判断,循环存放之类的语句,占用不了多少时间,最多十几uS就退出中断了,这样就不用一直在那里等电平的变化。退出后又接着继续主函数中的PWM循环,十几US的执行时间根本不影响PWM调光的视觉暂留效应,这样就看不到闪。 给你个参考——利用定时器的固定时基来查询红外脉冲的宽度,从而进行解码!可以自己去分析,至于中间的高电平是多少时间,低电平是多少时间都不用去管,只需计算两个下降沿间隔时间就可以判断0和1,同时也可以判断是否是引导码,或是结束码,或是连续码定时器查看时间设置为125us,执行定时器中断程序一次voidTimer0interrupt1() { irTime++; if(irTime==240)//ir解码后码值存放时间,240*125us=30ms { irTime--; codeCnt=0x3f; } if(IR_IO) Irprot_LastState=1;//记录IO状态 elseif(Irprot_LastState) //有下降沿 { Irprot_LastState=0; //下降沿后IO状态记录为0 if(irTime>3]>3]++; //大于15*125us=1.875ms的间隔为数据1 } irTime=0; //下降沿处理完成,将时间清0 }}