您好,欢迎访问上海现易电子元器件有限公司网站!

021-51870898
021-51870898   18019251567
4新闻资讯
您的位置: 首页 ->  新闻资讯 -> 单片机

​AVR外部中断INT1检测按键,使用LED作指示

文章出处:单片机 责任编辑:上海现易电子元器件有限公司 发表时间:2020-11-10

实验内容: 
使用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);

}



上海现易电子元器件有限公司 版权所有 未经授权禁止复制或镜像

CopyRight 2020-2025 www.xy777.net All rights reserved   沪ICP备2020031792号

友情链接:

电话

易经理

18019251567

微信

易经理

易经理

顶部

咨询