ATmega8 复位与中断处理

发布者:zukeq2009最新更新时间:2021-10-26 来源: eefocus关键字:ATmega8  复位  中断处理 手机看文章 扫描二维码
随时随地手机看文章

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

程序存储区的最低地址缺省为复位向量和中断向量。完整的向量列表请参见P 43“ 中断” 列表也决定了不同中断的优先级。向量所在的地址越低,优先级越高。RESET 具有最高 的优先级,第二个为INT0 – 外部中断请求0。通过置位通用中断控制寄存器 (GICR) 的 IVSEL,中断向量可以移至引导Flash的起始处,参见P 43“中断” 。编程熔丝位BOOTRST 也可以将复位向量移至引导Flash 的起始处。具体参见P 196“ 支持引导装入程序 -在写 的同时可以读(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 置位。

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

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

推荐阅读最新更新时间:2024-11-06 10:33

如何解决AVR单片机上电复位工作混乱的问题
在单片机应用中经常需要在掉电时(包括人为的关机和偶然的外部电源故障),对运行的数据进行保存。目前,常用的方法是单独给单片机增加一个较大的电容(一般为2000 μf以上,也有用法拉级的),外部掉电后,靠大电容存储的电量缓慢放电,提供单片机向eeprom存储数据所需要的时间。所选的电容小,提供的时间短,存储数据不可靠,所选电容大提供时间长,存储数据可靠。但是随之而来的问题是,掉电后电容放电过程中,单片机的供电电压在缓慢下降,当下将到某个值但还没有降到复位门限电压之前,如果此时再次开机,则单片机不能正常启动,导致单片机重复上电后工作混乱。下面具体分析这一过程并给出解决的办法。 我们先了解一下AVR的上电复位特点。上表是AVR数据手册
[单片机]
如何解决AVR单片机上电<font color='red'>复位</font>工作混乱的问题
STM8单片机复位源判断
最近在调试系统的时候,发现单片机老是复位,于是想着用程序来判断一个单片机的复位信号是来自于哪里。查找资料发现STM8单片机的复位源总共有9种 ●NRST引脚产生的外部复位 ● 上电复位(POR) ● 掉电复位(BOR) ● 独立看门狗复位 ● 窗口看门狗复位 ● 软件复位 ● SWIM复位 ● 非法操作码复位 ● EMS复位:当一些关键的寄存器被破坏或错误加载时产生的复位 但是这9种复位源通过复位寄存器能看到的只有5种 复位状态寄存器(RST_SR) 位7:5 保留,必须保持为0。 位4 EMCF:EMC复位标志 位3 SWIMF:SWIM复位标志位 位2 ILLOPF:非法操作码复位标志位 位1 IWDGF:独立
[单片机]
ARM—异常中断处理
一. ARM程序执行流程 在ARM体系中,程序执行的流程有三种: 顺序执行程序,在正常顺序执行代码的时候,每次执行一条ARM指令,PC=PC+4(Byte)。(THUMB状态下PC=PC+2) 跳转执行程序,利用跳转指令,程序可以跳转到指定的地址处执行程序,或者跳转到特定的子程序处执行。 异常中断发生,当发生异常时,程序会跳转到相应的异常中断处理程序处执行,在执行完异常中断处理程序之后,又会返回原地址继续执行程序。 要了解ARM处理异常中断的流程原理,就要先熟悉一下ARM的工作模式与寄存器。 二. ARM工作模式 如图,ARM有七种工作模式,大多数程序是工作在用户模式usr下的,其他六种工作模式属于特权模式,特
[单片机]
ARM—异常<font color='red'>中断处理</font>
二极管整流的正激变换电路及无源复位电路
变压器复位选择   在讨论同步整流之前,看看用二极管整流的 正激变换 器是有意义的,正激拓扑基本的功率级示于图1。   这里有几种可能的复位方法示于图2。      这些技术都是要使变压器磁化电流在主开关Q1关断时复位。方法及磁化电流幅度复位是不同的。通过谐振电容的反向磁化电流幅度起始要等于Q1的Coss加上DF的结电容。该负向值要等于峰峰磁化电流的一半。R-C-D箝位与之非常相似,除非它是箝制电压,其能驱动变压器的反向磁化电流。   因此,在R-C-D箝制中,磁化电流将在正、负峰值之间循环,而不必让其磁化电流一半的峰-峰值相等。传统的第三绕组复位技术,磁化电流首先由其复位到0,但在磁化电感及Q1的Coss之间的
[工业控制]
二极管整流的正激变换电路及无源<font color='red'>复位</font>电路
PIC单片机的复位系统模块
PIC16F87X系列单片机的复位功能设计得比较完善,引起单片机内部复位的条件和原因可以大致归纳成以下5种.   1.上电复位   每次单片机加电时,上电复位电路都要对电源电压VDD的上升过程进行检测,当VDD值上升到规定值1.6~1.8V时,就产生一个有效的复位信号,需经过72ms加1024个时钟周期的延时,才会使单片机复位。   2.人工复位(单片机在执行程序期间)   无论是单片机在按预先设定的正常顺序运行程序,还是出现单片机进入不可预知的某一个死循环,都必须认为单片机在执行程序。单片机在执行程序期间,只要在人工复位端MCLR加入一个低电平信号,就会令其复位。   3.人工复位(单片机在睡眠期间)   单片机处在睡眠
[单片机]
STM32每次下载后正常运行,但是断电或复位后程序运行就无法正常运行的解决办法
STM32每次下载程序后能正常运行,但是断电或复位后程序运行就无法正常运行,大概解决办法如下 1、查看boot0和boot1是否都正常接地 2、查询其他外设是否卡死在其中一个里面了, 我遇到的问题是有一个模块有电源控制部分,因为接的电容容量比较大,充电的时间比较长,所以需要进行延时,等待充电完成,才能对模块进行一些列的操作
[单片机]
ATmega8l引脚图及用74HC573扩展其io的方法
今天找了很多资料,首先是芯片,我决定使用ATmega8l,先简单的介绍一下,32个8位通用寄存器,可反复擦写一万次,可对锁定位进行编程,实现用户程序加密,三通道PWM(做小车用两个足够了),PDIP封装具备6路10位ADC,也够了。工作电压2.7-5.5V。总共28个引脚。附上isp烧录方式,和引脚说明!个人觉得性价比较高,比起ATmega16速度是慢了点,可价钱却相差一半。 ATmega8l引脚图 想到IO口可能不够用,于是需要扩展。于是用到74HC573锁存器,图如下。由于1第一脚功能没用到,把它接地,置为低电平! 今天想到一个问题,看到一张图把4个红外对管分别对应L298N的四个input端,奇怪的是L298N只有四个
[单片机]
<font color='red'>ATmega8</font>l引脚图及用74HC573扩展其io的方法
基于FPGA的微处理器内核设计与实现
与传统投片实现ASIC相比,FPGA具有实现速度快、风险小、可编程、可随时更改升级等一系列优点,因而得到了越米越广泛的应用。MCS-51应用时间长、范围广,相关的软硬件资源丰富,因而往往在FPGA应用中嵌人MCS-51内核作为微控制器。但是传统MCS-51的指令效率太低,每个机器周期高达12时钟周期,因此必须对内核加以改进,提高指令执行速度和效率,才能更好地满足FPGA的应用。 通过对传统MCS-51单片机指令时序和体系结构的分析,使用VHDL语言采用自顶向下的设计方法重新设计了一个高效的微控制器内核。改进了的体系结构,可以兼容MCS-51所有指令,每个机器周期只需1个时钟周期,同时增加了硬件看门狗和软件复位功能,提高了指令执行
[嵌入式]
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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