以前用来红外通信控制小车的程序
typedef unsigned char UCHAR8;
/*
初始化 指定下降沿触发
1 产生外部中断
2 IRTime 对下降沿计数 将脉冲时序信号转为长度
接收完成(irok==1)后,进行红外处理 Ircordpro() 将脉冲的长度转为编码值 >7 0 <7 1.一共32位四字节。
3 码值处理
红外处理好(irpro_ok==1)后,把遥控器按下的编码转换为对应的数字 如 fd03(fd前03后互补fd+03=256) 代表遥控器的暂停播放
4 键值处理
*/
sbit IR=P3^2; //红外接口标志 外部中断
bit irpro_ok,irok;
UCHAR8 IRcord[4];
UCHAR8 irdata[33];
while(1)//主循环
{
if(irok) //如果接收好了进行红外处理
{
Ircordpro();
irok=0;
}
if(irpro_ok) //如果处理好后进行工作处理,如按对应的按键后显示对应的数字等 如 fd03(fd前03后互补fd+03=256) 代表遥控器的暂停播放
{
Ir_work();
}
}
/*-----外部中断0初始化----------*/
void EX0init(void)
{
IT0 = 1; //指定外部中断0下降沿触发,INT0 (P3.2)
EX0 = 1; //使能外部中断
EA = 1; //开总中断
}
void tim0_isr (void) interrupt 1 using 1
{
irtime++; //用于计数2个下降沿之间的时间
}
/*------外部中断0中断处理----------*/
void EX0_