目前按网上的方法使用中断的方法接INT0 INT1
在中断判断另外一个脚的电平,如果是高电平
数目加1 反之减去1,但是在实际应用中无论选择
INT0为低电平 上升沿 下降沿 ,无论是正转还是反转
都判断的另一个脚为低电平 也就是数目减去1
这个不能判断方向的问题怎么解决?
volatile unsigned char feng=0;//
volatile unsigned char tong=0;//
#pragma interrupt_handler INT0_tongfengfu:2
#pragma interrupt_handler INT1_fengliang:3
/*--------------------------------
//INT0中断函数
//全局变量tong为编码器的数值
//-------------------------------*/
void INT0_tongfengfu(void)
{if((PIND&BIT(1))==1)
tong++;
else
tong--;
//GIFR|=BIT(INTF0);//清除标志
}
/*--------------------------------
//INT1中断函数
//全局变量feng为编码器的数值
//-------------------------------*/
void INT1_fengliang(void)
{
if((PIND&BIT(4))==1)
feng++;
else
feng--;
//GIFR|=BIT(INTF1);//清除标志
}
/*--------------------------------
//INT0初始化函数
//PD2 输入带内部上拉
//INT0下降沿产生中断
//PD1为编码器的比较端
//-------------------------------*/
void INT0_init()
{
DDRD&=~BIT(1);//PD1输入
PORTD|=BIT(1);//PD1上拉
DDRD&=~BIT(2);//PD2输入
PORTD|=BIT(2);//PD2上拉
CLI();
MCUCR|=BIT(ISC01);//10下降沿产生中断
MCUCR&=~BIT(ISC00);//
TIMSK=0X00;
GICR|=BIT(INT0);
SEI();//全局中断
}
/*--------------------------------
//INT1初始化函数
//PD3 输入带内部上拉
//INT1下降沿产生中断
//PD4为编码器的比较端
//-------------------------------*/
void INT1_init()
{
DDRD&=~BIT(4);//PD4输入
PORTD|=BIT(4);//PD4上拉
DDRD&=~BIT(3);//PD3输入
PORTD|=BIT(3);//PD3上拉
CLI();
MCUCR|=BIT(ISC11);//10下降沿产生中断
MCUCR&=~BIT(ISC10);//
TIMSK=0X00;
GICR|=BIT(INT1);
SEI();//全局中断
}
|