本文是武汉市海联天下物联网有限公司技术团队内部学习笔记,将详细讲解红外遥控的基本原理以及51单片机如何利用外部中断和定时器0对红外信号进行解码。——技术部 张傲
现象描述
使用红外遥控器对准HL-STC51开发板红外接收头,按下不同的按键,在开发板数码管上将显示对应按键的数字。
红外线简介
在光谱中波长自760nm至400um的电磁波称为红外线,它是一种不可见光。目前所有的视频和音频设备都可以通过红外遥控的方式进行遥控,比如电视机、空调、影碟机等,都可以见到红外遥控的影子。
红外遥控系统一般由红外发射装置和红外接收设备两大部分组成。红外发射装置可由键盘电路、红外编码芯片、电源和红外发射电路组成。红外接收设备可由红外接收电路、红外解码芯片、电源和应用电路组成。通常为了使信号能更好的被传输发送端将基带二进制信号调制为脉冲串信号,通过红外发射管发射。常用的有通过脉冲宽度来实现信号调制的脉宽调制(PWM)和通过脉冲串之间的时间间隔来实现信号调制的脉时调制(PPM)两种方法。
红外通信特征(NEC编码)
- 8位地址码,8位命令码 ;
- 完整发射两次地址码和命令码,以提高可靠性;
- 脉冲时间长短调制方式;
- 38KHz载波频率;
- 位时间1.12ms(逻辑0)或2.25ms(逻辑0);
NEC协议根据脉冲时间长短解码。每个脉冲为560us长的38KHz载波(约32个载波周期)。逻辑“1”脉冲时间为2.25ms,逻辑“0”脉冲时间为1.12ms。推荐的载波周期为1/4或者1/3。
NEC协议规定低位首先发送,如上图所示的情况,发送的地址码为“59”,命令码为“16”。每次发送的信息首先是用于调整红外接收器增益的9ms AGC(自动增益控制)高电平脉冲,接着是4.5ms的低电平,接下来便是地址码和命令码。地址码和命令码发送两次,第二次发送的是反码(如:1111 0000的反码是0000 1111),用于验证接收的信息的准确性。
电路分析
sbit IR = P3 ^ 2;
sbit smg_duan = P3 ^ 4;
IR与数码管段显示可根据原理图来定义:
红外接收管的输入引脚与单片机P32引脚相连,而P32又是单片机外部中断0引脚。使用数码管第一位显示解码的提示信息,数码管第一位的使能脚与单片机P34引脚相连,查看原理图定义引脚后,便于理解接下来的代码。
定时器0计数时间计算
使用定时器0作为红外接收端脉冲宽度检测计数器,将定时器0初始化为工作方式2,8位自动重载。定时器初值为0,则256个计数周期产生溢出中断,定时器每计数1次的时间为=1S/(SYSCLK/12)=1.085us;因此每次溢出的时间为=1.085us*256=0.277MS。
void TIM0init(void) //定时器0初始化
{
TMOD = 0x02; //定时器0工作方式2,TH0是重装值,TL0是初值
TH0 = 0x00; //重载值
TL0 = 0x00; //初始化值
ET0 = 1; //开中断
TR0 = 1;
}
定时器0中断服务函数,中断服务函数中对全局变量irtime进行++操作,由上面的分析可知,irtime每加1表示的时间长度为0.277ms,即irtime*0.277则表