中级会员
- 积分
- 368
- 威望
- 229
- 贡献
- 49
- 兑换币
- 0
- 注册时间
- 2009-3-22
- 在线时间
- 45 小时
|
#include <hidef.h> /* common defines and macros */
#include <MC9S12XS128.h> /* derivative information */
#pragma LINK_INFO DERIVATIVE "mc9s12xs128"
#define PITTIME 5000//设定为约50MS定时
unsigned int vTmpPIT=0;
unsigned int sudu=0;
void pllclk(void)//24MHz,外部时钟为16MHz
{
CLKSEL=0X00;//锁相环时钟关
PLLCTL=0xe1;
SYNR=2;//PLLCLK =2*OSCCLK*(SYNR + 1)/(REFDV + 1)
REFDV=1;
PLLCTL=0X60;
asm NOP;
asm NOP;
asm NOP;
while((CRGFLG&0X08)==0);//时钟校正同步
CLKSEL=0X80;//锁相环开
}
void initIOBoutput(void)//IO口初始化,B口为输出
{
DDRB=0XFF;
PORTB=0XFF;
}
void initPIT(void)//定时中断初始化函数 50MS定时中断设置
{
PITCFLMT_PITE=0; //定时中断通道0关
PITCE_PCE0=1;//定时器通道0使能
PITMTLD0=240-1;//8位定时器初值设定。240分频,在24MHzBusClock下,为0.1MHz。10us.
PITLD0=PITTIME-1;//16位定时器初值设定。PITTIME*0.01MS
PITINTE_PINTE0=1;//定时器中断通道0中断使能
PITCFLMT_PITE=1;//定时器通道0使能
}
void initPACA(void)//初始化脉冲累加器A
{
PACTL=0X50; //PT7上升沿脉冲计数
TCTL3=0x40; //c-输入捕捉7上升沿有效,
//TCTL4=0xc0; //4 0表示ICx禁止, 1表示上升沿, 2表示下降沿, 3表示任何沿
TIE =0x00; //每一位对应相应通道中断允许,0表示禁止中断
TIOS =0x00; //每一位对应通道的: 0输入捕捉,1输出比较
PACNT =0x00;
}
void initPWM(void)//初始化电机
{
PWME=0X00;
PWMCTL=0XC0;
PWMCLK=0X00;
PWMPOL=0XFF;//起始输出高电平
PWMCAE=0X00;//左对齐方式
PWMPRCLK=0X33;
PWMPER45=9999;
PWMDTY45=4999;
PWME=0XA0;
}
void main(void)
{
pllclk();
initIOBoutput();
initPWM();
initPACA();
initPIT();
EnableInterrupts;
for(;;) {} /* wait forever */
}
#pragma CODE_SEG __NEAR_SEG NON_BANKED
void interrupt 66 PIT0(void)
{
vTmpPIT++;
if(vTmpPIT==20) //延时50*20=1000MS
{
sudu=PACNT;
initPACA();
PORTB=~sudu;
vTmpPIT=0;
}
PITTF_PTF0=1;//清中断标志位
}
//这是XS128的程序,测的是1s内的脉冲数.脉冲接PT7 |
|