没有合适的资源?快使用搜索试试~ 我知道了~
AVR单片机捕获中断实现红外线解码.docx
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 107 浏览量
2023-02-03
16:51:32
上传
评论
收藏 182KB DOCX 举报
温馨提示
试读
14页
AVR单片机捕获中断实现红外线解码.docx
资源推荐
资源详情
资源评论
AVR 单片机捕获中断实现红外线解码
摘要:AVR 单片机是 Atmel 公司推出的一个单片机系列。由于该系列单片机的集
成度高,因此,其软/硬件设计都变得更加简洁。文中介绍通过 AVR 单片机的捕
获中断来实现红外线通讯解码的一种方法。
关键词:AVR;红外线解码;输入捕获中断
1 红外线编码
红外线编码是数据传输和家用电器遥控常用的一种通讯方法,其实质是一种
脉宽调制的串行通讯。家电遥控中常用的红外线编码电路有 μPD6121G 型 HT622
型和 7461 型等。本文就以这些电路的编码格式来讨论怎样使用 AVR 单片机的捕
获中断功能来实现其解码。
红外线通讯的发送部分主要是把待发送的数据转换成一定格式的脉冲,然后
驱动红外发光管向外发送数据。接收部分则是完成红外线的接收、放大、解调,
还原成同步发射格式相同(但高、低电位刚好相反的脉冲信号。这些工作通常由
一体化的接收头来完成,主要输出 TTL 兼容电平。最后通过解码把脉冲信号转换
成数据,从而实现数据的传输。图 1 是一个红外线遥控制系统的原理框图。
图 2 示出该红外遥控系统的编码格式。图中,μPD6121G 遥控器的二进制“0”
由 0.56ms 的间隔加 0.565ms 的脉冲表示;二进制“1”由 0.56ms 的间隔加
1.685ms 的脉冲表示。每次发送的 32 二进制码可分成两部分,其中前 16 位是遥
控器辨识码,主要用于区别不同遥控器,后 16 位是操作码。这两个部分的后 8
位都是前 8 位的反码,用作数据校验。每帧数据以 9ms 的间隔加 4.5ms 的脉冲作
为数据头。
2 AVR 单片机
AVR 系列单片机是 Atmel 公司于 1997 年推出的一款全新配置的、采用精简指
令(RISC-Redued Instruction Set CPU)结构的新型 8 位单片机。由于 AVR 单片
机采用单指令操作,所以,在相同时钟的情况下,AVR 的指令周期只有 8051 型
机的 1/2,而且 AVR 采用两极指令流水线,可以在执行当前指令的同时获取下一
条指令,所以具备 1MI/s/MHz 的调整处理能力。不同于 8051 型机的是 AVR 采用 32
个通用工作寄存器,克有了单一累加器数据处理带来的瓶劲现象,从而使得指令
代码更加灵活,编码更容易。此外,AVR 中还集成了 A/D、PWM、EEPROM、FLASH、
SPI、WTD、IIC、T/C 等功能,使外围电路变得很简单。
3 基于 AVR 单片机的硬件实现
本文以 AVR 系列中高性价比的 Atmage8 为例,利用 16 位时钟单元 T/C1 的捕
获中断来实现红外线解码。T/C1 内部的输入捕获单元可以应用于精确捕获外部
发生的事情,亦即事件发生的时间印记(time-stamp)。当一个输入捕获事件发生
在外部引脚 ICPI 上的逻辑电平也随之发生变化时,T/C1 的计数值将被拷贝到捕
获寄存器 ICR1 并设置捕获中断标志,如果捕获中断允许并且总中断 IE 打开,系
统则进入中断服务程序。这种捕获中断通常用于频率和周期的精确测量,如电机
转速和转向的测量。本文介绍怎样利用这一功能测量红外线脉冲的脉宽以实现红
外传输的解码。捕获中断的触发可以是 ICP1 引脚上电平变化的上升沿,也可以
是下降沿。根据前述脉冲调制规则,现以下降沿为触发事件来进行讨论。
图 3 是该系统的工作时序图,图中,一个下降沿到下一个下降沿之间刚
好是一个脉冲加一个间隙的时间,这样,根据编码规则,这个时间长度所对应的
信号关系如下:
数据头的时间:Th=9+4.5=13.5ms
数据“0”的时间:T0=0.565+0.56=1.125ms
数据“1”的时间:T1=1.685+0.56=2.245ms
4 软件编程
基于 AVR 单片机的捕获中断来实现红外编码的软件程序流程如图 4 所示。下
面是其
C 语言程序代码:
C 程序代码
*pragma interrupt_handler IceInt:6 //中断程序说明
void ICEInit(void) //T/C1 初始化
{
TIMSK=0X20; //使能捕获中断
TCCR1A=0X00; //T/C1 时钟与系统相同,本文使用系统 AVR 内部自带 1MHz 振
荡源.T/C1 时钟周期为 1μs
TCCR1B=0X81; //使能噪音抑制,下降沿触发中断
}
void IceInt(void)
{
static nint oldFall;
uint temp,newFall;
newFall=ICR1;
temp=newFall-oldFall; //计算脉冲加间隔的时间
oldFall=newFall;
if(temp>1024 && temp<1225) // "0"信号
{
temp=0;
}
else if(temp>2145 && temp<2345) //“1”信号
{
temp=1;
剩余13页未读,继续阅读
资源评论
猫一样的女子245
- 粉丝: 94
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功