📄 avr单片机捕获中断实现红外线解码.htm
字号:
<P><B>2 AVR单片机</B></P>
<P>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等功能,使外围电路变得很简单。</P>
<P><B>3 基于AVR单片机的硬件实现</B></P>
<P>本文以AVR系列中高性价比的Atmage8为例,利用16位时钟单元T/C1的捕获中断来实现红外线解码。T/C1内部的输入捕获单元可以应用于精确捕获外部发生的事情,亦即事件发生的时间印记(time-stamp)。当一个输入捕获事件发生在外部引脚ICPI上的逻辑电平也随之发生变化时,T/C1的计数值将被拷贝到捕获寄存器ICR1并设置捕获中断标志,如果捕获中断允许并且总中断IE打开,系统则进入中断服务程序。这种捕获中断通常用于频率和周期的精确测量,如电机转速和转向的测量。本文介绍怎样利用这一功能测量红外线脉冲的脉宽以实现红外传输的解码。捕获中断的触发可以是ICP1引脚上电平变化的上升沿,也可以是下降沿。根据前述脉冲调制规则,现以下降沿为触发事件来进行讨论。<BR><IMG
onmousewheel="return bbimg(this)" onclick=ImgClick(this) height=204
hspace=10 src="AVR单片机捕获中断实现红外线解码.files/20061223000226708.gif" width=549
vspace=10 border=0 resized="0"><BR><FONT size=3>
</FONT>图3是该系统的工作时序图,图中,一个下降沿到下一个下降沿之间刚好是一个脉冲加一个间隙的时间,这样,根据编码规则,这个时间长度所对应的信号关系如下:</P>
<P>数据头的时间:Th=9+4.5=13.5ms</P>
<P>数据“0”的时间:T0=0.565+0.56=1.125ms</P>
<P>数据“1”的时间:T1=1.685+0.56=2.245ms</P>
<P><B>4 软件编程</B></P>
<P>基于AVR单片机的捕获中断来实现红外编码的软件程序流程如图4所示。下面是其</P>
<P>C语言程序代码:</P>
<P>C程序代码:</P>
<P>*pragma interrupt_handler IceInt:6 //中断程序说明</P>
<P>void ICEInit(void) //T/C1初始化</P>
<P>{<BR><IMG onmousewheel="return bbimg(this)" onclick=ImgClick(this)
height=176 hspace=10 src="AVR单片机捕获中断实现红外线解码.files/20061223000227590.gif"
width=549 vspace=10 border=0 resized="0"><BR><FONT
size=3> </FONT>TIMSK=0X20; //使能捕获中断</P>
<P>TCCR1A=0X00; //T/C1时钟与系统相同,本文使用系统AVR内部自带1MHz振荡源.T/C1时钟周期为1μs</P>
<P>TCCR1B=0X81; //使能噪音抑制,下降沿触发中断</P>
<P>}</P>
<P>void IceInt(void)</P>
<P>{</P>
<P>static nint oldFall;</P>
<P>uint temp,newFall;</P>
<P>newFall=ICR1;</P>
<P>temp=newFall-oldFall; //计算脉冲加间隔的时间</P>
<P>oldFall=newFall;</P>
<P>if(temp>1024 && temp<1225) // "0"信号</P>
<P>{</P>
<P>temp=0;</P>
<P>}</P>
<P>else if(temp>2145 && temp<2345) //“1”信号</P>
<P>{</P>
<P>temp=1;</P>
<P>}</P>
<P>else if(temp>13400 && temp<13600) //header信号</P>
<P>{</P>
<P>bitcnt=0;</P>
<P>data0=0;</P>
<P>data1=0'</P>
<P>return; //返回,等待下次开始接收</P>
<P>}</P>
<P>else ///干扰信号</P>
<P>{<BR><IMG onmousewheel="return bbimg(this)" onclick=ImgClick(this)
height=562 hspace=10 src="AVR单片机捕获中断实现红外线解码.files/20061223000228665.gif"
width=549 vspace=10 border=0 resized="0"><BR><FONT
size=3> </FONT>return;</P>
<P>}</P>
<P>bitcnt++;</P>
<P>if(bitcnt<16) //开始接收前16位</P>
<P>{</P>
<P>data0=data0|(uint)temp;</P>
<P>data0=data0<<1;</P>
<P>}</P>
<P>else if(bitcnt==16)</P>
<P>{</P>
<P>data0=data0|(uint)temp;</P>
<P>}</P>
<P>else if(bitcnt<32) //开始接收后16位</P>
<P>{</P>
<P>data1=data1|(uint)temp;</P>
<P>data1=data1<<1;</P>
<P>}</P>
<P>else if(bitcnt==32) //接收完最后一位</P>
<P>}</P>
<P>data1=data1|(uint)temp;</P>
<P>}</P>
<P>}</P>
<P>该单片机的主循环程序中含有一些代码检测bitcnt,当bitcnt=32时,表明一帧数据已接收完成,并将bitcnt设置为0xff,然后对接收的数据进行相应的处理。程序调试最好配合串行通讯来进行,这样可以在PC上显示数据或者画出波形以方便验证。If(temp>1025
&&
temp<1225)这条语句是辨识“0”的代码,它是以T0-100<T0<T0+100为范围确害的“0”,该范围的大小决定着接收的准确度与灵敏度,单位为μs,后面两个两条语句含义相同。</P>
<P>需要补充的是当键盘按下长达108ms时,发射端开始发送连续信号,与单次发送一样,只是header信号是由9ms的间隔加2.5ms的脉冲组成的。
</P>
<P><BR></P></SPAN><BR><BR>
<TABLE style="TABLE-LAYOUT: fixed; WORD-BREAK: break-all" cellSpacing=0
cellPadding=0 width="100%">
<TBODY>
<TR>
<TD></TD>
<TD width=150>编辑:<SPAN id=HitsLabel>邓俊</SPAN><BR>来源:<SPAN
id=SourceLabel>国外电子元器件</SPAN><BR>阅读:<SPAN id=HitsLabel>547</SPAN>
次<BR>日期:<SPAN id=TimeLabel>2006-12-23 0:00:21</SPAN><BR><BR></TD>
<TR>
<TD align=right colSpan=2>
<SCRIPT language=JavaScript>var currentpos,timer;function initializeScroll() { timer=setInterval('scrollwindow()',80);} function scrollclear(){clearInterval(timer);}function scrollwindow() {currentpos=document.body.scrollTop;window.scroll(0,++currentpos);if (currentpos != document.body.scrollTop) sc();}document.onmousedown=scrollclear;document.ondblclick=initializeScroll;</SCRIPT>
【 双击滚屏 】 【 <A
href="http://dgdz.gxu.edu.cn/Sendmail.asp?Unid=458"
target=_blank>推荐朋友</A> 】 【 <A
href="javascript:window.external.AddFavorite('http://dgdz.gxu.edu.cn/list.asp?Unid=458','AVR单片机捕获中断实现红外线解码')">收藏</A>
】 【 <A href="javascript:window.print()">打印</A> 】 【 <A
href="javascript:window.close()">关闭</A> 】 【 字体:<A
href="javascript:ContentSize(16)">大</A> <A
href="javascript:ContentSize(14)">中</A> <A
href="javascript:ContentSize(12)">小</A> 】 </TD></TR></TBODY></TABLE>
<TABLE width="97%" align=center>
<TBODY>
<TR>
<TD>上一篇:<A
href="http://dgdz.gxu.edu.cn/list.asp?unid=457">正弦函数计算器</A><BR>下一篇:<A
href="http://dgdz.gxu.edu.cn/list.asp?unid=459">PCB布线的地线干扰与抑制</A>
</TD></TR></TBODY></TABLE></TD></TR>
<TBODY id=printHide name="printHide">
<TR>
<TD class=summary-title> >> 相关文章 </TD></TR>
<TR class=tdbg vAlign=top>
<TD
style="PADDING-RIGHT: 2px; PADDING-LEFT: 2px; PADDING-BOTTOM: 5px; PADDING-TOP: 5px">
<DIV style="LINE-HEIGHT: 150%" align=left> <IMG
src="AVR单片机捕获中断实现红外线解码.files/bullet.gif" align=absMiddle><A
href="http://dgdz.gxu.edu.cn/list.asp?Unid=412">博物馆智能防盗保护器系统设计</A></DIV>
<DIV style="LINE-HEIGHT: 150%" align=left> <IMG
src="AVR单片机捕获中断实现红外线解码.files/bullet.gif" align=absMiddle><A
href="http://dgdz.gxu.edu.cn/list.asp?Unid=411">AVR单片机的RTOS-AVRX应用</A></DIV>
<DIV style="LINE-HEIGHT: 150%" align=left> <IMG
src="AVR单片机捕获中断实现红外线解码.files/bullet.gif" align=absMiddle><A
href="http://dgdz.gxu.edu.cn/list.asp?Unid=297">AVR基本硬件线路设计与分析(ATmega16功能小板)</A></DIV>
<DIV style="LINE-HEIGHT: 150%" align=left> <IMG
src="AVR单片机捕获中断实现红外线解码.files/bullet.gif" align=absMiddle><A
href="http://dgdz.gxu.edu.cn/list.asp?Unid=295">AVR的IO端口特性与应用</A></DIV>
<DIV style="LINE-HEIGHT: 150%" align=left> <IMG
src="AVR单片机捕获中断实现红外线解码.files/bullet.gif" align=absMiddle><A
href="http://dgdz.gxu.edu.cn/list.asp?Unid=285">AVR单片机新手入门的第一个范例</A></DIV>
<DIV style="LINE-HEIGHT: 150%" align=left> <IMG
src="AVR单片机捕获中断实现红外线解码.files/bullet.gif" align=absMiddle><A
href="http://dgdz.gxu.edu.cn/list.asp?Unid=108">学习单片机为什么选用AVR单片机?</A></DIV>
<DIV style="LINE-HEIGHT: 150%" align=left> <IMG
src="AVR单片机捕获中断实现红外线解码.files/bullet.gif" align=absMiddle><A
href="http://dgdz.gxu.edu.cn/list.asp?Unid=107">ATmega8使用说明(pdf格式)</A></DIV></TD></TR></TBODY></TABLE>
<TABLE class=twidth cellSpacing=0 cellPadding=0 align=center>
<TBODY>
<TR>
<TD class=footline></TD></TR>
<TR style="LINE-HEIGHT: 130%" align=middle height=60>
<TD>开发单位: 广西大学电气工程学院创作实验室 电话:0771-3232264
邮箱:create008@163.com<BR>Copyright ©2005 - 2007 广西大学电工电子实验教学中心
</TD></TR></TBODY></TABLE>
<CENTER>
<SCRIPT language=javascript src="AVR单片机捕获中断实现红外线解码.files/419263.js"
type=text/javascript></SCRIPT>
<NOSCRIPT><A href="http://www.51.la/?419263" target=_blank><IMG
style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none"
alt=我要啦免费统计 src="AVR单片机捕获中断实现红外线解码.files/go.htm"></A></NOSCRIPT></CENTER><!--
<center>访问量:
<script language="javascript" type="text/javascript" src="http://quote.users.51.la/?id=419263&mb=2"></script>
</center>
--></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -