实验内容:
使用AVR的外部中断INT1检测PD3Key,如果有按键按下,则唤醒休眠的MCU,并使它的PB口的LED做加1指示。
#include
#define DISP_DDR DDRB
#define DISP_PORT PORTB
#define IN_PD3 cbi(DDRD,3) //PD3
#define SET_PD3 sbi(PORTD,3)
#define GET_PD3 gbi(PIND,3)
//PORTA|=BIT(5); 就是把把第6位置1;
//PORTA=~BIT(5); 就是把第6位置零
//DDRB |= 0x80; //等于“sbi(DDRB,7);” 置1位
//DDRB &= ~0x80; //等于“cbi(DDRB,7);”清零
/*--------------------------------------------------------
程序名称:外部中断服务程序
-------------------------------------------------------*/
#pragma interrupt_handler int1_isr:3
//是一个编译器的关键字声明,声明这个函数是一个中断服务函数,后面跟的数字是中断向量号。
void int1_isr(void)
{
GICR &= 0b01111111; // disable int1 interrupt 通用中断控制寄存器 GICR
DISP_PORT++; // 显示口指示加1,指示被按次数
delay50ms(4);
GICR |= 0b10000000; // enable int1 interrupt
}
/*--------------------------------------------------------
程序名称:外部中断初始化程序
--------------------------------------------------------*/
void int1_init()
{
IN_PD3; // set PD3/INT1 as input
SET_PD3; // set PD3/INT1 as output,high level,avoid triggering
MCUCR |= 0b11110011; // set PD3/INT1 as low level active
GICR |= 0b10000000; // enable global interrupt
SEI(); // enable external interrupt
}
void main(void)
{
DISP_DDR = 0xFF;
DISP_PORT = 0x00;
int1_init();
asm("sleep"); // set mcu as sleep modle
//开机后MCU处于SLEEP状态,之后按按键,LED作出了简单指示。
while(1);
}
上一篇:AVR USART接收中断程序
下一篇:AVR 定时器中断程序
推荐阅读最新更新时间:2024-03-16 16:03
设计资源 培训 开发板 精华推荐
- 兆易创新GD25/55全系列车规级SPI NOR Flash荣获ISO 26262 ASIL D功能安全认证证书
- 新型IsoVu™ 隔离电流探头:为电流测量带来全新维度
- 英飞凌推出简化电机控制开发的ModusToolbox™电机套件
- 意法半导体IO-Link执行器电路板为工业监控和设备厂商带来一站式参考设计
- Melexis采用无磁芯技术缩小电流感测装置尺寸
- 千丘智能侍淳博:用数字疗法,点亮“孤独症”儿童的光
- 数药智能冯尚:ADHD数字疗法正为儿童“多动症”提供更有效便捷服务
- Vicor高性能电源模块助力低空航空电子设备和 EVTOL的发展
- 创实技术electronica 2024首秀:加速国内分销商海外拓展之路
- “跨芯片”量子纠缠实现 有助建构更强大的量子计算能力