AVR使用范例--AVR外部中断范例

发布者:祝福的4号最新更新时间:2016-07-28 来源: eefocus关键字:AVR  使用范例  外部中断 手机看文章 扫描二维码
随时随地手机看文章
系统在正常运行主程序时,如果突然有一个重要的任务要马上处理,那么系统就要保存现在的工作,然后再去处理这个任务,执行这个重要任务完毕以后再返回原来的主程序继续运行,这就是中断。

主程序一旦进入中断服务程序,那么AVR芯片将自动的关闭全局中断,在这个期间不再执行其它的中断请求,直到中断程序结束以后芯片才自动的重新开放全局中断。(注意,在这个期间某些中断请求可能会被丢弃,某些请求会留下中断请求标致,一旦当前的中断执行完毕,这个有中断标致的请求就有可能马上得到响应,如INT0的下降沿触发就会留下中断请求标致,而低电平触发就不会流下中断请求标致)。如果你想在执行中断服务程序时响应另外一个更重要的中断,那么就要在中断服务程序中加入一条打开全局中断的语句。

使用ICCAVR Application Builder进行如下图所示的设置。 可以设置是否使用中断,上升延,下降延,低电平,任意的逻辑电平变化。

AVR使用范例--AVR外部中断范例 - Jesse Rei - Jesse Rei 的博客(优柔寡断)

将生成的程序进行修改,DDRA = 0x01;PORTD = 0x0C; ,添加MAIN函数,如下

  •  

    //ICC-AVR application builder : 2006-12-8 17:04:44// Target : M16// Crystal: 7.3728Mhz#include #include 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对应口为输入}#pragma interrupt_handler int0_isr:2void int0_isr(void){ //external interupt on INT0 i++; //在中断里进行操作}#pragma interrupt_handler int1_isr:3void int1_isr(void){ //external interupt on INT1 PORTA = 0x01; //在中断里进行操作}//call this routine to initialize all peripheralsvoid 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) //死循环等待中断 ;}

 

相关解释

  1. #pragma interrupt_handler int0_isr:2
  2. 中断的约定表示方法:int0_isr有一个与之对应的应用程序void int0_isr(void),2为中断向量,值越小,优先级越高,INT0的优先级仅次于复位。
  3. MCU 控制寄存器- MCUCR MCU 控制寄存器包含中断触发控制位与通用MCU 功能
  4. 通用中断控制寄存器- GICR 使能或禁用外部中断请求

 

使用过程中:为了降低干扰,中断引脚请加上一个4.7K的上拉电阻,还可以根据实际需要,加上电容滤波,防抖动。

关键字:AVR  使用范例  外部中断 引用地址:AVR使用范例--AVR外部中断范例

上一篇:Debian中AVR交叉编译工具包的安装
下一篇:AVR定时/计数器应用设计

推荐阅读最新更新时间:2024-03-16 15:02

AVR单片机定时器做的门铃程序+电路
#define F_CPU 1000000UL #include avr/io.h #include avr/interrupt.h #include util/delay.h #define INT8U unsigned char #define INT16U unsigned int #define DoorBell() (PORTD ^= 0x01) / #define Key_DOWN() ((PINB & 0x80) == 0x00) volatile INT16U soundDelay; //两个不同取值分别对应于 叮 , 咚 int main() {
[单片机]
<font color='red'>AVR</font>单片机定时器做的门铃程序+电路
AVR学习心得(四)
AVR mega128简单的串行通讯原理 单片机同PC通讯是用的都是UART进行通讯,其实各种单片机的串行通讯原理是完全相同的,而不同的仅仅是器控制的寄存器不同。对于mega128来说比51功能强大些,完全不用占用任何别的资源。只要控制好相应的寄存器就好了。 ATmega128具有两个USART:USART0和USART1,这两个USART的具体功能将在下面描述。USART0和USART1使用不同的IO寄存器 注意:在ATmega103兼容模式中USART1.UBRR0H和UCRS0C无效.这意味ATmega128仅可以使用USART0以异步方式工作 USARTn 数据寄存器-UDRn:接受和发送数据寄存器
[单片机]
AVR单片机控制的开关电源
单片机 控制开关电源,单从对电源输出的控制来说,可以有几种控制方式。 其一是 单片机 输出一个电压(经DA芯片或PWM方式),用作电源的基准电压。这种方式仅仅是用单片机代替了原来的基准电压,可以用按键输入电源的输出电压值,单片机并没有加入电源的反馈环,电源电路并没有什么改动。这种方式最简单。 其二是 单片机 扩展AD,不断检测电源的输出电压,根据电源输出电压与设定值之差,调整DA的输出,控制PWM芯片,间接控制电源的工作。这种方式单片机已加入到电源的反馈环中,代替原来的比较放大环节,单片机的程序要采用比较复杂的PID算法。 其三是 单片机 扩展AD,不断检测电源的输出电压,根据电源输出电压与设定值之差,输
[单片机]
AVR单片机学习(四)C语言的流水灯验证
AVR 的IO口简介与寄存器的概念 一、何谓 寄存器 寄存器就是RAM中的一些特殊单元,映射片上外设的特殊功能 二、何谓 IO口 可以将 0 与1转换为电压信号的端口 单片机中最常用的TTL电平:0V代表 0 ,+5V 代表 1 Mega16有4个IO口,PA,PB,PC,PD 三、IO口的性能指标 灌电流能力:能够流入IO口的最大电流 拉电流能力:能够从IO口流出的最大电流 上拉电阻与下拉电阻 最大输入电压 IO口的两种状态 如上图(有个选择开关实际电路中不存在的为了好理解才给出的)输出就是 要么给个5V 要么给个地 0V 就是输出0 和 1
[单片机]
<font color='red'>AVR</font>单片机学习(四)C语言的流水灯验证
AVR单片机的DS18B20 C语言程序
#include iom16v.h #include macros.h #define uchar unsigned char #define uint unsigned int // #define BIT_SET(a,b) a|=(1 b) //置位位a.b #define BIT_CLR(a,b) a&=~(1 b) //清零位a.b
[单片机]
初学stm32-外部中断EXTI按键中断)
外部中断概述 STM32F4的每个IO都可以作为外部中断输入。 STM32F4的中断控制器支持23个外部中断/事件请求: EXTI线0~15:对应外部IO口的输入中断。 EXTI线16:连接到PVD输出。 EXTI线17:连接到RTC闹钟事件。 EXTI线18:连接到USB OTG FS唤醒事件。 EXTI线19:连接到以太网唤醒事件。 EXTI线20:连接到USB OTG HS(在FS中配置)唤醒事件。 EXTI线21:连接到RTC入侵和时间戳事件。 EXTI线22:连接到RTC唤醒事件。 对于每个外部中断线可以独立的配置触发方式(上升沿,下降沿或者双边沿触发),触发/屏蔽,专用的状态位。 STM32F4供IO使用的
[单片机]
初学stm32-<font color='red'>外部中断</font>(<font color='red'>EXTI</font>按键中断)
基于AVR单片机atmega32的PID和PWM液体流量控制系统研究
1. 引言 液体流量控制通常采用电磁阀实现,近年来,电磁阀的结构和控制方式发生了很大的变 化,随着计算机进入控制领域,以及新型的电力电子功率元器件的不断出现,使采用全控制的开关功率元件进行脉宽调制(pulse width modulation ,简称PWM)控制方式得到了广泛的应用。这种控制方式很容易在单片机中实现,从而为电磁阀的控制数字化提供了契机。 将偏差的比例(proportion)、积分(integral)、微分(differential)通过线性组合构成控制量,用这一控制量对被控对象进行控制,这样的控制器称PID控制器。PID控制器最早出现在模拟控制系统中,传统的模拟PID控制器是通过硬件(电子元件、气动和液压元件)来实现
[单片机]
基于<font color='red'>AVR</font>单片机atmega32的PID和PWM液体流量控制系统研究
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved