📄 avr外部中断范例 interrupt.htm
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd">
<!-- saved from url=(0048)http://www.avrvi.com/avr_examples/interrupt.html -->
<HTML
xmlns="http://www.w3.org/1999/xhtml"><HEAD><TITLE>AVR外部中断范例 interrupt</TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<META content="AVR 新手入门 单片机 AVR与虚拟仪器网站提供" name=description>
<META content="古欣 guxin[at]mail.sdu.edu.cn" name=author>
<META content="AVR 单片机 新手入门 手把手教程 avr程序 avr范例" name=keywords>
<STYLE title=css_design_by_guxin type=text/css media=all>@import url( ../inc/article.css );
</STYLE>
<LINK media=all href="AVR外部中断范例 interrupt.files/article.css" type=text/css
rel=stylesheet>
<META content="MSHTML 6.00.2900.3199" name=GENERATOR></HEAD>
<BODY>
<DIV class=m>
<H1 class=c>AVR与虚拟仪器 www.avrvi.com</H1></DIV>
<DIV class=m>
<DIV id=head>
<P class=c>AVR与虚拟仪器致力于提供最优质的AVR和labview技术服务,最全的技术资料,最好的开发板方案。</P>
<P class=c>我们将以AVR DB-CORE Ver2.3 Atmega16开发板为平台,一步一步,教会大家AVR单片机编程。</P>
<P class=c>本站所有范例都采用ICC编写,ICC编译器加AVR Studio下载调试,下载器为JTAG&ISP下载编程器。
</P></DIV></DIV>
<DIV class=m>
<DIV id=now>你现在的位置:<A href="http://www.avrvi.com/">AVR与虚拟仪器</A>>><A
href="http://www.avrvi.com/index_avr_examples.html">AVR使用范例</A>>>AVR外部中断范例<SPAN><A
title=AVR与虚拟仪器论坛 href="http://bbs.avrvi.com/">论坛</A></SPAN></DIV></DIV>
<DIV class=m>
<H3>AVR使用范例--AVR外部中断范例</H3>
<DIV class=pad10>
<P>本页关键词: 单片机外部中断 外部中断的应用 AVR外部中断 INTERUPTS </P>
<P class=title>关于AVR中断:</P>
<P>系统在正常运行主程序时,如果突然有一个重要的任务要马上处理,那么系统就要保存现在的工作,然后再去处理这个任务,执行这个重要任务完毕以后再返回原来的主程序继续运行,这就是中断。</P>
<P><SPAN
class=red>主程序一旦进入中断服务程序,那么AVR芯片将自动的关闭全局中断,在这个期间不再执行其它的中断请求,直到中断程序结束以后芯片才自动的重新开放全局中断。</SPAN>(注意,在这个期间某些中断请求可能会被丢弃,某些请求会留下中断请求标致,一旦当前的中断执行完毕,这个有中断标致的请求就有可能马上得到响应,如INT0的下降沿触发就会留下中断请求标致,而低电平触发就不会流下中断请求标致)。如果你想在执行中断服务程序时响应另外一个更重要的中断,那么就要在中断服务程序中加入一条打开全局中断的语句。</P>
<P class=title>使用ICC快速建立中断服务程序 <A title=打开ICC生成的程序文件
href="http://www.avrvi.com/avr_examples/icc_interupts.txt">程序文件</A>[txt]</P>
<P>使用ICCAVR Application Builder进行如下图所示的设置。 可以设置是否使用中断,上升延,下降延,低电平,任意的逻辑电平变化。</P>
<P><IMG height=488 alt=设置外部中断可用 src="AVR外部中断范例 interrupt.files/interrupt_1.gif"
width=520></P>
<P>将生成的程序进行修改,DDRA = 0x01;PORTD = 0x0C; ,添加MAIN函数,如下 </P>
<UL>
<LI><PRE>//ICC-AVR application builder : 2006-12-8 17:04:44
// Target : M16
// Crystal: 7.3728Mhz
#include <iom16v.h>
#include <macros.h>
unsigned int i=0;
void port_init(void)
{
PORTA = 0x00;
DDRA = 0x01;
PORTB = 0x00;
DDRB = 0x00;
PORTC = 0x00; //m103 output only
DDRC = 0x00;
PORTD = 0x0C; //使INT0,INT1对应口上拉电阻有效
DDRD = 0x00; //必须设置INT0,INT1对应口为<SPAN class=red>输入</SPAN>
}
#pragma interrupt_handler int0_isr:2
void int0_isr(void)
{
//external interupt on INT0
i++; <SPAN class=gray>//在中断里进行操作</SPAN>
}
#pragma interrupt_handler int1_isr:3
void int1_isr(void)
{
//external interupt on INT1
PORTA = 0x01;<SPAN class=gray> //在中断里进行操作</SPAN>
}
//call this routine to initialize all peripherals
void init_devices(void)
{
//stop errant interrupts until set up
CLI(); //disable all interrupts
port_init();
MCUCR = 0x08; //INT1 的下降沿产生异步中断请求,INT0上升延
GICR = 0xC0; //INT0和INT1使能
TIMSK = 0x00; //timer interrupt sources
SEI(); //re-enable interrupts
//all peripherals are now initialized
}
void main(void)
{
init_devices();
while(1) //死循环等待中断
;
}</PRE></LI></UL>
<P class=title>相关解释</P>
<OL>
<LI>#pragma interrupt_handler int0_isr:2
<LI>中断的约定表示方法:<SPAN class=red>int0_isr</SPAN>有一个与之对应的应用程序void
int0_isr(void),<SPAN class=red>2</SPAN>为中断向量,值越小,优先级越高,INT0的优先级仅次于复位。
<LI>MCU 控制寄存器- MCUCR MCU 控制寄存器包含中断触发控制位与通用MCU 功能
<LI>通用中断控制寄存器- GICR 使能或禁用外部中断请求 </LI></OL>
<P>使用过程中:为了降低干扰,中断引脚请加上一个4.7K的上拉电阻,还可以根据实际需要,加上电容滤波,防抖动。</P>
<P>更详细的内容,AVR外部中断,时钟中断,串行通信,IIC综合实例 <A title=文本文档,中断示例程序
href="http://www.avrvi.com/avr_examples/interupts.txt">一个中断示例程序</A>[txt]</P></DIV></DIV>
<DIV class=m>
<H4 id=link><A href="http://www.avrvi.com/">AVR 与虚拟仪器</A>欢迎交换链接,请与小古联系
avrvi【at】163.com </H4>
<SCRIPT src="AVR外部中断范例 interrupt.files/links.js" type=text/javascript></SCRIPT>
<SCRIPT src="AVR外部中断范例 interrupt.files/footer.js" type=text/javascript></SCRIPT>
</DIV></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -