首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 单片机 >

中止服务函数,中写了一个键盘检测函数但是执行不了求解释

2012-12-28 
中断服务函数,中写了一个键盘检测函数但是执行不了求解释我初学RAM,想写个驱动电机的驱动函数自己想用键盘

中断服务函数,中写了一个键盘检测函数但是执行不了求解释
我初学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是为了实现去抖动吗?
[解决办法]
恩,是去抖动的,我是个新手对里面的运行过程真心理解不太透彻,所以可能代码就容易出问题吧
[解决办法]

引用:
每天回帖即可获得10分可用分!
我不懂RAM,会一点C51,中断特别是时间中断里,用delay()会出大问题,这点都没搞懂好你写的程序铁定的好不了,当你的时间中断函数运行时间长于一个时间溢出周期,那么你的程序就馅进这个中断里一直出不来(中断一出来立即会再次进入中断,跟从不出来一个效果了),中断以外的部分就一直不会运行(分配不到CPU时间)

现在我也觉得应该把里面那个判断条件放在中断外边了,但是怎么不起作用啊
#include "config.h"
#include "LPC2103_lian.H"

/* 宏定义设置按键 */
#define  Key1        ( 1<< 0 )
#define  Key2        ( 1<< 1 )
#define  Key3        ( 1<< 2 )
#define  Key4        ( 1<< 3 )
#define  Key5        ( 1<< 8 )

static uint32 tmr=100;
static uint32 i=0;

void __irq Timer0_VIC(void);
void Timer0Init(void);
void delay(uint32 i);

int main(void)
{
uint8 flag=0;
Timer0Init();
p011_gpio;
p024_gpio;
p022_gpio;
p09_gpio;
  /**************键盘所占gpio********/
  p00_gpio;    //将端口设置为gpio口
  p01_gpio;
  p02_gpio;
  p03_gpio;
  p08_gpio;

gpio_out(p011
[解决办法]
p024
[解决办法]
p022
[解决办法]
p09);
gpio_in(p00

热点排行