main.c
来自「s12dg128b的rti初始化」· C语言 代码 · 共 67 行
C
67 行
#include <hidef.h> /* common defines and macros */
#include <mc9s12dg128.h> /* derivative information */
#pragma LINK_INFO DERIVATIVE "mc9s12dg128b"
//******************************数据********************************
#pragma DATA_SEG data
unsigned int i=0;
unsigned int j=0;
//*******************************函数*********************************
#pragma CODE_SEG DEFAULT
void InitSys(void){
REFDV=0x03; //Reference Divider Register
SYNR=0x07; //Synthesizer Rigister
//PLLCLK=2*OSCCLK*(SYNR+1)/(REFDV+1)=64MHz
while(!CRGFLG_LOCK); //wait for stable PLL frequency
CLKSEL=0x80; //Clock Select Register,1:System clocks are
//derived from PLLCLK(Bus Clock=SYSCLK/2=32MHz)
}
void InitRti(void){
RTICTL=0x50;//RTICLK=16MHz/1024/2^4=0.9765625KHz,so RTI_TIMEOUT=1/0.9765625=1.024ms
CRGINT_RTIE=1; //允许中断
}
void InitPortB(void){
DDRB=0xFF;
PORTB=0xFF;
}
//*******************************中断函数*********************************
#pragma CODE_SEG NON_BANKED
#pragma TRAP_PROC
void RtiIsr(void){
i++;
CRGFLG_RTIF=1;//标志位如果不清零,则单片机一直进行rti中断,陷入死循环
}
//*********************************主程序******************************
void main(void) {
/* put your own code here */
InitSys();
InitRti();
InitPortB();
EnableInterrupts;
for(;;) {
if(i>=977){
i=0;
if(j>255){
j=j%256;
}
j++;
PORTB=j;
}
} /* wait forever */
/* please make sure that you never leave this function */
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?