ATmega16 复位与中断处理

发布者:世界因你而精彩最新更新时间:2021-10-11 来源: eefocus关键字:ATmega16  复位  中断处理 手机看文章 扫描二维码
随时随地手机看文章

AVR有不同的中断源。每个中断和复位在程序空间都有独立的中断向量。所有的中断事件都有自己的使能位。当使能位置位,且状态寄存器的全局中断使能位I 也置位时,中断可以发生。根据程序计数器PC 的不同,在引导锁定位BLB02 或BLB12 被编程的情况下,中断可能被自动禁止。这个特性提高了软件的安全性。详见 P247“ 存储器编程” 的描述。


程序存储区的最低地址缺省为复位向量和中断向量。完整的向量列表请参见 P43“中断”。列表也决定了不同中断的优先级。向量所在的地址越低,优先级越高。RESET 具有最高的优先级,第二个为INT0 – 外部中断请求0。通过置位MCU 控制寄存器 (MCUCR) 的IVSEL,中断向量可以移至引导Flash的起始处。编程熔丝位BOOTRST也可以将复位向量移至引导Flash的起始处。具体参见P234“支持引导装入程序 – 在写的同时可以读(RWW,Read-While-Write) 的自我编程能力”。

任一中断发生时全局中断使能位I 被清零,从而禁止了所有其他的中断。用户软件可以在中断程序里置位I 来实现中断嵌套。此时所有的中断都可以中断当前的中断服务程序。执行RETI 指令后I 自动置位。

从根本上说有两种类型的中断。第一种由事件触发并置位中断标志。对于这些中断,程序计数器跳转到实际的中断向量以执行中断处理程序,同时硬件将清除相应的中断标志。中断标志也可以通过对其写”1” 的方式来清除。当中断发生后,如果相应的中断使能位为“0”,则中断标志位置位,并一直保持到中断执行,或者被软件清除。类似的,如果全局中断标志被清零,则所有已发生的中断都不会被执行,直到I 置位。然后挂起的各个中断按中断优先级依次执行。

第二种类型的中断则是只要中断条件满足,就会一直触发。这些中断不需要中断标志。若中断条件在中断使能之前就消失了,中断不会被触发。

AVR 退出中断后总是回到主程序并至少执行一条指令才可以去执行其他被挂起的中断。要注意的是,进入中断服务程序时状态寄存器不会自动保存,中断返回时也不会自动恢复。这些工作必须由用户通过软件来完成。

使用CLI 指令来禁止中断时,中断禁止立即生效。没有中断可以在执行CLI 指令后发生,即使它是在执行CLI 指令的同时发生的。下面的例子说明了如何在写EEPROM 时使用这个指令来防止中断发生以避免对EEPROM 内容的可能破坏。


汇编代码例程
in r16, SREG ; 保存SREG
cli ; 禁止中断
sbi EECR, EEMWE ; 启动 EEPROM 写操作
sbi EECR, EEWE
out SREG, r16 ; 恢复SREG (I 位)

C 代码例程
char cSREG;
cSREG = SREG; /* 保存SREG */
/* 禁止中断*/
_CLI();
EECR |= (1<EECR |= (1<SREG = cSREG; /* 恢复SREG (I 位) */

使用SEI 指令使能中断时,紧跟其后的第一条指令在执行任何中断之前一定会首先得到执行。 

汇编代码例程
sei ; 置位全局中断使能标志
sleep ; 进入休眠模式,等待中断发生
; 注意: 在执行任何被挂起的中断之前MCU 将首先进入休眠模式

C 代码例程
_SEI(); /* 置位全局中断使能标志*/
_SLEEP(); /* 进入休眠模式,等待中断发生*/
/* 注意: 在执行任何被挂起的中断之前MCU 将首先进入休眠模式*/

AVR 中断响应时间最少为4 个时钟周期。4 个时钟周期后,程序跳转到实际的中断处理例程。在这4 个时钟期期间PC 自动入栈。在通常情况下,中断向量为一个跳转指令,此跳转需要3 个时钟周期。如果中断在一个多时钟周期指令执行期间发生,则在此多周期指令执行完毕后MCU 才会执行中断程序。若中断发生时MCU 处于休眠模式,中断响应时间还需增加4 个时钟周期。此外还要考虑到不同的休眠模式所需要的启动时间。这个时间不包括在前面提到的时钟周期里。

中断返回需要4 个时钟。在此期间PC( 两个字节) 将被弹出栈,堆栈指针加二,状态寄存器SREG 的I 置位。

关键字:ATmega16  复位  中断处理 引用地址:ATmega16 复位与中断处理

上一篇:ATmega16 Flash程序存储器
下一篇:ATmega16 指令执行时序

推荐阅读最新更新时间:2024-11-11 20:13

8051基础之复位电路
RESET/Vpd作复位信号复用脚,当8051通电,时钟电路开始工作,在RESET引脚上出现24个时钟周期以上的高电平,系统即初始复位。初始化后,程序计数器PC指向0000H,P0-P3输出口全部为高电平。RESET由高电平下降为低电平后,系统即从0000H地址开始执行程序。 8051的复位方式可以是自动复位(VCC一上电时是通的,待稳定后电容就断开了直流电,RESET为低,此即典型的电阻电容式复位电路),也可以是手动复位(按键后电容充电,RESET为高,松开后,电容放电,直到RESET为低),见上图。此外,RESET/Vpd还是一复用脚,Vcc掉电其间,此脚可接上备用电源,以保证单片机内部RAM的数据不丢失。 有的方案需
[单片机]
8051基础之<font color='red'>复位</font>电路
AVR单片机ATMega16的UART通信总结
#include iom16v.h #include macros.h typedef unsigned char uint8_t; #define DF_Config_Uart0_BaudRate 9600 //UART0 初始化 // desired baud rate: 9600 // actual: baud rate:9600 (0.0%) void uart0_init(void) { UCSRB = 0x00; //disable while setting baud rate UCSRA = 0x00; UCSRC = BIT(URSEL) | 0x06; // 配置波特率 #if DF_Confi
[单片机]
基于Atmega16单片机医疗护理小卫士的设计与实现
作品介绍 1、创作目的 实现对病人的生理特征的实时监测,将病人的情况及时地反映给医护人员,解决因对病人的抢救不及时而造成的生命财产的损失,做到对病人更加全面,细致的医疗照顾。 2、创新性、实用性 医疗护理小卫士以Atmega16为主控芯片,采用两种供电方式,通过温度传感器和压力传感器对体温脉搏的实时测定监控,还可以根据病人的具体情况设定体温和脉搏的正常范围。可以应用于医疗行业,为广大医疗患者解决烦恼。 工作原理 MCU模块: 本作品使用的是Atmega16作为主控制器,5V电压供电。将温度传感器和压力传感器通过中间电路连接到单片机上。温度传感电路模块进行体温 电压转换;同样,压力传
[单片机]
基于<font color='red'>Atmega16</font>单片机医疗护理小卫士的设计与实现
中断函数和中断处理函数
(1)当你在做一个计算机(嵌入式)系统时,在为系统做初始化时往往会有设置中断向量的操作。 当你设置好某个特定的外部事件(比如定时器超时)的中断向量后,当你允许(使能)了该设备(定时器),那么等到特定时刻(定时器超时),外设(定时器)会向你CPU核心发送外部中断请求,如果此时没有对它进行任何屏蔽的话,并且也没有比它优先级更高的中断事件处于未决状态的话,那么此时该事件的中断发生。 为了能够对该事件处理,必须要有一个处理该中断事件的函数入口地址,称该地址为中断向量。 因此中断向量位置一般是由CPU(硬件)来决定的,而里面对于特定中断事件的处理可以由开发人员进行自由地软件编程。 但是,在处理完该中断事件后,也就是要返回该中断向
[单片机]
51单片机的软件复位
请先看最下面的程序 这是一款针对Keil软件的,被称作 纯软件 复位的程序。所谓 纯软件 是指它没有直接操作硬件以及寄存器。 事实上如果不懂硬件和汇编也不可能有这段C程序,不管怎么样,我们还是来看一看它的真面目: 我们知道51 单片机 可以把数据放在程序存储器里面,也就是程序和数据没有本质区别,都是一些特定的数据。如果我们将一段程序,以数组数据的形式存储在程序存储器里面,那么是不是也可以执行呢?答案是肯定的。 - 言归正传,先来看看这个数组数据 0xe4,0xc0,0xe0,0xc0,0xe0,0x22,中Keil的汇编窗口看出,它其实是四条汇编语句: CLR A ;编
[单片机]
基于ATMEGA16的DS18B20测温程序
完整程序源代码下载: http://www.51hei.com/f/avrds.rar main函数: /* 程序功能:18B20测温结果在1602液晶上显示 作者:朱波 时间:2012年1月31日 说明:PA5为输入端口 18B20参数:测温范围:-55~+125℃,在-10~+85℃精确度为 5 通信方式:单总线 */ #include iom16v.h #include macros.h #include delay.h #include display.h #include 18B20.h #define uchar unsigned char #define uint unsigned in
[单片机]
基于<font color='red'>ATMEGA16</font>的DS18B20测温程序
STM32芯片的那些系统级复位功能
我们知道,STM32芯片里有很多系统级的复位,比方上电复位、欠压复位、看门狗复位、软件复位、复位脚电平触发复位等等。这些系统级的复位往往都是针对整个芯片或芯片的绝大部分区域。 其实,我们在实际应用中有时候可能并不需要、甚至不接受总是对整个芯片做大面积的复位。正因为如此,STM32的芯片里除了具备那些系统级复位功能外,还针对各个外设设计了复位功能,即我们可以只需针对某特定外设或特定区域做复位而不影响其它。特定区域一般是指某一块总线驱动的外设集,比方挂在APB1总线的所有外设。 或许有人不了解、或者说没有使用过针对特定外设复位的功能,这里就简单介绍下,抛砖引玉。在STM32各个系列的参考手册里的RCC章节,有关于对外设或局部外
[单片机]
STM32芯片的那些系统级<font color='red'>复位</font>功能
PIC系列单片机的中断处理注意事项
单片机中的中断系统对电子工程师来说是解决突发事件和多任务实时处理的最好方法,熟练掌握中断技术的应用是一个合格电子工程师必备的能力。 PIC与51系列单片机一个显著的区别就是:PIC只有一个中断入口地址(为04H),而51有多个中断源。这样对PIC来说,无论发生何种中断程序将自动转移执行04H处的程序语句,为了区分到底是哪种中断发生就必须在中断服务程序中通过判断中断标志位来确定并转移到相应的中断服务程序中。在发生中断时,断点地址被首先压入硬件堆栈,而现场的一些参数须用户通过软件保存,必须保存的寄存器包括W寄存器、程序寄存器的高位字节PCLATH及状态标志寄存器STATUS等,另外一些在中断服务程序和主程序中均使用到的寄存器也必须保
[单片机]
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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