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 + -
显示快捷键?