AVR使用范例--AVR外部中断范例..doc

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
AVR使用范例--AVR外部中断范例.

AVR使用范例--AVR外部中断范例 本页关键词: 单片机外部中断 外部中断的应用 AVR外部中断 INTERUPTS 关于AVR中断: 系统在正常运行主程序时,如果突然有一个重要的任务要马上处理,那么系统就要保存现在的工作,然后再去处理这个任务,执行这个重要任务完毕以后再返回原来的主程序继续运行,这就是中断。 主程序一旦进入中断服务程序,那么AVR芯片将自动的关闭全局中断,在这个期间不再执行其它的中断请求,直到中断程序结束以后芯片才自动的重新开放全局中断。(注意,在这个期间某些中断请求可能会被丢弃,某些请求会留下中断请求标致,一旦当前的中断执行完毕,这个有中断标致的请求就有可能马上得到响应,如INT0的下降沿触发就会留下中断请求标致,而低电平触发就不会流下中断请求标致)。如果你想在执行中断服务程序时响应另外一个更重要的中断,那么就要在中断服务程序中加入一条打开全局中断的语句。 使用ICC快速建立中断服务程序 //ICC-AVR application builder : 2006-12-8 17:04:44 // Target : M16 // Crystal: 7.3728Mhz #include iom16v.h #include macros.h unsigned int i=0; void port_init(void) { PORTA = 0x00; DDRA = 0x01; PORTB = 0x00; DDRB = 0x00; PORTC = 0x00; //m103 output only DDRC = 0x00; PORTD = 0x0C; //使INT0,INT1对应口上拉电阻有效 DDRD = 0x00; //必须设置INT0,INT1对应口为输入 } #pragma interrupt_handler int0_isr:2 void int0_isr(void) { //external interupt on INT0 i++; } #pragma interrupt_handler int1_isr:3 void int1_isr(void) { //external interupt on INT1 PORTA = 0x01; } //call this routine to initialize all peripherals void init_devices(void) { //stop errant interrupts until set up CLI(); //disable all interrupts port_init(); MCUCR = 0x08; //INT1 的下降沿产生异步中断请求,INT0上升延 GICR = 0xC0; //INT0和INT1使能 TIMSK = 0x00; //timer interrupt sources SEI(); //re-enable interrupts //all peripherals are now initialized } void main(void) { init_devices(); while(1) //死循环等待中断 ; } 使用ICCAVR Application Builder进行如下图所示的设置。 可以设置是否使用中断,上升延,下降延,低电平,任意的逻辑电平变化。 将生成的程序进行修改,DDRA = 0x01;PORTD = 0x0C; ,添加MAIN函数,如下 //ICC-AVR application builder : 2006-12-8 17:04:44 // Target : M16 // Crystal: 7.3728Mhz #include iom16v.h #include macros.h unsigned int i=0; void port_init(void) { PORTA = 0x00; DDRA = 0x01; PORTB = 0x00; DDRB = 0x00; PORTC = 0x00; //m103 output only DDRC = 0x00; PORTD = 0x0C; //使INT0,INT1对应口上拉电阻有效 DDRD = 0x00; //必须设置INT0,INT1对应口为输入 } #pragma interrupt_handler int0_isr:2 void int0_isr(void) { //external interupt on INT0 i++; //在中断里进行操作 } #pragma int

文档评论(0)

dashewan + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档