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

📄 main.c

📁 飞思卡尔HCS12里的定时和计时的方案,列出例子,以供参考.这个程序输出比较计时,这个多通道可以计多个时间,耐用,好用
💻 C
字号:
///////////////////////////////////////////////////////////////////
//精确定时10ms
//author:whut_wj

///////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////
//严重申明,此程序只能玩,不能用.只能在调试模式下,才能改写TCNT的值
//TCNT关系到很多参考时钟,出于保护机制,TCNT在正常模式下不能赋值!
//为了帮助大家了解TCNT,和时钟的溢出特地做此程序
////////////////////////////////////////////////////////////

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

unsigned int m;
void Start_PLL(void)   //busCLK=20M
{
  REFDV=0x03;          // PLLCLK =2*OSCCLK*(SYNR + 1)/(REFDV + 1)
  SYNR=0x04;	         //        =2*16M*3/2=40M
  asm{
    BRCLR CRGFLG,#$08,*
    BSET CLKSEL,#$80
    }													  
}

void TimerInit(void)
{
   TSCR2_PR   =0x04;  //prescale factor is 16, bus clock/16=20Mhz/16=1250000
   TSCR1_TEN  = 1;      //Timer enable
   TSCR2_TOI=   1;
   TCNT=0XFFFF-0x30D4;
}

void main(void)
 {

   DisableInterrupts;
   Start_PLL();
   TimerInit();
   DDRB=0xff;
   PORTB=0;
   for(;;) 
      {
        EnableInterrupts;
      } /* wait forever */
    /* please make sure that you never leave this function */
  
}

#pragma CODE_SEG __NEAR_SEG NON_BANKED
interrupt 16 void timeroverflow(void)   //10ms
{

  DisableInterrupts;
  TCNT=0XFFFF-0x30D4;

  PORTB ^=0xff;
  TFLG2_TOF=1;
}

⌨️ 快捷键说明

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