智能车制作

标题: 定时测速程序,始终找不到原因 [打印本页]

作者: yuhuo1989    时间: 2009-5-2 22:34
标题: 定时测速程序,始终找不到原因
谁能帮我看看我下面这个程序错在哪里?一直找不到原因,加了中断后用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
作者: sehszf    时间: 2009-5-3 11:17
程序进不了
中断程序
作者: 空间荒人    时间: 2009-5-3 18:06
给TC3一定初值试试,当TCNT=TC3时,才会进入中断
作者: yuhuo1989    时间: 2009-5-3 18:40
刚才试了你说的方法,但还是不行,不过谢谢你的帮忙! 3# 空间荒人
作者: xiaopang1989    时间: 2009-5-17 21:30
用BDM调试用程序单步执行,看问题出在哪!!!
作者: fengnan    时间: 2010-4-11 21:08
是的  你先检查硬件  没有问题的话单步运行
作者: tiankai    时间: 2010-6-12 20:53
你先检查硬件  没有问题的话单步运行
作者: tiankai    时间: 2010-6-12 20:53
你先检查硬件  没有问题的话单步运行
作者: tiankai    时间: 2010-6-12 20:53
你先检查硬件  没有问题的话单步运行
作者: tiankai    时间: 2010-6-12 20:53
你先检查硬件  没有问题的话单步运行




欢迎光临 智能车制作 (http://dns.znczz.com/) Powered by Discuz! X3.2