1、中断控制应用中断控制应用【知识目标知识目标】l了解单片机系统中断系统的概念l学会与外部中断系统有关的寄存器的功能【能力目标能力目标】l掌握与外部中断系统有关的寄存器的设置方法l掌握中断服务子程序的结构及基本编程方法l掌握简单中断应用系统的程序编写、调试方法 一、中断的基本概念日常生活中的中断日常生活中的中断 你在看书,电话铃响,你在看书,电话铃响,于是你在书上做上记号,于是你在书上做上记号,去接电话,与对方通话;去接电话,与对方通话;门铃响了,有人敲门,你门铃响了,有人敲门,你让打电话的对方稍等一下,让打电话的对方稍等一下,你去开门,并在门旁与来你去开门,并在门旁与来访者交谈,谈话结束,关访者
2、交谈,谈话结束,关好门;回到电话机旁,继好门;回到电话机旁,继续通话,接完电话后再回续通话,接完电话后再回来从做记号的地方接着看来从做记号的地方接着看书。书。看看 书书接接电电话话与与来来访访者者交交谈谈电话铃响敲门声看看 书书接接电电话话任务一 项目知识点学习计算机中的中断概念计算机中的中断概念l中断中断由于某一随机事件的发生,由于某一随机事件的发生,计算机计算机CPU暂停原程序的运行,转去暂停原程序的运行,转去执行另一程序(随机事件),处理完执行另一程序(随机事件),处理完毕后又自动返回原程序继续运行。毕后又自动返回原程序继续运行。l主程序主程序计算机现行运行程序。计算机现行运行程序。l中
3、断源中断源引起中断的原因,或能发引起中断的原因,或能发生中断申请的来源。生中断申请的来源。l中断服务子程序中断服务子程序处理随机事件的处理随机事件的程序。程序。主程序主程序主程序主程序中中断断服服务务程程序序1中中断断服服务务程程序序1中中断断服服务务程程序序2随机事件随机事件1随机事件随机事件2断点断点1断点断点2l分时操作。l实时控制。l故障处理。采用中断的优点采用中断的优点中断的优先级及嵌套中断的优先级及嵌套主程序主程序主程序主程序低低级级中中断断服服务务程程序序低低级级中中断断服服务务程程序序高高级级中中断断服服务务程程序序随机事件随机事件1随机事件随机事件2断点断点1断点断点21、中
4、断源中断源是指能够向单片机发出中断请求信号的部件和设备。AVR单片机具有丰富的中断源,ATmega16单片机有21个中断源,如表4-1所示。2、中断向量中断源发出的请求信号被CPU检测到之后,如果单片机的中断控制系统允许响应中断,则CPU会自动转移,执行一个固定的程序空间地址中的指令。这个固定的地址称为中断入口地址,也称中断向量。中断入口地址通常是由单片机内部硬件决定的。ATmega16单片机的中断向量如4-1 所示。二、中断源和中断向量中断服务程序的转入中断服务程序的转入中断服务子程序入口地址也称为中断向量中断向量或中断矢量中断矢量。单片机中的中断入口地址是固固定定的,不能改动。单片机中的中
5、断源不同中断服务程序的入口地址也不同。RESET是系统复位中断,为非非屏蔽中断。屏蔽中断。上电和看门狗复位上电和看门狗复位外部中断外部中断0 0外部中断外部中断1 1T/C2T/C2比较匹配中断比较匹配中断写程序存取器准备写程序存取器准备好中断好中断程序存储器程序存储器使用时,通常在这些入口地址处存放使用时,通常在这些入口地址处存放一条跳转指令,使程序跳转到用户安一条跳转指令,使程序跳转到用户安排的中断服务程序起始地址上去!排的中断服务程序起始地址上去!0002H0002H0004H0004H0006H0006H0028H0028H0000H0000H0000H0000H1、中断的优先级AVR
6、单片机中,一个中断在中断向量区中的位置决定了其优先级,位于低地址的中断优先级高于高地址的中断。对于ATmega16单片机,复位中断RESET具有最高优先级具有最高优先级,外部中断INT0其次,SPM_RDY(保存程序存储器保存程序存储器内容就绪内容就绪)的中断优先级最低的中断优先级最低。三、中断控制与响应过程2、中断管理及中断标志AVR有两种不同的中断:带有中断标志位有中断标志位的中断的中断和不带中断标志的位的中断不带中断标志的位的中断。(低电平触发的外部中断)。AVR对中断采用两级控制方式,有一个总总的中断允许控制位(的中断允许控制位(SREG中的I标志位SREG.7),同时每一个中断源都设
7、置了独立独立的中断允许控制位的中断允许控制位(在各中断源所属模块的控制寄存器中)。三、中断控制与响应过程3、中断嵌套由于AVR在响应一个中断的过程中,通过硬件自动将I标志位清标志位清0,这样就阻止了MCU响应其它的中断,因此,在通常情况下AVR是不能实现中断嵌套的,如果系统中必须要有中断嵌套的应用,可以在中断服务程序中使用指令中断服务程序中使用指令将全局中断允许位打开将全局中断允许位打开,以间接的方式实现中断的嵌套。三、中断控制与响应过程3、中断嵌套由于AVR在响应一个中断的过程中,通过硬件自动将I标志位清标志位清0,这样就阻止了MCU响应其它的中断,因此,在通常情况下AVR是不能实现中断嵌套
8、的,如果系统中必须要有中断嵌套的应用,可以在中断服务程序中使用指令中断服务程序中使用指令将全局中断允许位打开将全局中断允许位打开,以间接的方式实现中断的嵌套。三、中断控制与响应过程4、中断响应过程当一个中断满足响应条件后,MCU便可以执行中断响应。三、中断控制与响应过程主程序主程序主程序主程序中中断断服服务务程程序序随机事件中断服务子程序的入口地址入口地址主程序断点地址断点地址中中断断响响应应断断中中返返回回 中断条件满足中断条件满足全局中断标志全局中断标志I清零,禁止其它中断清零,禁止其它中断PC自动装入中断入口地址自动装入中断入口地址中断开始响应,有硬件自动完成 被响应中断标志位清零被响应
9、中断标志位清零断点地址压入堆栈并将堆栈指针减断点地址压入堆栈并将堆栈指针减2执行中断服务程序执行中断服务程序保护现场保护现场中断服务中断服务恢复现场恢复现场断点地址由堆栈弹入断点地址由堆栈弹入PC中断服务程序置位全局中断允许位置位全局中断允许位中断返回硬件自动完成 执行主程序执行主程序l在高级语言的开发环境中,都扩展和提供了相应的编写中断服务程序的方法,通常不必考虑中断现场保护和回复的处理,因为编译器在编译中断服务程序代码时,会在生成的目标代码中自动加入相应的中断现场保护和回复的指令。在本书使用的WinAVR版本下,中断服务例程格式为:ISR(中断向量名称)/中断发生后要执行的语句 四、GCC
10、AVR高级语言下中断服务程序编写外部中断源外部中断的控制五、ATmega16的外部中断外部中断源ATmega16有3个外部中断源:管脚外部中断PD2INT0(外部中断0输入)PD3INT1(外部中断1输入)PB2INT2(外部中断2输入)触发方式触发方式INT0INT0INT1INT1INT2INT2说明说明上升沿触发上升沿触发下降沿触发下降沿触发任意电平触发任意电平触发低电平触发低电平触发外中断的外中断的4种中断触发方式:种中断触发方式:同步边沿触发同步边沿触发中断类型中断类型异步方式方式异步方式方式检测检测ATmega16的外部中断用户可以控制:外部中断的控制lMCUCRMCU控制寄存器l
11、MCUCSRMCU控制和状态寄存器lGICR通用中断控制寄存器lGIFR通用中断标志寄存器lSREG状态寄存器MCU控制寄存器 MCUCR7 6 5 4 3 2 1 0 SM2 SE SM1 ISC01 ISC10 ISC00 ISC11 SM0 位30:外部中断1、0中断请求信号有效方式控制位。外部中断1、0中断请求信号方式:ISCx1ISCx0中断请求信号有效方式ISCx1ISCx0中断请求信号有效方式0 00 0低电平低电平1 10 0下降沿下降沿0 01 1上升沿或下降沿上升沿或下降沿1 11 1上升沿上升沿位74:与外部中断的设置无关。0 000000 0复位值:复位值:MCU控制和
12、状态寄存器 MCUCSR7 6 5 4 3 2 1 0 JTD ISC2 EXTRF BORF PORF WDRF JTRF 位6:外部中断2中断请求信号有效方式控制位。当ISC2清“0”时,INT2引脚上的下降沿信号异步下降沿信号异步触发中断请求;当ISC2置“1”时,INT2引脚上的上升沿信号异步上升沿信号异步触发中断请求。0 000000 0复位值:复位值:当SREG寄存器中的全局中断全局中断I位为位为“1”,且GICR寄存器中相应的中断允许位置1,那么当外部中断触发时,MCU会响应相应的中断请求。通用中断控制寄存器 GICR7 6 5 4 3 2 1 0 INT1 INT0 INT2
13、IVSEL IVCE BIT7:INT1为外部中断1的中断使能位。BIT6:INT0为外部中断0的中断使能位。BIT5:INT2为外部中断2的中断使能位。0 000000 0复位值:复位值:INT0INTF0中断源中断源中断标志位中断标志位 每一个外部中断源都有相应的中断标志位;某一个外部中断源申请中断,相应中断标志位置1。76543210通用中断标志寄存器 GIFR INTF1 INTF0 INTF2 INT1INTF1INT2INTF2中断标志位由CPU自动置“1”当CPU响应中断后,则中断标志位自动 清“0”;也可以通过对其写“1 1”来清“0”0 000000 0复位值:复位值:状态寄
14、存器 SREG7 6 5 4 3 2 1 0 I T H S V N Z C位7:全局中断使能。当该位置“1”时,使能全局中断,单独的中断使能由各自独立控制寄存器所控制。位60:与中断无关,在C语言编程时由系统管理。在GCC AVR C开发系统中,用SEI():设置全局中断使能,对应的C语言语句语言语句为SREG|=0 x80;用CLI()禁止中断,对应SREG&=0 x80;一旦CPU响应中断,I标志位由硬件自动清“0”;当执行中断返回时,I标志位由硬件自动置“1”。0 000000 0复位值:复位值:任务二中断报警控制任务二中断报警控制一、任务要求:一、任务要求:l设计一个报警系统,利用A
15、Tmega16单片机的外部中断源,用开关模拟报警信号,当触发报警时,有蜂鸣器报警。二、硬件电路二、硬件电路LS1SOUNDER开关C122pfC222pfX11MPB0/T0/XCK1PB1/T12PB2/AIN0/INT23PB3/AIN1/OC04PB4/SS5PB5/MOSI6PB6/MISO7PB7/SCK8RESET9XTAL213XTAL112PD0/RXD14PD1/TXD15PD2/INT016PD3/INT117PD4/OC1B18PD5/OC1A19PD6/ICP120PD7/OC221PC0/SCL22PC1/SDA23PC2/TCK24PC3/TMS25PC4/TDO2
16、6PC5/TDI27PC6/TOSC128PC7/TOSC229PA7/ADC733PA6/ADC634PA5/ADC535PA4/ADC436PA3/ADC337PA2/ADC238PA1/ADC139PA0/ADC040AREF32AVCC30U1ATMEGA16R110kC310uF三、程序设计任务任务3 加减计数器设计加减计数器设计一、任务要求:一、任务要求:l设计一个加减计数器,利用ATmega16单片机的两个外部中断源,分别实现加减功能。触发外部中断1时,数码管显示的数据加1,触发外部中断2时,数码管显示的数据减1。PD3 INT1PB2 INT2PB1PB0/RESET二、硬件电
17、路:二、硬件电路:三、软件设计【参考程序】DDRB|=0 x03;/设置PB0和PB1设为输出PORTB|=0 x04;/PB2上拉电阻使能DDRD&=0 xF7;/设置PD3输入PORTD|=0 x08;/PD3上拉电阻使能CLI();/关全局中断GICR|=0 xA0;/INT1和INT2使能MCUCR|=0 x08;/外部中断1下降沿产生中断MCUSR|=0 x40;/外部中断2上降沿产生中断SEI();/开全局中断端口初始化:端口初始化:lAVR单片机的多数型号都有芯片内置的看门狗(watch dog)电路,看门狗电路实际上是一个定时器电路,该定时器采用独立的内部1M的RC振荡器驱动。
18、l根据设置的看门狗定时时间,当程序运行时间超过定时时间后,如果没有及时复位看门狗(就是俗称的“喂狗”),看门狗定时器就会发生溢出(饿死),这个溢出将导致程序的复位,从而保证在程序跑飞的情况下,不会长时间没有响应。任务任务4 看门狗报警看门狗报警l复位看门狗(喂狗)l使能看门狗定时器 l关闭看门狗定时器l定义看门狗定时器溢出时间 基于基于ATmega16内部看门狗操作实验内部看门狗操作实验基于基于ATmega16内部看门狗操作实验内部看门狗操作实验 WINAVR中自带了看门狗操作函数,利用这些函数可以很轻松的实现对AVR单片机内部的看门狗进行控制。如果要使用WINAVR中自带的看门狗操作函数,首
19、先要在程序中包含看门狗操作函数的头文件,使用如下语句即#include 基于基于ATmega16内部看门狗操作实验内部看门狗操作实验1、复位看门狗定时器。程序允许在使能看门狗定时器后,在溢出时间到达之前,调用该函数将看门狗复位。如果在规定时间内不调用此函数,则会发生看门狗溢出,导致程序复位。#define wdt_reset()基于基于ATmega16内部看门狗操作实验内部看门狗操作实验2、使能看门狗定时器,同时设置看门狗溢出时间#define wdt_enable(timeout)基于基于ATmega16内部看门狗操作实验内部看门狗操作实验3、关闭看门狗定时器#define wdt_disa
20、ble()基于基于ATmega16内部看门狗操作实验内部看门狗操作实验4、定义看门狗定时器溢出时间#define WDTO_15MS 0#define WDTO_30MS 1#define WDTO_60MS 2#define WDTO_120MS 3#define WDTO_250MS 4#define WDTO_500MS 5#define WDTO_1S 6#define WDTO_2S 7基于基于ATmega16内部看门狗操作实验内部看门狗操作实验一、任务要求:一、任务要求:l利用ATmega16单片机内部的看门狗定时器,设计一个单片机抗干扰应用系统。当霓虹灯显示系统启动时,8个LED等短暂闪烁,正常运行后8个LED循环点亮,由外部按键触发模拟干扰源(停止喂狗,LED不正常点亮),系统自动重新启动进入正常运行状态。二、硬件电路三、程序设计【项目实施】1.根据元器件清单选择合适的元器件。2.根据硬件设计原理图,在万能电路板进行元器件布局,并进行焊接工作。3.焊接完成后,重复进行线路检查,防止短路、虚接现象。4.在AVR Studio软件中创建项目,输入源代码并生成*.hex文件。5.在确认硬件电路正确的前提下,通过JTAG仿真器进行程序的下载与硬件在线调试。