教学材料《AVR单片机》-第四章_第1页
教学材料《AVR单片机》-第四章_第2页
教学材料《AVR单片机》-第四章_第3页
教学材料《AVR单片机》-第四章_第4页
教学材料《AVR单片机》-第四章_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第四章

中断系统及其基本应用第六节AVR单片机中断标志位第七节AVR的中断优先级第八节ATmega48的外部中断第九节实例6按键控制的1位LED数码管显示第一节什么是中断所谓中断,就是打断当前正在做的事情,转去做其他“更为紧急”的事,例如这个厨师,包扎儿子伤口更紧急,他就打断做菜去给儿子包扎伤口。为了执行这个“更紧急”的事情,会打断正在做的事情,中断执行之后,还要继续做原来应该做的事情,而不是去做其他的,比如浇花,也不能去睡大觉,而是继续回厨房做菜返回第二节中断的特性一、中断源能够向单片机发出中断请求信号的部件和设备称为中断源,对于单片机来说,中断源一般分为内部中断源和外部中断源。二、中断信号中断源向单片机发出的申请中断的信号称为中断请求信号。这个信号是电信号的某种变化形式,通常有以下几种类型:(1)脉冲的上升沿或下降沿(上升沿触发型或下降沿触发型)(2)高电平或低电平(电平触发型)(3)电平的变化(状态变化触发型)下一页返回第二节中断的特性三、中断响应过程单片机接收到中断请求后,停止主程序的执行转而执行中断服务程序处理中断事件称为中断响应。那么,当中断发生后,单片机是如何进行中断响应的呢?这可由图4一1描述图中,主程序被打断的地方成为断点,由于单片机执行完中断处理的程序后要返回断点处继续处理,同时为了使中断处理程序不影响主程序使用过的变量、寄存器、标志位等数据,这需要在执行中断服务程序之前,将主程序中断处的地址和这些数据保存起来,这称为中断现场保护。在中断执行完毕后,先将原来的数据恢复,并返回主程序的断点处继续执行.上一页下一页返回第二节中断的特性四、中断向量单片机在检测到中断源发出的中断请求信号时,如果中断控制系统允许响应中断,CPU会自动转移,执行一个固定地址中的指令,这个固定的地址称做中断入口地址,也叫做中断向量。上一页下一页返回第二节中断的特性五、中断优先级对于中断优先级的确定,通常是由单片机的硬件结构规定的。一般的确定规则方式为两种:

(1)某中断对应的中断向量地址越小,其中断优先级越高(硬件确定方式)(2)通过软件对中断控制寄存器的设定,改变中断的优先级(用户软件可设置方式,注意:AVR不支持)上一页下一页返回第二节中断的特性六、中断嵌套从中断优先级的介绍我们可以看到,在一个中断执行的过程中还可以再发生其他中断,例如,低级中断可被高级中断打断。这种中断执行过程中又出现中断的现象称为中断嵌套上一页下一页返回第二节中断的特性七、中断的屏蔽前面关于中断的例子,还有其他的可能情况,比如做菜正在关键阶段,油已下锅,如果就这样跑出去可能就会着火,这时即便发生了“中断”,厨师也不会或不能被打断。这就是说中断是可以关断的,或更准确地说中断可以屏蔽。上一页下一页返回第二节中断的特性八、中断响应条件单片机的硬件系统除了给每个中断源配备一个中断屏蔽标志位用于中断的使能控制外,通常还为每一个中断源配备了一个中断标志位。不管中断屏蔽与否,单片机的硬件系统总是自动检测可能的中断信号,一旦检测到规定的信号出现,将会把相应的中断标志位置“I",当CPU检测到中断标志位被置位后就知道了发生对应的中断。图4一2给出了单片机对一个中断的响应过程上一页返回第三节ATmega48

单片机中断源和中断向量

ATmega48单片机为我们提供了丰富的中断资源,如果加上复位,共有26个中断源,这意味着单片机可以轻松应对多个“突发事件”,表4一1列出了ATmega48的中断源和各中断的名称定义。返回第四节如何编写中断服务程序代码为了编写中断服务程序,我们需要先包含头文件</interrupt.h>,然后使用宏ISR(vector,…);宏大括弧中的代码就是中断的用户代码。当硬件产生中断请求,如果中断被允许执行的话,硬件就会自动调用执行这段代码。宏ISR的参数、ecto:为中断名称,形如"ADCvest",‘已的定义由。yr/io.h给出。对于ATmega48而言,可在上面给出的表4一1的查到各个中断源对应的“中断名称定义”;宏的可选参数指明了中断服务程序的属性,对于初学入门的我们暂时忽略它就可以了。中断服务程序的具体代码,只需像定义一个普通函数一样写在大括弧对里即可,唯一要注意的是这段“函数”没有返回值和参数。由此可见在AVR-GCC中编写中断服务程序实在是一件很简单的事。下一页返回第四节如何编写中断服务程序代码在底层实现中,AVR-GCC通过事先为所有中断提供缺省服务程序的方式实现对中断的处理;这些例程的名字已经固定,用户使用上面介绍的方法来重写这些中断例程以处理中断。如果中断例程没有被重写,说明正常情况下不会产生该中断,AVR-GCC会为我们安排默认的中断例程,它将程序引导到0地址处(即复位)上一页返回第五节AVR单片机中断的开关控制

一、全局中断使能在AVR单片机的状态寄存器(SRE(劲里,有一个全局中断使能位I,它是AVR单片机中断的“总开关”,如图4一3所示二、中断源的中断允许标志控制在AVR单片机中,各个中断源都有自己对应的中断允许标志。以ATmega48的EIMSK寄存器为例,其INTO位和INTl位分别用于控制外部中断0和外部中断1是否被允许。如图4-4所示为ATmega48单片机的EIMSK寄存器,图中位2一位7为保留位,ATmega48没有使用这些位。返回第六节AVR单片机中断标志位AVR单片机各个中断源都有自己对应的中断标志位。当该中断发生时,无论中断是否被允许,中断标志位都会被硬件设置为“1"。以外部中断INTO和INTl为例,他们对应的中断标志位在EIFR寄存器中。如图4一5所示为ATmega48单片机EIFR寄存器返回第七节AVR的中断优先级一、中断优先级控制

AVR单片机没有专门的寄存器来配置各个中断的优先级,各中断源的优先级由其所对应的中断向量在向量表中的前后顺序来决定。在该表中排在前面的中断源具有更高的优先级,比如,如表4一1所示,排在头位的复位(RESET)具有最高的优先级,随后依次是外部中断0、外部中断源I......下一页返回第七节AVR的中断优先级二、中断嵌套控制

AVR单片机有一个特殊点,当任何一个中断发生之后,单片机硬件将自动清除全局中断使能位I,也就是说一旦某个中断被单片机响应后,其他中断是不可能打断它执行的。这让AVR单片机的中断显得有点“霸道”,因为一旦某个中断被响应,它就可以死死地霸占所有的单片机处理器资源,其他中断无论优先级高低都不能插足。这也提示我们,在编写中断服务程序时,应该尽量短小,以避免其他中断无法得到响应。上一页下一页返回第七节AVR的中断优先级AVR单片机的这种机制,使得中断优先级也有点“名不副实”,它的中断优先级仅仅在多个不同等级的中断同时出现时,高优先级的中断具有优先的响应权。如果我们想获得“中断嵌套”的功能,我们需要写这样的代码:#include<avr/interrupt.h>ISR(into_vect){sei();/*在进入中断服务函数后,软件置位“I”使能位以使能中断嵌套*//现在,其他中断可以在iNTO中断响应时嵌套了}上一页返回第八节ATmega48的外部中断一、外部中断触发方式和特点

ATmega48的外部中断通过引脚INTO与INTl或PCINT23..0触发。其中INTO,INTl支持4种中断触发方式,分别为低电平、任意电平变化、下降沿或是上升沿触发,具体由外部中断控制寄存器A(EICRA)的设置来确定下一页返回二、与外部中断相关的寄存器和标志位外部中断控制寄存器A-EICRA的低4位为INTO(ISCO1,ISC00)和INTl(ISC10、ISC10)中断触发类型控制位。EICRA的各位定义如下:第八节ATmega48的外部中断上一页下一页返回第八节ATmega48的外部中断INTO和INTl的中断触发方式如表4-2所示。

MCU对INTO,INT1引脚上电平值的采样在边沿检测前。如果选择脉冲边沿触发或电平变化中断的方式,那么在INTO,INTl引脚上的一个脉宽大于一个时钟周期的脉冲变化将触发中断,过短的脉冲则不能保证触发中断。如果选择低电平触发中断,那么低电平必须保持到当前指令执行完成才触发中断。如果是低电平触发方式的话,中断请求将一直保持到引脚下的低电平消失为止上一页下一页返回

2.外部中断屏蔽寄存器EIMSK

外部中断屏蔽寄存器EIMSK的低两位为INTO,INTl的中断允许控制位。如果状态寄存器SREG的全局中断标志I置位,而且EIMSK的相应的中断允许位置位,那么当外部INTO,INT1中断触发时,MCU将产生相应的中断请求。注意,即使INTO,INTl引脚被配置为输出,只要引脚电平发生了相应的变化,中断也会产生。EIMSK的各位定义如下:第八节ATmega48的外部中断上一页下一页返回

3.外部中断标志寄存器EIFR

外部中断标志寄存器EIFR的低两位为INTO,INTl的中断标志位。EIFR各位的定义如下:第八节ATmega48的外部中断上一页下一页返回4.引脚电平变化中断控制寄存器PCICR

引肚P电平变化中断控制寄存器PCICR的低三位为引脚电平变化中断PCI2,PCIl,PCIa的中断允许控制位。PCICR的各位定义如下:第八节ATmega48的外部中断上一页下一页返回5.引脚电平变化中断标志寄存器PCIFRPCIFR各位的定义如下:第八节ATmega48的外部中断上一页下一页返回6.引脚电平变化屏蔽寄存器2PCMSK2引脚电平变化屏蔽寄存器2PCMSK2的各位定义如下:第八节ATmega48的外部中断上一页下一页返回7.引脚电平变化屏蔽寄存器1PCMSKl引脚电平变化屏蔽寄存器1PCMSK1的各位定义如下:第八节ATmega48的外部中断上一页下一页返回8.引脚电平变化屏蔽寄存器0PCMSKO引脚电平变化屏蔽寄存器0PCMSKO的各位定义如下:第八节ATmega48的外部中断上一页返回第九节实例6按键

控制的1位LED数码管显示

1.实例目标本实例的日标是通过两个按键控制一个8段数码管显示“0”一“F"16个十六进制的数字。当系统上电时,显示“0"oI1键的作用是加“1"控制键:按1次K1键,显示数字加1,依次类推。当第15次按K1键时,显示“F",第16次按K1键,显示又从“0”开始。K2键的作用是减1控制键:按1次K1键,显示数字减1,减到“0”后,再从“F”开始下一页返回第九节实例6按键

控制的1位LED数码管显示2.硬件电路如图4一6所示为本实例的硬件电路3.软件编写

本实例的显示控制非常简单,主要是说明如何编写中断服务程序和掌握外部中断的基本使用方法。下面给出实例的实现代码上一页下一页返回第九节实例6按键

控制的1位LED数码管显示上一页下一页返回第九节实例6按键

控制的1位LED数码管显示上一页下一页返回第九节实例6按键

控制的1位LED数码管显示

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论