📄 main.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 + -