📄 int0+1.c
字号:
/*INT0、INT1使用中断方式,一个中断处理函数 实现对INT0/INT1按键的处理*/
#include <iom8v.h>
#include <macros.h>
extern void uart_init(void);
void delay_ms(unsigned int ms)
{
unsigned char i,loopcount;
ms=4*ms+1;
for(loopcount=0;loopcount<ms;loopcount++)//外循环
{
for(i=0;i<=251;i++);
//内循环
}
}
void int_init(void)
{GICR = 0xC0;}
//初始化int0,int1中断使能
#pragma interrupt_handler int_isr:iv_INT0 int_isr:iv_INT1
void int_isr(void)
{
unsigned char i;
unsigned char loopcount;
delay_ms(50);//延时10ms后检测按键是否有效,进行软防抖
/*for (loopcount=0;loopcount<41;loopcount++)
{for(i=0;i<251;i++);}
//不使用延时函数而直接使用循环进行延时*/
i=PIND&0x0c;//检测键盘是否仍按下
if(i==0x0c) return;//按键误触发
else
{
if(i==0x08)//INT0键按下
{
if (OCR1A<3890) OCR1A+=205;//递增
else OCR1A=0x0fff;
//12位满幅值,防止出现数据变为负向数值
}
else if(i==0x04)//INT1键按下
{
if (OCR1A>205) OCR1A-=205;//递减
else OCR1A=0;
}
else if(i==0x00) UCSRB=(1<<RXCIE)|(1<<RXEN)|(1<<TXEN);
//两键同时按下,重新切换到USART中,允许接收中断、发送和接收
}
GICR = 0x00;
//int0,int1禁止使能
SEI();
while ((PIND&0x0c)!=0x0c);
//检查按键释放
GICR = 0xC0;
//int0,int1中断使能
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -