中断服务函数,中写了一个键盘检测函数但是执行不了求解释
我初学RAM,想写个驱动电机的驱动函数自己想用键盘控制,电机加减速,中断函数是这样的
void __irq Timer0_VIC(void)
{
uint8 flag=0;
static uint32 i=0;
i++;
if((IO0PIN&Key1)==0)
{
delay(2);
if(IO0PIN&Key1==0)
tmr+=400;
}
if(IO0PIN&Key2==0)
{
delay(2);
if(IO0PIN&Key2==0)
tmr-=10;
}
if(IO0PIN&Key3==0)
{
delay(2);
if(IO0PIN&Key3==0)
flag=~flag;
}
if(flag==1)
{
i+=3;
}
T0MR0=Fpclk/tmr;
switch(i%4)
{
case 1: IO0CLR=p09;IO0SET=p011;break;
case 2: IO0CLR=p011;IO0SET=p024;break;
case 3: IO0CLR=p024;IO0SET=p022;break;
case 0: IO0CLR=p022;IO0SET=p09;break;
default: break;
}
T0IR=0x01;
VICVectAddr=0;
}我自己也查了在网上,好像是说中断函数里面不用有delay这些函数,这样的话这个代码该怎么写呢
[解决办法]
每天回帖即可获得10分可用分!
我不懂RAM,会一点C51,中断特别是时间中断里,用delay()会出大问题,这点都没搞懂好你写的程序铁定的好不了,当你的时间中断函数运行时间长于一个时间溢出周期,那么你的程序就馅进这个中断里一直出不来(中断一出来立即会再次进入中断,跟从不出来一个效果了),中断以外的部分就一直不会运行(分配不到CPU时间)
[解决办法]
你用delay是为了实现去抖动吗?
[解决办法]
恩,是去抖动的,我是个新手对里面的运行过程真心理解不太透彻,所以可能代码就容易出问题吧
[解决办法]