您的位置 首页 资料

AVR运用典范–AVR外部中止典范

系统在正常运行主程序时,如果突然有一个重要的任务要马上处理,那么系统就要保存现在的工作,然后再去处理这个任务,执行这个重要任务完毕…

体系在正常运转主程序时,假如忽然有一个重要的使命要立刻处理,那么体系就要保存现在的作业,然后再去处理这个使命,履行这个重要使命结束今后再回来本来的主程序持续运转,这便是中止。

主程序一旦进入中止服务程序,那么AVR芯片将主动的封闭大局中止,在这个期间不再履行其它的中止恳求,直到中止程序结束今后芯片才主动的从头敞开大局中止。(留意,在这个期间某些中止恳求或许会被丢掉,某些恳求会留下中止恳求美丽,一旦当时的中止履行结束,这个有中止美丽的恳求就有或许立刻得到呼应,如INT0的下降沿触发就会留下中止恳求美丽,而低电平触发就不会流下中止恳求美丽)。假如你想在履行中止服务程序时呼应别的一个更重要的中止,那么就要在中止服务程序中参加一条翻开大局中止的句子。

运用ICCAVR Application Builder进行如下图所示的设置。 能够设置是否运用中止,上升延,下降延,低电平,恣意的逻辑电平改变。

将生成的程序进行修正,DDRA = 0x01;PORTD = 0x0C; ,增加MAIN函数,如下

  • //ICC-AVR application builder : 2006-12-8 17:04:44// Target : M16// Crystal: 7.3728Mhz#include #include 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:2void int0_isr(void){ //external interupt on INT0 i++; //在中止里进行操作}#pragma interrupt_handler int1_isr:3void int1_isr(void){ //external interupt on INT1 PORTA = 0x01; //在中止里进行操作}//call this routine to initialize all peripheralsvoid 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) //死循环等候中止 ;}

相关解说

  1. #pragma interrupt_handler int0_isr:2
  2. 中止的约好表明办法:int0_isr有一个与之对应的应用程序void int0_isr(void),2为中止向量,值越小,优先级越高,INT0的优先级仅次于复位。
  3. MCU 操控寄存器- MCUCR MCU 操控寄存器包括中止触发操控位与通用MCU 功用
  4. 通用中止操控寄存器- G%&&&&&%R 使能或禁用外部中止恳求

运用过程中:为了下降搅扰,中止引脚请加上一个4.7K的上拉电阻,还能够依据实际需要,加上%&&&&&%滤波,防颤动

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/ziliao/275327.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部