第09讲-中断-外部中断.pptVIP

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第09讲-中断-外部中断

集美大学机械工程学院-郑东强 中断和外部中断 《AVR单片机原理及测控工程应用》 中断的概念 在程序运行期间,发生非预期事件 通常是为了避免查询方式的程序设计 AVR ATmega16中断数:20个 中断服务程序 中断发生时,主程序(当前程序)暂停,跳转到中断服务程序,称为“响应中断” 执行完毕后返回主程序继续运行 AVR中断的特点 每条指令结束后都检查是否有中断请求信号; 各种中断同时发生时,按中断向量号排序; 响应中断时,PC入栈,但不保存状态寄存器; 任意中断执行时,会关闭全局中断(也即禁用其他所有中断),该中断完成返回(RETI)时恢复全局中断使能; 可通过软件改变中断优先顺序; 一个中断完成返回后至少执行一条主程序再继续响应其他中断; Mage16的外部中断 M16具有3个外部中断 INT0、INT1: 支持4种触发模式, INT2 支持2种触发模式 中断相关库函数头文件 avr/interrupt.h 中断服务程序 ISR(INT0_vect) {//中断服务代码} 中断触发控制位 MCUCR和MCUCSR(白色背景) -0,下降沿触发;1,上升沿触发 中断使能和中断标志位(Flag)寄存器 GICR和GIFR 外部中断使用步骤 第1步:包含头文件 #include avr/interrupt.h 第2步:端口初始化、设置中断触发方式 任意逻辑电平变化: MCUCR |= (1 ISC10); 上升沿触发:MCUCR |= (1 ISC10)|(1 ISC11); 下降沿触发:MCUCR |= (1 ISC11); 低电平:默认 第3步:使能响应相应外部中断 GICR |= (1 INT0); 第4步:使能全局中断 sei(); 第5步:编写中断服务程序 ISR(INTx_vect){//中断代码} 简单外部中断-按键程序Interrupt_Simple * #include avr/io.h #define F_CPU 1000000 //CPU频率1M(HZ) #include util/delay.h #include avr/interrupt.h ISR(INT0_vect) { asm(sei);//允许被其他中断 _delay_ms(10);//延时防止抖动 if((PIND(12))==0) { PORTA=0x01; } while(!(PIND(12)))//等待键弹起, { _delay_ms(10); } } ISR(INT1_vect) { _delay_ms(10);//延时防止抖动 if((PIND(13))==0) { PORTA=0x02; } while(!(PIND(13)))//等待键弹起, { _delay_ms(10); } } int main(void) { DDRA=0xff; PORTA=0x0;//初始状态灯关闭,如果电容存在,会导致上电中断即产生 DDRD=0x0;//中断口作为输入 PORTD=0xff;//使能上拉电阻 MCUCR=(1ISC11)|(0ISC10)|(1ISC01)|(0ISC00); // GICR=(1INT1)|(1INT0); sei(); while(1) { } } 集美大学机械工程学院-郑东强 * #include avr/io.h #define F_CPU 1000000 //CPU频率1M(HZ) #include util/delay.h #include avr/interrupt.h ISR(INT0_vect) { asm(sei);//允许被其他中断 _delay_ms(10);//延时防止抖动 if((PIND(12))==0) { PORTA=0x01; } while(!(PIND(12)))//等待键弹起, { _delay_ms(10); } } ISR(INT1_vect) { _delay_ms(10);//延时防止抖动 if((PIND(13))==0) { PORTA=0x02; } while(!(PIND(13)))//等待键弹起, { _delay_ms(10); } } int main(void) { DDRA=0xff; PORTA=0x0;//初始状态灯关闭,如果电容存在,会导致上电中断即产生 DDRD=0x0;//中断口作为输入 PORTD=0xff;//使能上拉电阻 MCUCR=(1ISC11)|(0ISC10)|(1ISC01)|(0ISC00); // GICR=(1INT1

文档评论(0)

pengyou2017 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档