第4讲AVR单片机中断.ppt

上传人:本田雅阁 文档编号:2577749 上传时间:2019-04-11 格式:PPT 页数:17 大小:236.01KB
返回 下载 相关 举报
第4讲AVR单片机中断.ppt_第1页
第1页 / 共17页
第4讲AVR单片机中断.ppt_第2页
第2页 / 共17页
第4讲AVR单片机中断.ppt_第3页
第3页 / 共17页
亲,该文档总共17页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《第4讲AVR单片机中断.ppt》由会员分享,可在线阅读,更多相关《第4讲AVR单片机中断.ppt(17页珍藏版)》请在三一文库上搜索。

1、1,外部中断应用实例,例7.1 用按键控制的一位LED 数码管显示系统 1) 硬件电路 图7-2 为硬件原理图。其中LED 数码管的控制显示连接与例6.4 相同,PA 口工作于输出方式,作为LED 数码管的段码输出,LED 数码管的位信号接地,因此这个一位的LED 数码管工作于静态显示方式。图中使用了两个按键K1、K2,按键的一端分别与PD2(INT0)、PD3(INT1)连接。INT0 和INT1 作为外部中断的输入,采用电平变化的下降沿触发方式,当K1(K2)按下时,会在PD2(PD3)引脚上产生一个高电平到低电平的跳变,触发INT0 或NT1中断。,2,3,系统的功能还是控制一个8 段数

2、码管显示“0”“F”16 个十六进制的数字。当系统上电时,显示“0”。K1 键的作用是加“1”控制键:按1 次K1 键,显示数字加1,依次类推。 当第15 次按K1 键时,显示“F”,第16 次按K1 键,显示又从“0”开始。K2 键的作用是减1 控制键:按1 次K1 键,显示数字减1,减到“0”后,再从“F”开始。,4,#include flash char led_716=0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07, 0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71; char counter; / INT0 中断服务程序

3、interrupt EXT_INT0 void ext_int0_isr(void) if (+counter=16) counter = 0; / INT1 中断服务程序 interrupt EXT_INT1 void ext_int1_isr(void),5, if (counter) -counter; else counter = 15; void main(void) PORTA=0xFF; DDRA=0xFF; GICR|=0xC0; / 允许INT0、INT1 中断 MCUCR=0x0A; / INT0、INT1 下降沿触发 GIFR=0xC0; / 清除INT0、INT1 中断

4、标志位 counter = 0; / 计数单元初始化为0 #asm(“sei“) / 全局中断允许 while (1) PORTA = led_7counter; / 显示计数单元 ; ,6,建议使用CVAVR 中的程序生成向导功能来帮助你建立整个程序的框架,以及芯片的初始化部分的语句,可以省掉你过多的查看器件手册和考虑寄存器的设置值等。 上面的程序,就是先利用CVAVR 的程序生成向导功能进行配置,然后在它生成的程序框架基础上完成的。程序中定义了一个计数变量counter,执行一次INT0 中断服务程序, counter 加1,而执行一次 INT1 中断服务程序,counter 减1。在主程

5、序中只是显示counter的值。INT0、INT1 初始化为电平变化的下降沿触发。,7,上机练习:显示两位数099,按K1键,加一,按K2键,减一,8,9,10,AVR有不同的中断源。每个中断和复位在程序空间都有独立的中断向量。所有的中断事件都有自己的使能位。当使能位置位,且状态寄存器的全局中断使能位I 也置位时,中断可以发生。根据程序计数器PC 的不同,在引导锁定位BLB02 或BLB12 被编程的情况下,中断可能被自动禁止。这个特性提高了软件的安全性。程序存储区的最低地址缺省为复位向量和中断向量。完整的向量列表见 下页 。列表也决定了不同中断的优先级。向量所在的地址越低,优先级越高。RES

6、ET 具有最高的优先级,第二个为INT0 外部中断请求0。通过置位MCU 控制寄存器 (MCUCR) 的IVSEL,中断向量可以移至引导Flash的起始处。编程熔丝位BOOTRST也可以将复位向量移至引导Flash的起始处。任一中断发生时全局中断使能位I 被清零,从而禁止了所有其他的中断。用户软件可以在中断程序里置位I 来实现中断嵌套。此时所有的中断都可以中断当前的中断服务程序。执行RETI 指令后I 自动置位。,中断与定时,11,从根本上说有两种类型的中断。第一种由事件触发并置位中断标志。对于这些中断,程序计数器跳转到实际的中断向量以执行中断处理程序,同时硬件将清除相应的中断标志。中断标志也

7、可以通过对其写”1” 的方式来清除。当中断发生后,如果相应的中断使能位为“0“,则中断标志位置位,并一直保持到中断执行,或者被软件清除。类似的,如果全局中断标志被清零,则所有已发生的中断都不会被执行,直到I 置位。然后挂起的各个中断按中断优先级依次执行。第二种类型的中断则是只要中断条件满足,就会一直触发。这些中断不需要中断标志。若中断条件在中断使能之前就消失了,中断不会被触发。,12,AVR 退出中断后总是回到主程序并至少执行一条指令才可以去执行其他被挂起的中断。要注意的是,进入中断服务程序时状态寄存器不会自动保存,中断返回时也不会自动恢复。这些工作必须由用户通过软件来完成。使用CLI 指令来

8、禁止中断时,中断禁止立即生效。没有中断可以在执行CLI 指令后发生,即使它是在执行CLI 指令的同时发生的。下面的例子说明了如何在写EEPROM 时使用这个指令来防止中断发生以避免对EEPROM 内容的可能破坏。,13,14,15,16,通用中断控制寄存器 GICR,Bit 1 IVSEL: 中断向量选择 当IVSEL 为“0“ 时,中断向量位于Flash 存储器的起始地址;当IVSEL 为“1“ 时,中断向量转移到Boot 区的起始地址。实际的Boot 区起始地址由熔丝位BOOTSZ 确定。为了防止无意识地改变中断向量表,修改IVSEL 时需要遵照如下过程: 1. 置位中断向量修改使能位IVCE 2. 在紧接的4 个时钟周期里将需要的数据写入IVSEL,同时对IVCE 写”0”,17,Bit 0 IVCE: 中断向量修改使能 改变IVSEL 时IVCE 必须置位。在IVCE 或IVSEL 写操作之后4 个时钟周期, IVCE 被硬件清零。如前面所述,置位IVCE 将禁止中断,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1