新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 跟我学51单片机(六):单片机外部中断及红外遥控器解码

跟我学51单片机(六):单片机外部中断及红外遥控器解码

作者:时间:2013-02-06来源:网络收藏

PHILIPS 标准:载波频率为38kHz ;没有简码,点按键时,控制码在1 和0 之间切换,若持续按键,则控制码不变。一个全码可等同于起始码、控制码、系统码、数据码的时间总和,如图4 所示。

图4 PHILIPS标准下的全码表示

  数据0 用“低电平0. 889ms +高电平0. 889ms”

  表示;数据1 用“ 高电平0. 889ms + 低电平0.

  889ms”表示(图5)。连续码重复延时114ms。

图5 PHILIPS标准下的数据0和1的表示

  在本讲中采用的是SAA3010 这款红外遥控器(见图6(a)),其符合常见的PHILIPS 标准中的RC-5 编码格式,其一帧码序列是由2 位控制码,1 位翻转码,5 为地址码,6 位数据码,结束码组成。其数据位时间长度是1.688ms。连续码重复延时为108ms,即在每按键一直被按下时延时为108ms 再输出同样的一帧数据。

图6 (a) SAA3010遥控器外观图 (b) SAA3010的数据位 (c) SAA3010的数据重复周期

  从图6 中可以看出,SAA3010 的位传送方式是采用双相位,位1 和位0 的相位正好相反。在解码时可以用定时采样的方式进行解码,一个位采样二次,分别在位波形的四分之一和四分之三处进行采样,如位1 用这种方法采样的值就是0 和1。当然也可以只采样一次,例如在波形的四分之一处进行采样,然后定时一个波形的周期再采样,这样位1 采样的值就是0(本讲的实例即是采用这种方法)。

  三、电路详解

  如图7 (a) 中所示,红外接收头解码电路非常简单,采用的是一体化红外线接收头,一体化的红外接收头将遥控信号的接收、放大、检波、整形集于一身,并且输出可以让单片机识别的TTL 信号,这样大大简化了接收电路的复杂程度和电路的设计工作,方便使用。在本讲中采用的是红外一体化接收头HS0038,其外观图如7(b) 所示。其为黑色环氧树脂封装,不受日光、荧光灯等光源干扰,内附磁屏蔽,功耗低,灵敏度高。在用小功率发射管发射信号情况下,接收距离可达30m。它能与TTL、COMS 电路兼容。HS0038 为直立侧面收光型。它接收红外信号频率为38 kHz, 周期约26μs,同时能对信号进行放大、检波、整形,得到TTL 电平的编码信号。

图7 (a) 红外接收头解码电路 (b) HS0038外观图

  其三个管脚分别是地、电源正、解调信号输出端。

  为了响应速度,红外接收头的解码信号输出接入到单片机P3.3(1)端口上,这样一旦有红外解码信号输出就可触发进去中断。此外,电容C7 用于电源去耦滤波,保证红外接收头稳定工作。

  四、程序设计

  本讲设计的核心程序如下:

  void time0() interrupt 1 ( 1)

  bit in = ~IR_Input; ( 2)

  TH0 = 0XFF; ( 3)

  TL0 = 0X83; ( 4)

  IR_Data[IR_sign] = IR_Data[IR_sign] | in; ( 5)

  IR_count++; ( 6)

  if(IR_count == 1 || IR_count == 2) ( 7)

  {

  if(in == 0) ( 8)

  {

  TR0 = 0; ( 9)

  EX1 = 1; ( 10)

  return; ( 11)

  }

  }

  if(IR_count == 3) ( 12)

  {

  IR_sign = 1; ( 13)

  }

  else if(IR_count == 8) ( 14)

  {

  if(IR_Data[1] != 0) ( 15)

  {

  TR0 = 0; ( 16)

  EX1 = 1;

  return;

  }

  IR_sign = 2; ( 17)

  }

  else if(IR_count == 14) ( 18)

  {

  IR_sign = 3; ( 19)

  }

  else if(IR_sign == 3) ( 20)

  {

  TR0 = 0; ( 21)

  IR_Success(); ( 22)

  return; ( 23)

  }

  else

  IR_Data[IR_sign] = IR_Data[IR_sign] 《 1; ( 24)



评论


相关推荐

技术专区

关闭