智能车制作

标题: KBI模块为什么会出现这问题啊,跪求高手解答! [打印本页]

作者: 飞刀小李    时间: 2013-1-6 15:23
标题: KBI模块为什么会出现这问题啊,跪求高手解答!
本人想用MC9S08MP16单片机KBI模块,从KBI2P7端输入4.3v的1HZ的50%的PWM波,但是为什么没有给PWM波的时候主函数里面的LED还能正常闪,但是一旦给了PWM波LED就不亮了 !而且从PTD0看不到正常的PWM波,只有500mv的方波,这好像是因为函数信号发生器激起来的。为什么我在中断中明明在中断中给了高低电平却测不到?[attach]39038[/attach]
void KBI_INIT()
{
//  PTBDD &=0X7F;//PB7输入
//  PTCDD &=0X7F;//PC7输入
//按照手册上要求的步骤
//  KBI3SC &=0XFD;//先把中断允许关掉
//  KBI3PE =0X01;//PTD0检测速度、允许引脚中断
//  KBI3ES =0X00;//下降沿中断
//  KBI3SC =0X06;//清楚标志,开中断,只边沿检测
    PTCD  =0X00;
    PTCPE =0XFF;
    KBI2SC_KBIE =0;//先把中断允许关掉
   
    KBI2ES =0X00;//下降沿,低电平
    KBI2PE =0X80;//PTc7检测速度、允许引脚中断
    KBI2SC =0X02;//边沿检测
}
unsigned int numk=0;
unsigned int count=0;
void main(void)
{
    EnableInterrupts; /* enable interrupts */
  // include your code here  
//  
  init_clk();
  delay(1);
  
  //    PDB1();
//  PWM();
//  MTIM();
  KBI_INIT();
  PTDDD =0XFF;
  while(1)
  {  
     DisableInterrupts;
     PTDD_PTDD2 =1;        //亮LED1; PTDD_PTDD2
     asm (nop);asm (nop);
     
     PTDD_PTDD3 =1;        //亮LED2;
     asm (nop);asm (nop);
     EnableInterrupts;
     delay(200);
     
     DisableInterrupts;
     PTDD_PTDD2 =0;        //亮LED1; PTDD_PTDD2
     asm (nop);asm (nop);     
     PTDD_PTDD3 =0;
     asm (nop);asm (nop);
     EnableInterrupts;
     delay(200);
     count++;               
    __RESET_WATCHDOG();    //默认是开看门狗的
  }
}
interrupt VectorNumber_Vkeyboard2 void kbi2()
{
//    KBI2SC_KBACK=1;//清除外部中断标志位
//    kbi_value = PTGD;//读取按键值
    KBI2PE =0;
    KBI2SC =0X04;
    KBI2SC_KBACK=1;//清除外部中断标志位
    KBI2SC_KBACK=1;//清除外部中断标志位
    asm (nop);asm (nop);
    asm (nop);asm (nop);
     numk++;
    if(numk%2)
    {
         
      PTDD_PTDD0 =0;
      asm (nop);asm (nop);
      asm (nop);asm (nop);
      delay(2);  
    }
    else
    {                  
         PTDD_PTDD0 =1;
         asm (nop);asm (nop);
         asm (nop);asm (nop);     
//         PTDD_PTDD3 =1;        //亮LED2;
        delay(2);
    }
    if(numk==2000)
        numk=0;
    KBI2PE =0X80;//PTc7检测速度、允许引脚中断
    KBI2SC =0X02;//边沿检测
}



作者: I'M_Not_The    时间: 2013-1-6 16:31

作者: 飞刀小李    时间: 2013-1-7 23:59
我的这个程序为什么在中断中不能对引脚数据寄存器赋值?比如说中断中的PTDD_PTDD0,不能对其赋值,导致了出现这个问题.还有就是中断执行到倒数第二行 KBI2PE =0X80;// 马上中断标志位就置位了。导致程序一直循环中断。但是当我把最后一行KBI2SC =0X02;// 改成KBI2SC =0X06;的时候程序却又进不了中断了!
但是我实在找不到单片机哪里设置出了问题,坑爹的单片机!




欢迎光临 智能车制作 (http://dns.znczz.com/) Powered by Discuz! X3.2