智能车制作

标题: 编码器测速程序,PT7口一直测不到脉冲 [打印本页]

作者: 抬头看天    时间: 2011-11-26 08:44
标题: 编码器测速程序,PT7口一直测不到脉冲
我写了一个编码器测速的程序,可是在PT7口一直测不到脉冲,单步调试程序不进入中断那部分,不知道怎么回事。各位大侠帮忙指教一下。

#include <hidef.h>      /* common defines and macros */
#include "derivative.h"      /* derivative-specific definitions */
#include<MC9S12XS128.h>
word num = 0;//脉冲值
uchar flag = 0,ch;
int a;
//总线超频到20M
void Init_pll(void)
{
    CLKSEL = 0X00;                                                      /* disengage PLL to system      */
    PLLCTL_PLLON = 1;                                                   /* turn on PLL                  */
    SYNR = 4;
    REFDV=1 ;                                                           /* pllclock=2*osc*(1+SYNR)/(1+R */
    _asm(nop);                                                          /* BUS CLOCK=20M                */
    _asm(nop);
    while(!(CRGFLG_LOCK == 1));                                         /* when pll is steady ,then use */
    CLKSEL_PLLSEL = 1;                                                  /* engage PLL to system;        */
}



      
//PT0口用来定时400ms   每1.6s读取一次脉冲值
void PIT_init() {
  
          PITCFLMT_PITE = 0;//禁止PIT
     PITCE_PCE0 = 1;//允许通道0
        PITMUX_PMUX0 = 0;
           
      PITMTLD0=199;   //400ms定时   
      PITLD0=40000-1;
      PITINTE=0X01;
      PITTF_PTF0 = 1;
}
//PT7口用来接收编码器脉冲
void PA_init() {
  
PACTL=0X50;//开启脉冲累加功能,上升沿计数,输入时钟为PA预分频时钟脉冲累加溢出中断使能,输入中断使能
PACNT=0x0000;//清零
TCTL3=0X40;
TIE=0X00;
TIOS=0X00;
PAFLG_PAIF = 1;
PACTL_PAEN = 1;
}


void Init_PWMout(void)
{
    DDRB = 0XFF;
    PORTB = 0X05;
    PWME     = 0x00;                                                    /* 禁止PWM输出                  */
    PWMCTL   = 0x70;                                                    /* 01,23,45通道级联           */
    PWMPOL   = 0x0a;                                                    /* 通道01的输出极性为正极性,23 */
    PWMCAE   = 0x11;                                                    /* 全部通道是中心对齐           */
    PWMCLK   = 0x00;                                                    /* 时钟源为:CLOCKA,CLOCKB     */
    PWMPRCLK = 0x40;                                                    /* 时钟CLOCKA不分频40MHZ,CLOCK */
    PWMPER01 = 500;                                                   /* 电机速度控制 周期 250us F=4K */
    PWMDTY01 = 200;                                                    /* 默认占空比                   */
  //  PWMPER23 = 50000;                                                   /* 舵机方向控制 周期20ms F=50HZ */
  //  PWMDTY23 = 3790;                                                    /* 脉宽控制-调占空比            */
    PWME     = 0x02;                                                    /* 使能PWM输出                  */
}     
     
void main(void) {
     a = 5;
     Init_pll();
     PIT_init();
     Init_PWMout();
     PA_init();
     
  
EnableInterrupts;

  for(;;) {
  
   
  } /* loop forever */
  /* please make sure that you never leave main */
}
#pragma CODE_SEG NON_BANKED
void interrupt 66 PIT0() {
   
   flag++;
   if(flag==4) {
   
   flag=0;
   num=PACNT;//读取脉冲值
  
  
   PACNT=0X0000;//脉冲值清零
   }
   
  PITTF=0X01;
}
#pragma CODE_SEG DEFAULT
作者: chillms91    时间: 2012-2-10 22:11
错误好多啊
作者: 我是北丐    时间: 2012-2-11 02:37
帮顶
作者: 马合店村    时间: 2012-2-11 22:03

作者: 断翅at雄鹰    时间: 2012-2-13 15:25

作者: 孜孜和少阳    时间: 2012-2-26 15:10
写出来已经很不错了,让我看看哈
作者: 孜孜和少阳    时间: 2012-2-26 21:34
我怎么觉得void Init_PWMout(void)
{
    DDRB = 0XFF;
    PORTB = 0X05;
    PWME     = 0x00;                                                    /* 禁止PWM输出                  */
    PWMCTL   = 0x70;                                                    /* 01,23,45通道级联           */
    PWMPOL   = 0x0a;                                                    /* 通道01的输出极性为正极性,23 */
    PWMCAE   = 0x11;                                                    /* 全部通道是中心对齐           */
    PWMCLK   = 0x00;                                                    /* 时钟源为:CLOCKA,CLOCKB     */
    PWMPRCLK = 0x40;                                                    /* 时钟CLOCKA不分频40MHZ,CLOCK */
    PWMPER01 = 500;                                                   /* 电机速度控制 周期 250us F=4K */
    PWMDTY01 = 200;                                                    /* 默认占空比                   */
  //  PWMPER23 = 50000;                                                   /* 舵机方向控制 周期20ms F=50HZ */
  //  PWMDTY23 = 3790;                                                    /* 脉宽控制-调占空比            */
    PWME     = 0x02;                                                    /* 使能PWM输出                  */
}     
     
很乱呢
作者: 樱花流年    时间: 2012-3-10 16:39
是不是先关中断哦。这有个我在别人那儿看的例子你看看,
void PAInit(void)
{
    DisableInterrupts;    //禁止中断   
   
    TSCR1_TFFCA=1;    //快速清除flag:PAOVF PAIF
   
/*                DATASHEET P472
*           To operate the 16-bit pulse accumulator independently of input capture or output compare 7 and 0
*                respectively the user must set the corresponding bits IOSx = 1, OMx = 0 and OLx = 0. OC7M7 in the
*                OC7M register must also be cleared.
*/
    TIOS_IOS7=1;                   //单独使用16位脉冲累加器
    OC7M_OC7M7=0;;             //注意此时必须令IOS7=1,OC7M7=0,OM7=0,OL7=0
    TCTL1_OM7=0;
    TCTL1_OL7=0;
   
    PACTL_PAMOD=0;               //事件计数方式
    //PACTL_PEDGE=1;             //PT7引脚上的出现上升沿时脉冲累加器计数器加1
    //PACTL_PAOVI=1;             //允许脉冲累加器产生溢出时引发中断
    //PACTL_PAI=1;                //允许PT7引脚上出现上升沿时引发中断
    PACTL_PAEN=1;                //启动脉冲累加器A
    PACNT  =  0x0000;
     
}
作者: 向天空说    时间: 2012-4-11 20:34
好复杂哎!!!

作者: 风少    时间: 2012-5-2 22:39
中断没使能
作者: Smile_Sun    时间: 2012-7-9 22:50

作者: Magnetoplas    时间: 2012-7-10 08:52
PIT的优先级很低的
作者: WK033857    时间: 2013-4-14 16:47

作者: 客流量    时间: 2013-4-14 17:43
可以把被编码器的资料发给我吗?直接上邮箱:578523854@qq.com

作者: ★尕倩のヾKing    时间: 2014-9-3 09:41
怒顶一剂
作者: 空有一人    时间: 2014-10-13 21:19
路过
作者: woshichuanqi    时间: 2015-4-3 22:20
楼主,128怎么和编码器连接啊?




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