1 / 88
文档名称:

动手学AVR单片机二十四.doc

格式:doc   页数:88页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

动手学AVR单片机二十四.doc

上传人:精品文档 2015/11/3 文件大小:0 KB

下载得到文件列表

动手学AVR单片机二十四.doc

文档介绍

文档介绍:动手学AVR单片机二十四、红外遥控器的接收实验
     遥控发射器专用芯片很多,根据编码格式可以分成两大类,这里我们以运用比较广泛,解码比较容易的一类来加以说明,现以日本NEC的uPD6121G组成发射电路为例说明编码原理(一般家庭用的DVD、VCD、音响都使用这种编码方式)。当发射器按键按下后,即有遥控码发出,所按的键不同遥控编码也不同。
一、电路实现
    红外发射器很容易找到,我们平时家用的电视、DVD遥控器都可以用来进行实验。下面的电路图是红外接收部分的电路图,
 
二、红外接收原理
        关于红外发射部分,由于我们采用的是现成的遥控器,而不同的遥控器其实现电路各不相同,这里我们就不详细介绍。我们只需要知道遥控器发射出来的数据格式,然后通过红外接收器接收数据,并根据数据格式将其进行分解,得到相应键值即可。
     遥控器在按键按下后,周期性地发出同一种32位二进制码,周期约为108ms。一组码本身的持续时间随它包含的二进制“0”和“1”的个数不同而不同,大约在45~63ms之间,发射波形图如下:
   当一个键按下超过36ms,振荡器使芯片激活,将发射一组108ms的编码脉冲,这108ms发射代码由一个引导码(9ms),一个结果码(),低8位地址码(9ms~18ms),高8位地址码(9ms~18ms),8位数据码(9ms~18ms)和这8位数据的反码(9ms~18ms)组成。如果键按下超过108ms仍未松开,接下来发射的代码(连发码)将仅由起始码(9ms)和结束码()组成。其中32位数据格式如下:
    这种遥控码具有以下特征:
     采用脉宽调制的串行码,、、“0”;、、“1”,波形如下图:
 
三、程序实现
   
在本实例中,我们利用串口将单片机从一体化红外接收器接收到的红外遥控键值发送到计算机上,通过计算机的串口助手观察接收到的数据。
编程过程中,我们利用单片机的外部中断0口进行检测,一旦检测到有红外遥控信号出现,则程序进入外部中断处理程序,在处理数据过程中关闭外部中断,直到接收完数据,再将外部中断打开。注意使用串口助手查看数据的时候选择16进制显示
    红外遥控的数据接收主要在外部中断函数中进行处理:处理过程为:当有遥控键值发送的时候,红外一体化接收器的脉冲信号输出脚发生一个下降沿的电平变化,外部中断采用下降沿出发的方式接收到由外部中断事件发生,程序进入外部中断处理函数,首先关闭外部中断,然后根据一体化接收器脉冲信号输出引脚的高低电平变化时间判断红外遥控发送的数据,共有
4个字节的数据,处理完这4个字节数据后,利用单片机的串口将数据发送到计算机。
 
 
下面是完整代码:其中串口数据发送部分的程序请查看前面关于串口的实现部分
#include <avr/>       
#include <util/>
#include <avr/>   //中断函数头文件
#include ""
void INT_Init(void);   //外部中断初始化
void Delayus(unsigned int lus);         //us延时函数
void Delayms(unsigned int lms);        //ms延时函数
 
int main(void)           
{
  
 Port1_Init();
 Usart1_Init();
 INT_Init();
  
 sei();          //使能全局中断 
 
 while(1)
 {
  
 }
}
//外部中断初始化
void INT_Init(void)
{
 EICRB |= (1 << ISC41);   //选择外部中断4,下降沿触发中断
 EIMSK |= (1 << INT4);    //使能外部中断4
}
//
ISR(INT4_vect)
{
 unsigned char i,j,k = 0,addr[4] = {0};
 
 EIMSK = 0x00;    //禁止外部中断4   关闭外部中断,开始接受数据
 for(i = 0;i < 14;i++)
 {