此帖出自51单片机论坛
最新回复
/******************************************/
/*红外遥控解码程序 */
/******************************************/
#include
/******************************************/
/*端口定义 */
/******************************************/
sbit p32=P3 ^ 2;
/******************************************/
/*定时器1初始化 */
/******************************************/
void T1_INIT()
{
TMOD |= 0X10;
}
/******************************************/
/*稍小于9ms延时 */
/******************************************/
void delay9ms()
{
TH1 = (65535 - 8700) >> 8;
TL1 = (65535 - 8700) & 0XFF;
TF1 = 0;
TR1 = 1;
while(!TF1); //等待延时完毕
}
/******************************************/
/*稍大于4.5ms延时,与9ms相加稍大于13.5ms */
/******************************************/
void delay5ms()
{
TH1 = (65535 - 5000) >> 8;
TL1 = (65535 - 5000) & 0XFF;
TF1 = 0;
TR1 = 1;
while(!TF1); //等待延时完毕
}
/******************************************/
/*1ms延时 */
/******************************************/
void delay1ms()
{
TH1 = (65535 - 1000) >> 8;
TL1 = (65535 - 1000) & 0XFF;
TF1 = 0;
TR1 = 1;
while(!TF1); //等待延时完毕
}
/******************************************/
/*外部中断0初始化 */
/******************************************/
void IT0_INIT()
{
IT0 = 1; //外中断0,下降沿触发
EX0 = 1; //允许外中断0,外部中断0接收数据
}
/******************************************/
/*外部中断0处理程序 */
/******************************************/
void IT0_ISR() interrupt 0 using 2
{
unsigned char a,b;
unsigned char table[4] = {0,0,0,0};
EX0 = 0; //关外中断0,开始解码
delay9ms();
if(p32) //9ms内出现高电平,干扰信号
goto end;
if(!p32) //9ms内一直为低电平,执行解码
{
delay5ms(); //再延时5ms与9ms相加,跳过引导码,下一步解用户码及数据码
for(a=0;a= 1; //写1
table[a] |= 0x80;
delay1ms(); //延时1ms,等待高电平结束
}
else //为0
{
table[a] >>= 1; //写0
table[a] |= 0x00;
}
}
}
IR_DATA = table[3]; //提取最后一字节作为按键区分标志
}
end: EX0 = 1; //解码结束,开外中断0
}
详情
回复
发表于 2012-4-10 11:37
| ||
|
||
先自己研究研究吧,时间很关键的
此帖出自51单片机论坛
| ||
|
||
EEWorld Datasheet 技术支持