中级会员
- 积分
- 423
- 威望
- 326
- 贡献
- 23
- 兑换币
- 0
- 注册时间
- 2010-1-7
- 在线时间
- 37 小时
|
本帖最后由 papa2009 于 2010-1-8 20:23 编辑
麻烦各位高手帮小弟看看下面这段代码啊,刚刚入手智能车,不知道为什么程序总无法实现想要的功能,不知道什么问题,纠结了很久啊,谢谢了!
#include <hidef.h> /* common defines and macros */
#include <mc9s12dg128.h> /* derivative information */
#pragma LINK_INFO DERIVATIVE "mc9s12dg128b"
void delayms(int ms)//延时ms毫秒
{
int i,j;
for(i=0;i<ms;i++)
{
j=3000;
while(j--);
}
}
void clkinitial()//超频到24MHz
{
CLKSEL=0X00;//disengage PLL to system
PLLCTL_PLLON=1;
REFDV=1;//PLLCLK=2*OSCCLK*(SYNR+1)/(REFDV+1)=2*8*(2+1)/(1+1)=24MHz
SYNR=2;
_asm(nop);
_asm(nop);
while(CRGFLG_LOCK==0);//等待直到稳定
CLKSEL_PLLSEL =1;
}
void IOinitial()
{
DDRB=0xFF;//二极管发光
PORTB=0xFF;
DDRA=0xF0;//高四位输出,33886的端口控制
PORTA=0xC0;//低四位输入,控制车子运动方向
}
void pwminitial()//PWM初始化,通道01,23控制电机,通道45控制舵机
{
PWMPOL=0x2A;//通道01,23,45输出波形开始极性为1
PWMCAE=0x00;//左对齐输出模式
PWMCTL=0x70;//通道01,23,45级联
PWMCLK=0x20;//通道45选择SA为时钟源
PWMSCLA=0x04;//通道45时钟SA为3MHz(24/(2*4))
PWMPER01=6000;//设定通道01输出频率(4kHz)
PWMPER23=6000;//设定通道23输出频率(4kHz)
PWMDTY23=3000;
PWMPER45=60000;//设定通道45输出频率(50Hz)
PWMDTY45=4210;
PWME=0x2A;//通道01,23使能
}
unsigned char keyscan()//键盘扫描
{
delayms(10);
if(PORTA_BIT0==0) return 'l'; // LEFT
else if(PORTA_BIT1==0) return 'u'; // UP
else if(PORTA_BIT2==0) return 'd'; // DWON
else if(PORTA_BIT3==0) return 'r'; // RIGHT
else return 0xff;
}
void main()
{
unsigned char keytemp=0,key=0xff;
clkinitial();
pwminitial();
IOinitial();
EnableInterrupts;
for(;;)
{
PORTB=~PORTB;
keytemp=keyscan();
if(keytemp!=0xff)
key=keytemp;
switch(key)
{
case 'l':
if(PWMDTY45>3210)
PWMDTY45-=20;
key=0xff;
break;
case 'r':
if(PWMDTY45<5210)
PWMDTY45+=20;
key=0xff;
break;
case 'u':
if(PWMDTY01<6000)
PWMDTY01+=500;
key=0xff;
break;
case 'd':
if(PWMDTY01>0)
PWMDTY01-=500;
key=0xff;
break;
default:
break;
}
delayms(50);
} /*wait forever */
/* please make sure that you never leave this function */
}
对了,我的板子是MC9S12DG128B的,上面的晶振写着16MHz,但是在超频时发现好像是要用8MHz来计算PLLCLK,看书上是说用外部时钟算的,搞不懂!!!继续纠结………… |
|