智能车制作

标题: 求教:哪位大侠帮忙写一个脉冲累加器的程序?谢谢. [打印本页]

作者: pjgmwlmy    时间: 2009-3-10 12:10
标题: 求教:哪位大侠帮忙写一个脉冲累加器的程序?谢谢.
小弟初学者,脉冲累加器部分看不懂.能否帮忙写一个程序.用来统计给定时间内脉冲的个数?
作者: 50833713    时间: 2009-3-10 13:24
提示: 作者被禁止或删除 内容自动屏蔽
作者: chiusir    时间: 2009-3-10 18:36
http://www.znczz.com/viewthread. ... p;page=1&extra=
作者: dalefang    时间: 2009-3-23 18:25
同样需求啊
作者: zjcc    时间: 2009-6-19 15:18
谢谢chiusir 了,
作者: yala1987    时间: 2009-6-24 01:52
#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




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