tag 标签: int0

相关博文
  • 热度 7
    2011-11-15 21:39
    2282 次阅读|
    0 个评论
    //外部中断 只需要设置相关寄存器就可以了 程序很短也就几句就把外部中断设置好了,但是我们要理解它的用处,本程序中只写了外部中断0的下降沿方式触发,其实它还有其他的触发方式,大家不妨试试,例如电平触发。。。。/ //----------------------------------------------------------------- //  名称: INT0中断计数 //----------------------------------------------------------------- //  说明: 每次按下计数键时触发INT0中断,中断程序累加计数, //        计数值显示在三只数码管上,按下清零键时数码管清零. // //----------------------------------------------------------------- #include avr/io.h #include avr/interrupt.h #define INT8U   unsigned char #define INT16U  unsigned int //清零键按下 #define  KEY_CLEAR_ON() ((PIND _BV(PD6)) == 0x00) //0-9的数字编码,最后一位为黑屏(索引为10) const INT8U DSY_CODE = {0,0,0}; //----------------------------------------------------------------- // 在数码管上显示计数值 //----------------------------------------------------------------- void Show_Count_ON_DSY() {   Display_Buffer = Count/100;  Display_Buffer = Count%100/10;  Display_Buffer = Count%10;  if(Display_Buffer ==0)  {   Display_Buffer = 10;   if(Display_Buffer ==0)    Display_Buffer = 10;   }  PORTA = DSY_CODE ];  PORTB = DSY_CODE ];  PORTC = DSY_CODE ]; } //I/O端口初始化 void Port_init() {  DDRA = 0XFF;  PORTA = 0X00;  DDRB = 0XFF;  PORTB = 0X00;  DDRC = 0XFF;  PORTC = 0X00; // DDRD = 0X00; // PORTD = 0XFF; } //INT0初始化 void INT0_init() {  MCUCR = 0X02; //下降沿触发  GICR = 0x40; //使能中断  GIFR = 0x40; //标志位清零  SREG = 0X80; } //----------------------------------------------------------------- // 主程序 //----------------------------------------------------------------- int main() {   Port_init();  INT0_init();  while(1)  {   if(KEY_CLEAR_ON())     Count = 0;   Show_Count_ON_DSY();   } } //----------------------------------------------------------------- // INT0中断函数 //----------------------------------------------------------------- ISR (INT0_vect) {  Count++; } /再来喊下口号,嘿嘿: 每天成长一点点,一棵小草也能成长为参天大树/
相关资源