智能车制作
标题:
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