⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 脉冲测速代码。在51单片机上使用。可用于电动机。
💻 C
字号:
///////////////////////////////////////////////////////////////////
//PT4输入捕捉测速程序,PT4口输入脉冲
//每次记录脉冲时间可修改宏:TIME_INTER
//说明此程序用于总线时钟在32M情况下,若总线时钟有变化,改分频参数和模数常数以得到精确定时
//author:whut_wj

///////////////////////////////////////////////////////////////////
#include <hidef.h>      /* common defines and macros */
#include <mc9s12dg128.h>     /* derivative information */
#pragma LINK_INFO DERIVATIVE "mc9s12dg128b"

#define TIME_INTER 1000  //1000个ms=1s
unsigned int Get_pulse;   //脉冲个数
unsigned int number_count;


void Start_PLL(void)   //busCLK=32M
{
  REFDV=0x01;          // PLLCLK =2*OSCCLK*(SYNR + 1)/(REFDV + 1)
  SYNR=0x03;	         //        =2*16M*3/2=64M
  asm{
    BRCLR CRGFLG,#$08,*
    BSET CLKSEL,#$80
    }													  
}


void MDCInit(void)
{
  MCCTL = MCCTL&0Xfb; //模数计数器禁止运行
  MCCTL = 0Xe3;       //允许中断,模数计数方式 
                      //返回时重新加载所用的常数,分频常数为16 
  MCCTL = MCCTL|0X04; //模数计数器使能
  MCCNT = 2000; //(1/32M)*16*2000= 1ms 
  MCCTL = MCCTL|0X08 ; //把模数常数寄存器的值加载到模数计数器FLMC;
}

void Init_PT4_Capture()
  {
          
     TIOS=0x00;          //输入捕捉
     TCTL3=0x02;         //通道4下降沿触发
     TSCR2=0X07;         //分频,用来给TCNT作时间参考,这里没有意义
    
     TSCR1=0x80;         //Timer Enable
     TIE=0X10;           //初始化定时器开启 
  }
  
void main(void) 
{
  DisableInterrupts;
  Start_PLL();
  Init_PT4_Capture();
  MDCInit();
  EnableInterrupts;
  DDRB=0xff;
  PORTB=0XAA; 
  for(;;)
   {

   } 
}


#pragma CODE_SEG __NEAR_SEG NON_BANKED
void interrupt 26 MDC_ISR(void) 
{ 
  static unsigned int count=0;
  count++;
  if( count==TIME_INTER)        //1秒取一次
    {
      Get_pulse = number_count; 
      number_count=0;
      count=0;
      PORTB^=0Xff;
    }
  MCFLG = 0x80;
}



#pragma CODE_SEG __NEAR_SEG NON_BANKED
void interrupt 12 PT4_Capture(void) 
{ 
  TFLG1=0x10;
  number_count++;
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -