INT0中断实验。
1、按键中断实验。低电平中断,在中断中改变PB1电平状态。
2、内部1 M晶振,程序采用单任务方式,软件延时。
3、进行此实验请插上JP1的所有8个短路块,JP7(LED_EN)短路块
*/
#i nclude "iom16v.h"
#i nclude <macros.h>
/*延时函数*/
void delay_ms(unsigned char i) {
unsigned char a, b;
for (a = 1; a < i; a++) {
for (b = 1; b; b++) {
;
}
}
}
void main(void) {
DDRA = 0x00; /*方向输入*/
PORTA = 0xFF; /*打开上拉*/
DDRB = 0xFF; /*方向输出*/
PORTB = 0xFF; /*电平设置*/
DDRC = 0x00;
PORTC = 0xFF;
DDRD = 0x00;
PORTD = 0xFF;
GICR |= (1 << INT0);
SEI();
while (1) {
delay_ms(200);
PORTB ^= (1 << 0); /*PB0电平取反*/
}
}
#pragma interrupt_handler Int0: 2 /*外部中断INT0*/
void Int0(void) {
unsigned int i;
PORTB ^= (1 << 1); /*PB1电平取反*/
i = 1000; /*加入廷时防按键颤动*/
while (--i);
while ((PIND & (1 << PD2)) == 0); /*等待按键松开*/
i = 1000; /*加入廷时防按键颤动*/
while (--i);
}