智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 1713|回复: 2
打印 上一主题 下一主题

[单片机] KBI模块为什么会出现这问题啊,跪求高手解答!

[复制链接]

9

主题

13

帖子

0

精华

注册会员

Rank: 2

积分
131
威望
75
贡献
32
兑换币
30
注册时间
2012-12-24
在线时间
18 小时
毕业学校
西安电子科技大学
跳转到指定楼层
1#
发表于 2013-1-6 15:23:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本人想用MC9S08MP16单片机KBI模块,从KBI2P7端输入4.3v的1HZ的50%的PWM波,但是为什么没有给PWM波的时候主函数里面的LED还能正常闪,但是一旦给了PWM波LED就不亮了 !而且从PTD0看不到正常的PWM波,只有500mv的方波,这好像是因为函数信号发生器激起来的。为什么我在中断中明明在中断中给了高低电平却测不到?
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;//边沿检测
}


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

45

主题

761

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
5023
威望
2903
贡献
558
兑换币
1271
注册时间
2012-10-16
在线时间
781 小时
2#
发表于 2013-1-6 16:31:57 | 只看该作者
回复 支持 反对

使用道具 举报

9

主题

13

帖子

0

精华

注册会员

Rank: 2

积分
131
威望
75
贡献
32
兑换币
30
注册时间
2012-12-24
在线时间
18 小时
毕业学校
西安电子科技大学
3#
 楼主| 发表于 2013-1-7 23:59:44 | 只看该作者
我的这个程序为什么在中断中不能对引脚数据寄存器赋值?比如说中断中的PTDD_PTDD0,不能对其赋值,导致了出现这个问题.还有就是中断执行到倒数第二行 KBI2PE =0X80;// 马上中断标志位就置位了。导致程序一直循环中断。但是当我把最后一行KBI2SC =0X02;// 改成KBI2SC =0X06;的时候程序却又进不了中断了!
但是我实在找不到单片机哪里设置出了问题,坑爹的单片机!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-10-7 00:19 , Processed in 0.046042 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表