中级会员
- 积分
- 221
- 威望
- 189
- 贡献
- 22
- 兑换币
- 0
- 注册时间
- 2008-12-17
- 在线时间
- 5 小时
|
1贡献
谁能帮我看看我下面这个程序错在哪里?一直找不到原因,加了中断后用BDM观察发现进不到PWMout子程序里,所以电机始终不转。愁啊,望高手指点,谢谢!
#include <hidef.h> /* common defines and macros */
#include <MC9S12XS128.h> /* derivative information */
#pragma LINK_INFO DERIVATIVE "mc9s12xs128"
unsigned char PulseCnt;
static int sudu;
void SetBusblock()
{
REFDV=0x01; //initiate PLL clock
SYNR =0x02; // system clock 24M
while (!(CRGFLG & 0x08)){} // 稳定到24MHz
CLKSEL=0x80; // 选定所相环时钟
}
/*******************************************************
ECT输入捕捉初始化
*******************************************************/
void ECT_init(void) //中断初始化
{
TIOS=0x08; //通道2输入捕捉,通道3定时
TSCR1=0x80; //定时器使能
TSCR2=0x07; //禁止定时器溢出中断,预分频系数为128
TCTL4=0x30; //捕捉上下沿
TIE=0x0c; //允许ECT通道2,3中断
TFLG1=0x0c;
PulseCnt=0x00; //计数初始化
}
void pwm_init() //pwm初始化函数
{
PWME=0xA8; //通道23,45,67使能
PWMPOL=0xA8; //通道23,45,67输出波形开始极性为1
PWMCTL=0xE0; //通道23,45,67级联
PWMCLK=0x08;
PWMSCLB=12;
PWMPER23=20;
PWMPER45=12000; //设定通道45频率为2KHz
PWMPER67=12000; //设定通道67频率为2KHz
}
void Speedout()
{
PWMDTY23=sudu;
PWMDTY45=4000;
PWMDTY67=0;
}
void main(void)
{
SetBusblock();
pwm_init();
ECT_init();
EnableInterrupts;
for(;;)
{
Speedout();
}
}
/*******************************************************
中断服务函数
返回sudu
*******************************************************/
#pragma CODE_SEG NON_BANKED
void interrupt 10 IC2_ISR(void)
{
PulseCnt++; //采集脉冲
TFLG1=0x04;
}
#pragma CODE_SEG NON_BANKED
void interrupt 11 IC3_ISR(void)
{
TC3=TCNT+1875; //10ms
TFLG1=0x08;
sudu=PulseCnt; // 采集速度
PulseCnt=0x00;
}
#pragma CODE_SEG DEFAULT |
|