红外遥控系统原理及单片机软件解码程序
时间:11-23
来源:互联网
点击:
- -----------*/
- voidInt0()interrupt0
- {
- unsignedchari,j;
- EX0=0;//关闭外部中断0
- IR_Flag=0;//执行中断程序时,LED灯亮
- i=10;//0.793ms延时,运行10次
- while(--i)
- {
- //定时0.793ms,延时0.793ms*10=7.93ms
- TH0=0xfc;
- TL0=0xe7;
- TR0=1;
- while(!TF0);
- TF0=0;
- TR0=0;
- //这7.93ms期间只要IR_Out变高电平,就非合法的红外信号,跳出
- if(IR_Out)
- {
- EX0=1;//准许中断
- return;
- }
- }
- //程序进行到这里,表明是合法的红外信号(利用9ms判断)
- while(!IR_Out);//等待9ms低电平过去
- //程序进行到这里,表明经过9ms低电平
- TH0=0xf6;
- TL0=0xff;
- TR0=1;
- while(!TF0);
- TF0=0;
- TR0=0;//延时2.305ms
- //IR_Out为低表明是连发码,不予理睬,跳出
- if(!IR_Out)
- {
- EX0=1;
- return;
- }
- //程序进行到这里,表明是引导码,等待4.5ms高电平的过去
- while(IR_Out);
- //开始接收用户码
- for(i=0;i<4;i++)
- {
- for(j=0;j<8;j++)
- {
- while(!IR_Out);//等待低电平过去
- dat[i]>>=1;//把上次的数据位右移一位
- TH0=0xfc;
- TL0=0xe7;
- TR0=1;
- while(!TF0);
- TR0=0;
- TF0=0;//延时0.793ms
- //若为数据"1",则延时后IR_Out为高电平
- if(IR_Out)
- {
- dat[i]|=0x80;//所有数据位1放最高位
- while(IR_Out);//等待高电平过去
- }
- }
- }
- LED_Port=dat[2];
- EX0=1;//开中断
- return;
- }
- /*------------------------------------------------------------*-
- ----ENDOFFILE-------------------------------------------
- -*------------------------------------------------------------*/
红外遥控系统单片机软件解 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)