您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 其它行业文档 > Atmega16中断(dhl)
中断、定时器知识回顾与新课引入C语言的控制流?单片机开发程序的一般结构和程序执行顺序?C语言中函数的定义和调用规则?当我们在做某事时,电话或门铃响了,我们会如何处理和回应?外部中断及应用中断原理ATmage16的外部中断外部中断应用中断原理单片机中断的概念中断的功能中断源中断的检测与中断的响应条件CPU对中断的响应ATmega16的中断系统中断的概念CPU在处理某一事件A时,发生了另一事件B请求CPU迅速去处理(中断发生);CPU暂时中断当前的工作,转去处理事件B(中断响应和中断服务);待CPU将事件B处理完毕后,再回到原来事件A被中断的地方继续处理事件A(中断返回),这一过程称为中断。AVR单片机的中断系统结构执行主程序主程序继续执行主程序断点中断请求中断响应执行中断处理程序中断返回引起CPU中断的根源,称为中断源。中断源向CPU提出的中断请求。CPU暂时中断原来的事务A,转去处理事件B。对事件B处理完毕后,再回到原来被中断的地方(即断点),称为中断返回。实现上述中断功能的部件称为中断系统(中断机构)。主程序A响应返回断点RETI……中断服务程序BI/O端口的第二功能中断的功能中断技术在单片机上能实现很多的功能,它们主要包括:●实现单片机与低速外设的配合由于许多外设的速度较慢,无法与单片机实现直接的数据交换,因此,必须采用中断功能来协调单片机与外设的速度,当单片机在执行程序的过程中,如要进行数据的输入/输出操作,则单片机先发一个命令给外设,然后单片机继续执行程序,当外设为数据交换做好准备以后,它向单片机发出中断请求,这时,单片机暂时中止正在执行的程序,转而执行中断服务程序中的数据输入/输出程序,数据交换完成后,单片机再返回继续执行原来的程序。由此可见,中断技术实现了单片机与外设的速度配合,提高了单片机的工作效率,也提高了数据交换的效率。●实时控制功能所谓实时控制就是单片机能及时完成对受控对象的测量、计算、分析和控制,从而使受控对象保持良好的工作状态,并达到系统的使用要求。单片机的中断技术使控制参量能随时向计算机发出中断请求,以完成对数据的及时处理,因此它是单片机实现实时控制功能的一个必然要求。●实现故障的及时发现计算机在运行过程中,常会突然发生一些事先无法预料的故障。如:硬件故障、运算错误及程序故障。有了中断技术,计算机就能对这些故障及时发现并进行自行处理。●实现人机联系人们想对运行的计算机进行干预,必须先通过键盘发出中断请求,在获得了机器准许后,方可进行。中断技术使得人们可以随时进行人机联系,而不用先停机处理,然后再重新开机。中断源●外部中断AT90LS8535单片机的外部中断请求由外设发出。外设可通过在PD2、PD3上施加低电平、下降沿脉冲或上升沿脉冲触发该中断。●定时/计时器中断定时/计时器中断发生在单片机内部的3个定时/计时器上,当某个定时/计时器的计数值溢出、输出比较器匹配或输入捕获事件发生,且相应的控制寄存器被设置为中断允许时,单片机响应中断。●串行口中断串行口中断是为串行数据的发送或接收设置的。每当串行口发送或接收完一个串行数据帧时,其相应的状态位被置位。如果此时该类型的中断为允许,则单片机响应该中断。●模数转换完成中断AT90LS8535单片机的模数转换完成中断用于标识单片机内部的模数转换器。当模数转换器的一次模数转换及数据更新完成时,ADIF置“1”,若此时ADIE(ADC中断使能位)和全局中断使能位都为“1”,则该中断被响应。●EEPROM中断•EEPROM中断是为AT90LS8535单片机内部的EEPROM写操作设置的,当EEPROM准备好,且EERIE(EEPROM准备好中断使能)和全局中断使能都为“1”,则该中断被响应。●模拟比较器中断模拟比较器中断发生在单片机的模拟比较器的输出发生变化时,这种变化可以是一个上升沿,可以是一个下降沿,也可以是一个电平变化,用户可以通过其控制寄存器和状态寄存器(ACSR)来设置。中断的检测与中断的响应条件设置中断请求触发器设置中断屏蔽触发器总中断是开放的CPU在现行指令结束后响应中断设置中断请求触发器每一个中断源,要能发出中断请求信号,且这个信号能保持着,直到CPU响应这个中断后,才可清除中断请求。设置中断屏蔽触发器实际应用系统中,往往有多个中断源,每一个中断源的中断请求是否能发送至CPU,由各自的中断屏蔽触发器决定。只有当此触发器为1时,中断请求才能被送至CPU。总中断是开放的在CPU内部有一个中断允许触发器。只有当其为1时CPU才能响应中断;若其为0,即使有中断请求,CPU也不响应。该触发器的状态可由指令设置,称为总中断开关。CPU在现行指令结束后响应中断在开中断情况下,若外设有中断请求,CPU也并不是立即响应,只有当正在执行的指令运行至最后一个机器周期的最后一个状态时,CPU才采样中断请求信号线。若发现有中断请求,则把内部的中断锁存器置1,然后下一个机器周期进入中断周期,执行中断服务程序。CPU对中断的响应现场保护中断服务程序现场恢复单片机检测到外设或内部的中断请求以后,要执行一些特定的操作,然后再转去执行中断服务程序,中断服务完成以后,单片机还必须更改一些寄存器的内容才可以返回到原有程序。详细的中断处理过程如下:现场保护由于中断服务程序的执行会破坏单片机内某些寄存器的内容,因此,为了避免中断服务程序完成后影响原有程序的执行,单片机必须要将有关寄存器的内容压入椎栈,也就是必须进行现场保护。中断服务程序中断服务程序是对中断进行处理的一个子程序。现场恢复中断服务程序完成以后,为了使单片机返回到主程序中继续执行,单片机必须将现场保护时保存下来的内容从堆栈中弹出至相应的寄存器,也即现场恢复。ATmega16的外部中断外部中断源外部中断源的控制外部中断源ATmega16有3个外部中断源,分别对应PD2、PD3和PB2引脚外部中断源PD2INT0(外部中断0输入)PD3INT1(外部中断1输入)PB2INT2(外部中断2输入)●状态寄存器(SREG)●通用中断控制寄存器(GICR)●MCU控制寄存器(MCUCR)●MCU控制和状态寄存器(MCUCSR)●通用中断标志寄存器(GIFR)ATmega16的外部中断用户是可编程的。与外部中断有关的控制寄存器为:状态寄存器——SREG位7(I):全局中断使能位6~位0:与中断无关,在C语言编程时由系统管理在CodeVisionAVR编译软件中,用#asm(“sei”)汇编语句设置全局中断使能。通用中断控制寄存器——GICRMCU控制寄存器——MCUCR位3~位0:外部中断INT0、INT1的中断触发方式控制位。MCU控制寄存器中的低4位用于选择INT0、INT1的中触发方式ISCX1ISCX0中断触发方式00低电平01下降沿和上升沿10下降沿11上升沿MCU控制和状态寄存器——MCUCSR位6:外部中断INT2的中断触发方式控制位。当ISC2置“0”时,INT2引脚上的一个下降沿将触发中断;当ISC2置“1”时,INT2引脚上的一个上升沿将触发中断。通用中断标志寄存器——GIFR外部中断应用ICC中的中断的应用:它接受如下的附注:#pragmainterrupt_handlerfunc1:vectornumberfunc2:vector….这个附注必须在函数之前定义,它说明func1,func2是中断操作函数,所以编译器在中断操作函数中生成中断返回指令reti来代替普通返回指令ret,并且保存和恢复函数所使用的全部寄存器同样编译器根据中断向量号vectornumber生成中断向量地址。#pragraminterrupt_handlerint0_isr:2voidint0_isr(void){//externalinterruptonINT0i++;}#pragraminterrupt_handlerint1_isr:3voidint1_isr(void){//externalinterruptonINT1PORTA=0x01l}CVAVR编译器的中断操作:CVAVR的C编译器支持在C源程序中直接开发中断程序。当用户使用该功能时,必须在中断服务子程序定义之前用“interrupt”语句通知编译器,该子程序是一个中断操作。用“interrupt”语句定义中断服务子程序的格式为:interrupt[中断向量号或中断向量号的宏定义]voidhandler(中断函数名)(void)其中,中断函数名为用户定义的中断服务子程序的名称,而中断向量号则用于表明中断的类型。例如:interrupt[2]voidint_0(void){……}interrupt[EXT_INT0]voidint_0(void){……}例1:开放INT0、INT1,并将INT0设置为上升沿触发中断、INT1设置为上降沿触发中断。#includemega16.hvoidmain(void){DDRD.2=0;DDRD.3=0;GICR=0xc0;MCUCR=0b00001011;GIFR=0xc0;SREG=0x80;while(1);}文件头设置引脚PD2方向为输入设置引脚PD3方向为输入INT0、INT1中断使能设置INT0为上升沿触发,INT1下降沿触发清INT0、INT1的中断标志位开放全局中断使能函数框架例2:编程实现:上电时LED不显示,INT0发生后,LED显示“0”;INT1发生后,LED显示“1”编程思路:开放INT0、INT1,并设置为边沿触发方式,在程序设计中,可以采用:中断法查询法#includemega16.h//中断服务程序interrupt[EXT_INT0]voidint0(void){PORTB=0x3f;}interrupt[EXT_INT1]voidint1(void){PORTB=0x06;}用中断法实现题目要求INT0发生后,今LED显示“0”INT1发生后,今LED显示“1”voidmain(void){DDRD.2=0;PORTD.2=1;DDRD.3=0;PORTD.3=1;DDRB=0xff;DDRD.0=1;GICR=0xc0;MCUCR=0b00001010;GIFR=0xc0;SREG=0x80;while(1);}用中断法实现题目要求设置引脚PD2方向为输入设置引脚PD3方向为输入设置PB口方向为输出设置引脚PD0方向为输出INT0、INT1中断使能设置INT0、INT1均为下降沿触发清INT0、INT1的中断标志位开放全局中断使能voidmain(void){DDRD.2=0;PORTD.2=1;DDRD.3=0;PORTD.3=1;DDRB=0xff;DDRD.0=1;MCUCR=0b00001010;GIFR=0xc0;while(1){if((GIFR&0x80)!=0)PORTB=0x06,GIFR=0x80;if((GIFR&0x40)!=0)PORTB=0x3f,GIFR=0x40;}}用查询法实现题目要求设置引脚PD2方向为输入设置引脚PD3方向为输入设置PB口方向为输出设置引脚PD0方向为输出设置INT0、INT1均为下降沿触发查询INT1的标志位,如置位则令LED显示“1”,并清标志位查询INT0的标志位,如置位则令LED显示“0”,并清标志位清INT0、INT1的中断标志位中断法和查询法的特点及差别:中断法特点:▲需要开放中断的“总开关”和“分开关”;▲中断响应速度快;▲需要定义中断服务程序才能进行相关处理。▲不需要软件清中断标志位查询法特点:▲不需要开放中断的“总开关”和“分开关”;▲标志位检测不及时,因而响应速度慢;▲不需要定义中断服务程序也能进行相关处理。▲需要软件清中断标志位(写“1”清零)应用课题:设计一段程序,用于统计INT0的中断次数voidmain(void){DDRD.2=0;DDRC=0xff;GICR=0x40;MCUCR=0b00000010;GIFR=0x40;SREG=0x80;while(1){PORTC.2=!PORTC.2
本文标题:Atmega16中断(dhl)
链接地址:https://www.777doc.com/doc-2899008 .html