欢迎来到51自学网!

51自学网

当前位置: 主页 > 软件教程 > 单片机教程 >

ATmega16L-----外部中断0,1中断嵌套

时间:2018-08-13 14:07来源:网络整理 作者:51自学网
/*************************************** 取自周兴华《AVR单片机C语言高级程序设计》 进入INT1中断的时候,再开启全局中断, 这时候INT0中断触发,可以形成中断嵌套 ***********************************
/***************************************   取自周兴华《AVR单片机C语言高级程序设计》   进入INT1中断的时候,再开启全局中断,   这时候INT0中断触发,可以形成中断嵌套   ***************************************/   #include<iom16v.h>   #include<macros.h>   #define uchar unsigned char   #define uint unsigned int   uint shu;   /***************************************   delay   ****************************************/   void delay_ms(uint k)   {   uint i,j;   for(i=0;i<k;i++)   for(j=0;j<570;j++);   }   /****************************************   main   ****************************************/   void main(void)   {   DDRB=0xff;   PORTB=0XFF;   PORTD=0XFF;   DDRD=0XF3; //将PD2,PD3设置为输入 即INT0,INT1   MCUCR=0X0A; //INT1,INT0 设置为下降沿触发   GICR=0XC0; //使能INT1,INT0 中断   SREG=0X80; //使能总中断   while(1)   {   PORTB=0X00;   delay_ms(100);   PORTB=0XFF;   delay_ms(100);   }   }   /*****************************************   INT0 ISR   *****************************************/   #pragma interrupt_handler int0_isr:2   void int0_isr(void)   {   for(shu=0;shu<5;shu++)   {   PORTB|= BIT(1);   delay_ms(60);   PORTB&=~BIT(1);   delay_ms(60);   }   }   /***************************************   INT1 ISR   ***************************************/   #pragma interrupt_handler int1_isr:3   void int1_isr(void)   {   SREG=0X80; //使能全局中断   for(shu=0;shu<10;shu++)   {   PORTD|=BIT(7);   delay_ms(100);   PORTD&=~BIT(7);   delay_ms(100);   }   }

【发表评论】【告诉好友】【收藏此文】【】

(责任编辑:admin)

织梦二维码生成器
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
栏目列表
推荐内容