Atmega16中断学习资料

合集下载

atmege16外部中断程序

atmege16外部中断程序

atmege16外部中断程序/****************************************** 功能:演示ATMEGA16的3个外部中断程序编辑环境:ICCAVR******************************************/#include<iom16v.h>#include<macros.h>#define uint unsigned int#define uchar unsigned char#define beep_0 (PORTD&=~(1<<PD7)) #define beep_1 (PORTD|=(1<<PD7))//蜂鸣器响uint count;/******************************************* 三个外部中断声明,注意中断向量号*******************************/#pragma interrupt_handler Exint0:2#pragma interrupt_handler Exint1:3#pragma interrupt_handler Exint2:19/*************************************系统延时函数************************************/void delay(uint ms){uint i,j;for(i=0;i<ms;i++){for(j=0;j<1140;j++);}}/**************************************端口初始化每个外部中断端口是固定的****************************************/void port_init(){DDRA=0XFF;PORTA=0XFF;DDRB&=(0<<PB2);//INT2PORTB|=(1<<PB2);DDRD&=(0<<PD2);//INT0PORTD|=(1<<PD2);DDRD&=(0<<PD3);//INT1PORTD|=(1<<PD3);}/***********************************外部中断初始化*******************************/void INT_init(){SREG=0X80;//打开全局中断GICR|=(1<<INT0)|(1<<INT1)|(1<<INT2);//三个中断使能MCUCR=(1<<ISC11)|(0<<ISC10)|(1<<ISC01)|(0<<ISC00);//I NT0,INT1下降沿触发MCUCSR=(0<<ISC2);//INT2下降沿触发中断}/***************************************** 流水灯函数****************************************/ void LED_1(){uchar i;for(i=0;i<8;i++){PORTA=~BIT(i);delay(200);}}/*********************************** LED_2函数**********************************/void LED_2(){PORTA=0X0F;delay(500);PORTA=0XF0;delay(500);}/********************************LED_3函数************************************/ void LED_3(){PORTA=0X81;delay(500);PORTA=0X7E;delay(500);}/************************************ 外中断0函数**********************************/ void Exint0(){LED_2();}/********************************** 外中断1函数***********************************/ void Exint1(){LED_3();}/************************外中断2函数***********************/void Exint2(){DDRD=(1<<PD7);for(count=0;count<4;count++) {beep_0;delay(200);beep_1;delay(200);}}/********************************* 主函数*********************************/ void main(){port_init();//端口初始化INT_init();//中断初始化while(1)// 当非0值时执行下面函数{LED_1();//流水灯函数}}。

第4章avrmega16单片机中断实例

第4章avrmega16单片机中断实例

• 4) 中断嵌套
在中断发生后,SREG的I位由硬件清除,并由 RETI(中断返回)指令置位,从而允许子序列的中断响应。
由于 AVR 在响应一个中断的过程中通过硬件将 I 标志 位自动清零,这样就阻止了 MCU响应其它中断。因此通 常情况下,AVR 是不能自动实现中断嵌套的。 如要系统中必须要实现中断嵌套的应用,用户可在中 断服务程序中使用指令将全局中断允许位开放,通过间接 的方式实现中断的嵌套处理。
1) MCU 控制寄存器—MCUCR
• MCU 控制寄存器 MCUCR 的低 4 位为 INT0(ISC01、 ISC00)和 INT1(ISC11、ISC10)中断触发类型控制位。
2)MCU 控制和状态寄存器—MCUCSR
• MCU 控制和状态寄存器 MCUCSR 中的第6位(ISC2) 为 INT2 的中断触发类型控制位。
void main(void) { PORTA=0xFF; DDRA=0xFF; PORTD|=0x0C; DDRD|=0x00; //DDRD.3=0;DDRD.2=0; GICR|=0xC0; MCUCR=0x0A; MCUCSR=0x00; GIFR=0xC0; //清除INT0、INT1中断标志位 #asm("sei") //SREG|=0x80; SREG.7=1; while (1) { PORTA=led_7[counter]; } }
4) 通用中断标志寄存器—GIFR
• 注意:用户可以使用指令将 INTFn 清除,清除的方式是 写逻辑“1”到 INTFn,将标志清零。另外, 当INT0 (INT1) 设置为低电平触发方式时, 标志位 INTF0 (INTF1) 始终为“0”,这并不意味着不产生中断请求, 而是低电平触发方式是不带中断标志类型的中断触发。在 低电平触发方式时,中断请求将一直保持到引脚上的低电 平消失为止。 • 而在开放中断允许前,一般应通过向 GIFR 寄存器中的中 断标志位 INTFn 写入逻辑“1” ,将该中断的中断标志位 清除,然后开放中断。这样可以防止在改变ISCn 的过程

ATMEGA16 中断GCC模式

ATMEGA16 中断GCC模式

AVR单片机中断实现ATmega16 INT ISR(INT0_vect)内容来源:本站发布时间:[2010-11-28]查看次数:42332.21 实例功能前面例子中分别介绍了按键控制发光二极管的亮灭,但是我们注意到,在程序中需要一直检测按键的状态,这样明显的浪费了单片机的资源,降低了单片机的工作效率,。

那么有没有一种方法可以让单片机不用一直检测按键的状态,而只在有按键动作时才去响应呢?当然有!单片机中除了具有基本输入输出功能的作用外,还有专门检测外界信号并作出响应的中断系统。

在本例中,通过利用外部中断实现单片机对按键事件的响应和处理。

本例中三个功能模块描述如下:● 单片机系统:对按键事件产生的中断时间作出响应,并在数码管上显示按键按下的次数。

● 外围电路:通过将按键连接到单片机的外部中断检测端口,实现中断产生电路,数码管显示电路用于指示按键的按下状态。

● 软件程序:编写AVR单片机的外部中断服务程序,从而实现对中断事件的响应。

2.2.2 器件和原理1单片机的中断系统关于中断的概念可以在一般的教材中找到,本例中只做简要叙述,不再详细说明。

中断属于一种对事件的实时处理过程。

中断源可能随时停止单片机当前正在处理的工作,转而去处理中断事件,待中断时间处理完毕之后,再返回原来工作的断点处,继续原来的工作。

对于单片机的中断系统,需要了解这几个概念:中断源、中断信号、中断向量、中断优先级、中断嵌套、中断控制(屏蔽)、中断响应条件、中断响应过程(中断服务程序)。

●中断源中断源是指能够向单片机发出中断请求信号的部件和设备。

对于单片机来讲,往往存在多个中断源。

中断源一般可分为内部中断源和外部中断源。

单片机内部集成的许多功能模块,如定时器、串行通讯口、模/数转换器等,它们在正常工作时往往无需CPU参与,而当处于某种状态或达到某个规定值需要程序控制时,会通过发出中断请求信号通知CPU。

这一类的中断源位于单片机内部,称作内部中断源。

Atmega16中断

Atmega16中断

应用课题:设计一段程序,用于统计INT0的 中断次数
主程序
void main(void) { 设置引脚PD2方向为输入 DDRD.2=0; 设置PC口方向为输出 DDRC=0xff; INT0中断使能 GICR=0x40; 设置INT0为下降沿触发 MCUCR=0b00000010; 清INT0的中断标志位 GIFR=0x40; 开放全局中断使能 SREG=0x80; while(1) { PD2引脚输出方波, PORTC.2=! PORTC.2; 作为外部中断信号 delay_ms(500); }
中断法和查询法的特点及差别:
中断法特点: ▲ 需要开放中断的“总开关”和“分开关”; ▲ 中断响应速度快; ▲ 需要定义中断服务程序才能进行相关处理。 ▲ 不需要软件清中断标志位 查询法特点: ▲ 不需要开放中断的“总开关”和“分开关”; ▲ 标志位检测不及时,因而响应速度慢; ▲ 不需要定义中断服务程序也能进行相关处理。 ▲ 需要软件清中断标志位(写“1”清零)
interrupt [中断向量号或中断向量号的宏定义] void handler(中断函数名) (void) 其中,中断函数名为用户定义的中断服务子程序的名称,
而中断向量号则用于表明中断的类型。
例如: interrupt [2] void int_0 (void) { …… } interrupt [EXT_INT0] void int_0 (void) { …… }
通用中断标志寄存器——GIFR
∫5.3 外部中断应用
CVAVR编译器的中断操作:
CVAVR 的C编译器支持在C源程序中直接开发中断程序。当 用户使用该功能时,必须在中断服务子程序定义之前用 “interrupt”语句通知编译器,该子程序是一个中断操作。

ATmega16_之_AD转换与ADC中断程序

ATmega16_之_AD转换与ADC中断程序
9
1、ATmega16内部ADC特点
• ADC 模块包括一个预分频器,可以由任何超过 100 kHz 的 CPU 时钟来产生可接受的 ADC 时钟 。预分频器通过 ADCSRA 寄存器的 ADPS 进行 设置。置位 ADCSRA 寄存器的 ADEN 将使能 ADC,预分频器开始计数。只要 ADEN 为1,预 分频器就持续计数,直到 ADEN 清零。
• Bit 4 – ADIF: ADC 中断标志
- 在 ADC 转换结束,且数据寄存器被更新后,ADIF 置位。如果ADIE 及 SREG 中的全局中断使能位 I 也置位,ADC 转换结束中断服务程 序即得以执行,同时 ADIF 硬件清零。此外,还可以通过向此标志写 1 来清 ADIF。要注意的是,如果对 ADCSRA 进行读-修改-写操作 ,那么待处理的中断会被禁止。
14
3、ADC转换结果
• 转换结束后( ADIF 为高 ),转换结果被存入ADC 结果寄存器( ADCL, ADCH )。
• 单次转换的结果如下( VIN 为被选中引脚的输入 电压):
15
3、ADC转换结果
• 如果使用差分通道,结果(用2 的补码形式表示):
16
• 差分测量范围:
3、ADC转换结果
• ADC 包括一个采样保持电路 • ADC 由 AVCC 引脚单独提供电源。AVCC与VCC
之间的偏差不能超过± 0.3V。
8
1、ATmega16内部ADC特点
• 逐次逼近电路需要一个从 50 kHz 到 200 kHz 的 输入时钟以获得最大精度(所需的转换精度低于 10 比特时输入时钟频率可以高于 200 kHz)
10
1、ATmega16内部ADC特点
• ADCSRA 寄存器的 ADSC 置位后,单端转换在 下一个 ADC 时钟周期的上升沿开始启动。

第07章 ATM16的中断系统应用PPT课件

第07章   ATM16的中断系统应用PPT课件
2、对于一些条件触发型中断(如低电平触发的外部中断)来 讲,它们不置位有中断标志位,在中断条件成立时,将一直不 断的向MCU申请中断,如果在中断允许响应前,中断条件由成 立状态变成不成立状态,该中断即宣告终止了。
第9章 编译器和集成开发环境
广西大学电气工程学院
mega16的中断向量表(3)
向量 序号
15 16 17 18 19 20 21
中断向量 中断源代码 flash 地址
$001C $001E $0020 $0022 $0024 $0026 $0028
ADC EE-RDY ANA-COMP TWI INT2 TIMER0 COMP SPM-RDY
第9章 编译器和集成开发环境
广西大学电气工程学院
中断返回:
三、中断返回:
在中断子程序的最后,安排一条中断返回指令(RETI), 将堆栈内保存的进入中断时被中断的程序位置值弹出。并自 动开启全局中断标志位I,以便CPU能响应新的中断请求。
在C编译器中,中断返回与恢复现场和保护现场一样,不 需要用户编写完成。
2、GICR---通用中断控制寄存器: 3、GIFR---通用中断标志寄存器: 4、MCUCR---微控制器控制寄存器: 5、MCUSCR ---微控制器状态与控制寄存器:
第9章 编译器和集成开发环境
广西大学电气工程学院
GICR--通用中断控制寄存器
Bit
765 4 3 2 1 0
INT1 INT0 - - - - IVSEL IVCE GICR
第9章 编译器和集成开发环境
广西大学电气工程学院
外中断1 触发方式控制
ISC11 ISC10 说明
0
0 INT1为低电平时产生中断请求

4.ATmega16中断系统

4.ATmega16中断系统

编 译 开 关
关键字
Байду номын сангаас
自定义 函数名
函数名
中断源中断服务 程序主体
四、中断系统 6、中断应用编程
编程步骤: (1)确定中断源(内部中断,外部中断) (2)如是INT中断还得设定外部中断触发方式 MCUCR——INT0,INT1; MCUCSR——INT2; (3)开放可屏蔽中断源(打开中断开关) SREG.7——中断总开关; GICR ——中断源开关 (4)编写中断事件函数
四、中断系统 4、外部中断
INT0、INT1和INT2 3个外部中断源,分别由芯片外部引 脚PD2、PD3、PB2上的电平的变化或状态作为中断触发信号。 其中,INT0和INT1支持4种中断触发方式,INT2支持2种。
四、中断系统 4、外部中断
特 点: ●低电平触发是不带中断标志类型的,只要PD2或PD3保持低 电平,一直会产生中断申请。������ ● MCU对INT0和INT1的引脚上的上升沿或下降沿变化的识别 (触发),需要I/O时钟信号的存在(由I/O时钟同步检测 ),属于同步边沿触发的中断类型。������ ● MCU对INT2的引脚上的上升沿或下降沿变化的识别(触发 ),以及低电平的识别(触发)是通过异步方式检测的, 不需要I/O时钟信号。因此,这类触发类型的中断经常作为 外部唤醒源。������
四、中断系统 5、中断寄存器
在ATmega16中,除了寄存器SREG中的全局中断允许标 志位I外,与外部中断有关的寄存器有4个,共有11个标 志位。其作用分别是: ●3个外部中断中断标志位, ● 3个中断允许控制位 ● 用于定义外部中断的触发类型。
(1)中断控制寄存器——MCUCR
四、中断系统 5、中断寄存器

AT mega系列单片机原理及应用第4章 ATmega 单片机的中断系统及定时器

AT mega系列单片机原理及应用第4章 ATmega 单片机的中断系统及定时器
• 在CPU内部有一个中断允许触发器。只有当其为 “1”时,CPU才能响应中断;若其为“0”,即使 INTR线上有中断请求,CPU也不响应。而这个触 发器的状态可由软件指令来改变。当CPU复位时, 中断允许触发器为“0”,所以必须要用软件指令 来开中断。当中断响应后,CPU就自动关中断, 所以在中断服务程序中也必须要用软件指令来开 中断。CPU在现行指令结束后即响应中断。
告终止了。
4.1.2 外部中断
• 外部中断通过引脚INT0,INT1(ATmega16L多一 个INT2外部中断)触发。即使引脚INT0,1配置 为输出,只要电平发生了合适的变化,中断也会 触发。这个特点可以用来产生软件中断。通过设 置MCU控制寄存器MCUCR,中断可以由下降沿、 上升沿,或者是低电平触发。

GICR = 0x40;//开启中断0使能

//}}WIZARD_MAP(External IRQ)
•}
• SIGNAL(SIG_INTERRUPT0)//外部中断0程序
•{

uint k;//设置变量k来记录中断的次数

// TODO: Add your code here
• k++;
•}
4.2 定时器/计数器的使用方法
• 中断源基本上分为两种类型的中断:一类是时间 触发型中断,另一类是条件中断,对于时间触发 类中断(如时钟、计数、比较等),一旦事件产 生后会将相应的中断标志位置位,申请中断处理, 当MCU响应中断,跳转到实际中断向量,开启相 应的中断处理程序时,硬件自动清除对应的中断 标志,这些中断标志位也可通过软件写“1”来清 除。
-
-
-
-
-
GIFR
R/W R/W
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
知识回顾与新课引入
C语言的控制流? 单片机开发程序的一般结构和程序执行 顺序? C语言中函数的定义和调用规则? 当我们在做某事时,电话或门铃响了, 我们会如何处理和回应?
外部中断及应用
中断原理 ATmage16的外部中断 外部中断应用
中断原理
单片机中断的概念 中断的功能 中断源 中断的检测与中断的响应条件 CPU对中断的响应 ATmega16的中断系统
CPU对中断的响应
单片机检测到外设或内部的中断请求以后,要执行一些特定的 操作,然后再转去执行中断服务程序,中断服务完成以后,单 片机还必须更改一些寄存器的内容才可以返回到原有程序。详 细的中断处理过程如下:
现场保护 中断服务程序 现场恢复
现场保护
由于中断服务程序的执行会破坏单片机内某些寄存器的内容, 因此,为了避免中断服务程序完成后影响原有程序的执行, 单片机必须要将有关寄存器的内容压入椎栈,也就是必须进 行现场保护。
ATmega16有3个外部中断源,分别对应PD2、PD3 和PB2,如表5-2所示。
引脚 PD2 PD3 PB2
外部中断源 INT0(外部中断0输入) INT1(外部中断1输入) INT2(外部中断2输入)
ATmega16的外部中断用户是可编程的。与外部中断有关的 控制寄存器为:
● 状态寄存器(SREG) ● 通用中断控制寄存器(GICR) ● MCU控制寄存器(MCUCR) ● MCU控制和状态寄存器(MCUCSR) ● 通用中断标志寄存器(GIFR)
人们想对运行的计算机进行干预,必须先通过键盘发出中断请求,在获得 了机器准许后,方可进行。中断技术使得人们可以随时进行人机联系,而 不用先停机处理,然后再重新开机。
中断源
● 外部中断 AT90LS8535单片机的外部中断请求由外设发出。 外设可通过在PD2、PD3上施加低电平、下降沿脉冲或上升沿脉冲触发 该中断。 ● 定时/计时器中断 定时/计时器中断发生在单片机内部的3个定时/计时器上,当某个定时/ 计时器的计数值溢出、输出比较器匹配或输入捕获事件发生,且相应 的控制寄存器被设置为中断允许时,单片机响应中断。 ● 串行口中断 串行口中断是为串行数据的发送或接收设置的。每当串行口发送或接 收完一个串行数据帧时,其相应的状态位被置位。如果此时该类型的 中断为允许,则单片机响应该中断。
在CPU内部有一个中断允许触发器。只有当其为1时CPU才能响 应中断;若其为0,即使有中断请求,CPU也不响应。该触发器 的状态可由指令设置,称为总中断开关。
CPU在现行指令结束后响应中断
在开中断情况下,若外设有中断请求,CPU也并不是立即响应, 只有当正在执行的指令运行至最后一个机器周期的最后一个状 态时,CPU才采样中断请求信号线。若发现有中断请求,则把 内部的中断锁存器置1,然后下一个机器周期进入中断周期,执 行中断服务程序。
● 模拟比较器中断
模拟比较器中断发生在单片机的模拟比较器的输出发生变化时,这 种变化可以是一个上升沿,可以是一个下降沿,也可以是一个电平 变化,用户可以通过其控制寄存器和状态寄存器(ACSR)来设置。
中断的检测与中断的响应条件
设置中断请求触发器 设置中断屏蔽触发器 总中断是开放的 CPU在现行指令结束后响应中断
设置中断请求触发器
每一个中断源,要能发出中断请求信号,且这个信号能保持着, 直到CPU响应这个中断后,才可清除中断请求。
设置中断屏蔽触发器
实际应用系统中,往往有多个中断源,每一个中断源的中断请 求是否能发送至CPU,由各自的中断屏蔽触发器决定。只有当 此触发器为1时,中断请求才能被送至CPU。
总中断是开放的
中断服务程序
中断服务程序是对中断进行处理的一个子程序。
ห้องสมุดไป่ตู้
现场恢复
中断服务程序完成以后,为了使单片机返回到主程序中继续 执行,单片机必须将现场保护时保存下来的内容从堆栈中弹出 至相应的寄存器,也即现场恢复。
∫5.2 ATmega16的外部中断
5.2.1 外部中断源 5.2.2 外部中断源的控制
5.2.1 外部中断源
单片机中断的概念
中断是指正在执行正常程序的计算机,由于出现一些需要立即 进行处理的情况,CPU暂停现在正在执行的操作,转而执行中 断服务程序,执行完毕后,再返回到原来程序继续执行的过程。
中断的功能
中断技术在单片机上能实现很多的功能,它们主要包括: ● 实现单片机与低速外设的配合
由于许多外设的速度较慢,无法与单片机实现直接的数据交换, 因此,必须采用中断功能来协调单片机与外设的速度,当单片机在执 行程序的过程中,如要进行数据的输入/输出操作,则单片机先发一个 命令给外设,然后单片机继续执行程序,当外设为数据交换做好准备 以后,它向单片机发出中断请求,这时,单片机暂时中止正在执行的 程序,转而执行中断服务程序中的数据输入/输出程序,数据交换完成 后,单片机再返回继续执行原来的程序。由此可见,中断技术实现了 单片机与外设的速度配合,提高了单片机的工作效率,也提高了数据 交换的效率。
● 实时控制功能
所谓实时控制就是单片机能及时完成对受控对象的测量、计算、分析和控 制,从而使受控对象保持良好的工作状态,并达到系统的使用要求。单片 机的中断技术使控制参量能随时向计算机发出中断请求,以完成对数据的 及时处理,因此它是单片机实现实时控制功能的一个必然要求。 ● 实现故障的及时发现
计算机在运行过程中,常会突然发生一些事先无法预料的故障。如:硬件 故障、运算错误及程序故障。有了中断技术,计算机就能对这些故障及时 发现并进行自行处理。 ● 实现人机联系
● 模数转换完成中断
AT90LS8535单片机的模数转换完成中断用于标识单片机内部的模数 转换器。当模数转换器的一次模数转换及数据更新完成时,ADIF置 “1”,若此时ADIE(ADC中断使能位)和全局中断使能位都为 “1”,则该中断被响应。
● EEPROM中断
•EEPROM中断是为AT90LS8535单片机内部的EEPROM写操作设置的, 当EEPROM准备好,且EERIE(EEPROM准备好中断使能)和全局 中断使能都为“1”,则该中断被响应。
相关文档
最新文档