《红外接收方面需要红外解码,可以用单片机来实现》由会员分享,可在线阅读,更多相关《红外接收方面需要红外解码,可以用单片机来实现(7页珍藏版)》请在金锄头文库上搜索。
1、红外接收方面需要红外解码,可以用单片机来实现 程序 1 #include sbit LED=P30; sbit Key=P37; /帧数据放数组 Data 里 unsigned char Data4=0x00,0xff,0x1f,0xe0; void Transmit(int c1,int c2); /发射子程序 /* main() unsigned char i,j; while(1) while(Key); /没键按下,等待 Transmit(340,565); /发射引导码 for(i=0;ij) /1码 else Transmit(19,70); /0码 Transmit(19,17)
2、; while(!Key); /等待释放按键 /* void Transmit(int c1,int c2) /c1 为高电平宽度 unsigned char i; /c2 为低电平宽度 doLED=1; /产生 38kHz 载波 for(i=8;i0;i-); /延时 18us LED=0; while(-c1); LED=1; while(-c2); 程序 2 #include sbit Rec=P31; unsigned char i,ch; unsigned int t; main() TMOD=0x01; TR0=1; while(1) while(Rec); /等待接收信号 t=(
3、TH0200 /sbit LED_RECIEVE= P06;unsigned char bdata buffer;/发往串口的缓冲器 sbit way0=buffer0; unsigned char irtype; /RC5 一帧的各段的标志unsigned char count,buf_s3; /红外接收位寄存器 unsigned char end; /红外一帧接收结束标志void t0_service(void) interrupt 1 using 1 /第一次进入中断,为定时 1/4 位的时间 445us/以后则定时一位时间 1.778ms 进入中断 way0=WAY_0; /一体化解码
4、后,有载频的部分变为低电平 TH0=(0xffff-1522)/256; TL0=(0xffff-1522)%256;count+; if(irtype=0)count=0;irtype=1;buffer=0; else if(irtype=1)buf_s1=buffer;count=0;irtype=2;buffer=0; else if(irtype=2)buf_s2=buffer;P0 = buffer;count=0;irtype=3;buffer=0; else if(irtype=3) /等最后半位结束,实际延时 1 位时间 TI=0; count=0; irtype=0; buf
5、fer=0; end=1; TR0=0; /解码结束,定时器停止 return; buffer=buffer sbit LED=P30; sbit Key=P37; /帧数据放数组 Data 里 unsigned char Data4=0x00,0xff,0x1f,0xe0; void Transmit(int c1,int c2); /发射子程序 /* main() unsigned char i,j; while(1) while(Key); /没键按下,等待 Transmit(340,565); /发射引导码 for(i=0;ij) /1码 else Transmit(19,70); /
6、0码 Transmit(19,17); while(!Key); /等待释放按键 /* void Transmit(int c1,int c2) /c1 为高电平宽度 unsigned char i; /c2 为低电平宽度 doLED=1; /产生 38kHz 载波 for(i=8;i0;i-); /延时 18us LED=0; while(-c1); LED=1; while(-c2); 程序 2 #include sbit Rec=P31; unsigned char i,ch; unsigned int t; main() TMOD=0x01; TR0=1; while(1) while
7、(Rec); /等待接收信号 t=(TH0200&t1100&t24)/取出最后一字节 ch|=1UPD6121G 组成发射电路为例说明编码原 理。当发射器按键按下后,即有遥控码发出,所按的键不同遥控编码也不同。这种遥 控码具有以下特征: 采用脉宽调制的串行码,以脉宽为 0.565ms、间隔 0.56ms、周期为 1.125ms 的组 合表示二进制的“0”;以脉宽为 0.565ms、间隔 1.685ms、周期为 2.25ms 的组合 表示二进制的“1”,其波形如图 2 所示。 上述“0”和“1”组成的 32 位二进制码经 38kHz 的载频进行调制,提高发射效率,达到 降低电源功耗的目的。然后
8、,再通过红外发射二极管进行二次调制,产生红外线向空 间发射,如图 3 所示。UPD6121G 产生的遥控编码是连续的 32 位二进制码组,其 中前 16 位为 8 位用户识别码及其反码,能区别不同的电器设备,防止不同机种遥控 码互相干扰。该芯片的用户识别码固定为十六进制 01H;后 16 位为 8 位操作码(功 能码)及其反码。UPD6121G 最多额 128 种不同组合的编码。 遥控器在按键按下后,周期性地发出同一种 32 位二进制码,周期约为 108ms。一组 码本身的持续时间随它包含的二进制“0”和“1”的个数不同而不同,大约在 4563ms 之间,图 4 为发射波形图。 3 接收器及解
9、码 TSOP1738 是 VISHAY 公司推出的一体化红外线接收器,集红外线接收和放大于 一体,不需要任何外接元件,就能完成从红外线接收到输出与 TTL 电平信号兼容的所 有工作,而体积和普通的塑封三极管大小一样,其功能如图 1 所示的虚线部分。它适 合于各种红外线遥控和红外线数据传输。解码就是识别二进制码“0”和“1”以及遥控信号起始位。由 8051 单片机对脉冲间隔计 数,由计数值的大小区别脉冲间隔的时间,从而识别出二进制码“0”、 “1”和遥控信号起 始位。如前所述,红外遥控的 32 位二进制串行码是脉宽调制的,脉冲宽度固定 (0.56ms) ,而脉冲的间隔不同。因此,只要设法测出脉冲
10、隔时间,即可判断是二进 制的“0”还是“1”。考虑到适当的容差,可把脉冲间隔为 0.2560.768ms 的判为“0”, 脉冲间隔为 1.281.792ms 的判为“1”。 3.1 解码系统配置及接口 解码单片机系统由 8051、TSOP1739 和 74LS00 等组成,接口电路如图 5 所示。 TSOP1738 的输出端通过 74LS00 的两个反相电路接至解码单片机 8051 的 INT0 和 INT1,作为输入接口。8051 解码单片机通过 P0 口作为输出接口,传送解码所得 的指令控制码去控制电器设备。8051 单片机的 TCON 中有一个控制位,该位由软件 设置为“1”,设置 IN
11、T0 和 INT1 为下降沿触发中断,其相应的定时/计数器 0 就可以 测量对应的 INT 引脚上正脉冲的宽度。利用这一特点,用定时器 T0 来测量 INT1 引 脚上正脉冲的宽度,即前后两脉冲的间隔时间,据此可判断它对应于二进制的是“1”还 是“0”。 由图 5 可知,TSOP1738 送往 8051 解码单片机 INT0 和 INT1 两引脚上的波形相 反,由 INT0 引脚上脉冲的下降沿所触发的中断服务程序完成启动计数器 T0,以测量 INT1 引脚上正脉冲的宽度。由 INT1 引脚上脉冲的下降沿所触发的中断服务程序完成 关计数器 T0,并根据计数值来判断是对应于二进制的“0”还是“1”
12、。 3.2 软件设计 解码单片机 8051 的软件包括主程序、INT0 中断服务程序和 INT1 中断服务程序等 3 部分。在 8051 单片机内部 RAM 区建立的工作单元和标志位。*BUF0BUF3接收缓冲移位寄存器单元(32bit) ,每次由 INT1 中断服务程序 解出的存于 CY 的二进制位,通过累加器连同 CY 的右移操作,传送到 BUF0 BUF3 内。 *LENG码长计数器,用于计数器解出的二进制位数。 *(29H).0码间隔标志位,当收到码组间隔时该标志被置位。 *(29H).1用户识别码标志位,当收到一组码的前 8 位为 01H 时该标志被置位。以下是主程序的设计要点: *
13、正确地解码必须从一组码的起始进行。为此程序在初始化后,首先检测码间隔标志 (29H).0,如果为 1,表明是一组码的开始,程序就将码长计数器清零,以例从头 开始计数。 *为防止其它遥控码的干扰,当接收到前 8 位码后,要检查它的值是否为 01H。如果 是,则置位用户码标志(29H).1。只有用户码标志为 1 时,收到的后 8 位码才作为 有效操作码处理。 *为了得到正确的解码结果,要检查 32 位遥控编码中用户码和操作码各自的反相一致 性。正极性的用户码留在 BUF3 中,负极性的用户码留在 BUF2 中;正极性的操作码 留在 BUF1 中,负极性的操作码留在 BUF0 中。然后比较 BUF3 和 BUF2 中的内容, 比较 BUF1 和 BUF0 中的内容,如果都满足反相一致才进入下一步,否则,作无效码 处理。 具体程序见本网站补充版。http:/ 以上所述方法非常简单地实现了红外遥控信号的接收解码,极大地节约了硬件实现的资源开销。只要修改汇编代码的部分参数,就可以适用于多种红外遥控器信号的接收 和解码。