金牌会员
- 积分
- 1212
- 威望
- 685
- 贡献
- 247
- 兑换币
- 86
- 注册时间
- 2012-2-2
- 在线时间
- 140 小时
- 毕业学校
- 三江
|
chenjian 发表于 2012-5-15 19:43
楼主可否把他的贴也给我发个呢
void SET_PLL(void) //设置总线频率为24M
{
CLKSEL=0x00;
PLLCTL=0xe1;
SYNR=2;
REFDV=1; //PLLCLK=2*OSCCLK*(SYNR+1)/(REFDV+1)=2*16M*3/2=48M
PLLCTL=0x60;
asm NOP;
asm NOP;
asm NOP;
while((CRGFLG&0x08)==0);
CLKSEL=0x80; //BUS Clok=pllclk/2=24M
}
void PIT_Init(void) //定时10ms中断初始化函数
{
PITCFLMT_PITE=0;//PIT定时中断通道0关
PITCE_PCE0=1;//定时器通道0使能
PITMTLD0=240-1;//8位定时器初值设定。240分频即24M/240 10us
PITMUX=0x00;
PITLD0=1000-1;//16位定时器初值设定 1000*10us=10ms
PITINTE_PINTE0=1;//定时器中断通道0中断使能
PITCFLMT_PITE=1;//定时器通道0使能
}
void TIM_Init(void)//脉冲累计初始化
{
PACTL=0x50;//下降沿触发
PACNT=0x0000;//清0
}
void Servo_Init(void) //舵机 16 位PWM 控制6050,5175,4300 : 875
{
PWME_PWME1=0; //disable PWM1 servo
PWMPRCLK=0x23; //CLKA:8 分频3M ,CLKB:总线时钟6M
PWMCLK=0 ; //这就是默认值//通道1 用clock A 时钟源 //24MHZ/8=3M
PWMPOL_PPOL1=0; //先高电平
PWMCAE=0X00; //对齐方式默认 左对齐 都是
PWMCTL_CON01=1; //通道01级联
PWMPER01=30000;//60000:20ms;;;20000//舵机的频率是300Hz,10ms
PWMDTY01=4500;//6000左极限,3500右极限,4500中间
PWMCNT01=0; //写计数寄存器,会使PWMDTYx,PWMPERx 进入锁存器,同时使能通道时会从此值
PWME_PWME1=1; //PWM 通道1 输出
}
void Forward_Init(void) // 假定前进方向,初始化函数
{
PWME_PWME7=0; //CLOCKA=3M,CLOCKB=6M
PWME_PWME5=0;
PWMPOL_PPOL5=1; //low electrical level first,,high electrical level first,but high level makes mc33886 disabled
PWMPOL_PPOL7=1;
PWMCAE=0X00; //对齐方式默认左对齐
PWMCTL_CON45=1;
PWMCTL_CON67=1; //16BIT连接
PWMPER45=750; //设置的频率是8MHZ
PWMPER67=750; //
PWMDTY45=100;
PWMDTY67=0; //占空比精度1/750
PWMCNT45=0;
PWME_PWME5=1;
PWME_PWME7=1;
}
void main(void)
{
/* put your own code here */
DisableInterrupts;
//RTI_Init();
SET_PLL();
PIT_Init();
TIM_Init();
Servo_Init ();
Forward_Init();
SciInit();
DDRB=0xff; //定义为输出
ATD0DIEN=0xFFFF;
DDR1AD0=0x00;
DDRA=0x00;
EnableInterrupts; }
//prefinal_weight=final_weight;
} /* loop forever */
/* please make sure that you never leave main */
#pragma CODE_SEG NON_BANKED
void interrupt 66 PIT0(void) ///////10ms
{
PITTF_PTF0=1;
pulse_count=PACNT; //PT7接受脉冲
PACNT=0;}
#pragma CODE_SEG DEFAULT
|
|