📄 main.c
字号:
/*
实验六:
外部中断实验。
1、按键中断实验。INT4-INT7 4路中断触发方式,并以PB4-PB7电平
翻转显示其状态。
2、内部1 M晶振,程序采用全中断触发方式工作。
3、进行此实验请插上LED短路块。
4、此实验以简单的方式对中断的4种触发方式进行了实验,
让大家对中断有个全面的认识。
AVR mega128学习板
www.iccavr.com 阿发
1:15 2007-10-11
*/
#include "iom128v.h"
#include <macros.h>
void int_init(void);
/*延时函数*/
void delay_ms(unsigned char i) {
unsigned char a, b;
for (a = 0; a < i; a++) {
for (b = 1; b; b++);
}
}
/*IO口初始化函数*/
void io_init(void) {
DDRA = 0x00; /*方向输入*/
PORTA = 0xFF; /*打开上拉*/
DDRB = 0xFF; /*方向输出*/
PORTB = 0xFF; /*输出高电平*/
DDRC = 0x00; /*不用的IO口建议设置为输入带上拉*/
PORTC = 0xFF;
DDRD = 0x00;
PORTD = 0xFF;
DDRE = 0x00;
PORTE = 0xFF;
DDRF = 0x00;
PORTF = 0xFF;
DDRG = 0x00;
PORTG = 0xFF;
}
void main(void) {
io_init(); /*IO口状态初始化*/
int_init(); /*中断初始化*/
while (1) {
delay_ms(200);
PORTB ^= (1 << 0); /*PB0电平取反,闲着没事干,意思意思*/
}
}
/*中断初始化函数*/
void int_init(void) {
CLI(); /*关全局中断*/
EIMSK = 0x00; /*屏蔽所有外部中断*/
EICRA = 0x00; /*INT0-INT3设置为低电平触发*/
EICRB = 0x00; /*INT4-INT7设置为低电平触发*/
EICRB |= (1 << ISC50); /*INT5设置为任意电平变化触发*/
EICRB |= (1 << ISC61); /*INT6设置为下降沿触发*/
EICRB |= (1 << ISC71) | (1 << ISC70); /*INT6设置为下降沿触发*/
EIFR = 0xFF; /*清除中断标志,请见中文手册P84*/
EIMSK = 0xF0; /*INT4-INT7中断允许*/
SEI(); /*全局中断允许*/
}
/*外部中断INT4,低电平触发*/
#pragma interrupt_handler Int4: 6
void Int4(void) {
unsigned int i;
i = 1000; /*防按键颤动代码*/
while (i --) {
if ((PINE & (1 << PE4)) != 0) { /*按键是否为低电平*/
return ;
}
}
PORTB ^= (1 << PB4); /*PB1电平取反*/
while ((PINE & (1 << PE4)) == 0); /*等待按键松开*/
}
/*外部中断INT5,任意电平变化触发*/
#pragma interrupt_handler Int5: 7
void Int5(void) {
PORTB ^= (1 << PB5); /*PB1电平取反*/
}
/*外部中断INT4,下降沿触发*/
#pragma interrupt_handler Int6: 8
void Int6(void) {
unsigned int i;
i = 1000; /*防按键颤动代码*/
while (i --) {
if ((PINE & (1 << PE6)) != 0) { /*按键是否为低电平*/
return ;
}
}
PORTB ^= (1 << PB6); /*PB1电平取反*/
}
/*外部中断INT4,上升沿触发*/
#pragma interrupt_handler Int7: 9
void Int7(void) {
unsigned int i;
i = 1000; /*防按键颤动代码*/
while (i --) {
if ((PINE & (1 << PE7)) == 0) { /*按键是否为高电平*/
return ;
}
}
PORTB ^= (1 << PB7); /*PB1电平取反*/
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -