查看: 1644|回复: 0

[S12] MC9S12XEP100中定时器设置的问题

[复制链接]

该用户从未签到

4

主题

15

帖子

0

注册会员

Rank: 2

积分
53
最后登录
2022-6-23
发表于 2016-10-13 11:57:02 | 显示全部楼层 |阅读模式
本来想设置1ms中断,并且翻转IO口;但是参考范例程序配置,时间不准确,请教!以下是我的程序,谢谢!
#pragma CODE_SEG __NEAR_SEG NON_BANKED
void interrupt 93 TIM_Timer_Overflow(void) {          // 320ms timer overflow
  TIM_TFLG2_TOF = 1;    //清定时器溢出标志位        
  PORTB_PB7=~PORTB_PB7;   
  TIM_TCNT = 0;      
}
#pragma CODE_SEG DEFAULT
void main(void) {
  /* put your own code here */
  byte u8_cnt = 0;   
  //void setbusclock(void)
  {  
    CLKSEL = 0x00;                        //选择外部晶振作为系统时钟
    PLLCTL_PLLON = 0;     //使能PLL// turn on PLL

    SYNR = 0x67;               // VCOFRQ[7:6];SYNDIV[5:0]
                        // fVCO= 2*fOSC*(SYNDIV + 1)/(REFDIV + 1)
                        // fPLL= fVCO/(2 × POSTDIV)
                        // fBUS= fPLL/2 = fVCO/(2 × POSTDIV)/2
                        // VCOCLK Frequency Ranges  VCOFRQ[7:6]
                        // 32MHz <= fVCO <= 48MHz    00
                        // 48MHz <  fVCO <= 80MHz    01
                        // Reserved                  10
                        // 80MHz <  fVCO <= 120MHz   11
                        //
    REFDV = 0x0F;       // REFFRQ[7:6];REFDIV[5:0]
                        // fREF=fOSC/(REFDIV + 1)
                        // REFCLK Frequency Ranges  REFFRQ[7:6]
                        // 1MHz <= fREF <=  2MHz       00
                        // 2MHz <  fREF <=  6MHz       01
                        // 6MHz <  fREF <= 12MHz       10
                        // fREF >  12MHz               11                        
                        // pllclock=2*osc*(1+SYNR)/(1+REFDV)=32MHz;
                        //
    POSTDIV = 0x00;  //fBUSCLOK = 16MHz //fPLL=fVCO,If POSTDIV = $00 then fPLL is identical to fVCO (divide by one).
    PLLCTL_PLLON = 1;     //使能PLL// turn on PLL                    
    _asm(nop);         
    _asm(nop);
    while(!(CRGFLG_LOCK==1));          //when pll is steady ,then use it;
    CLKSEL_PLLSEL = 1;                //engage PLL to system;确定时钟总线来自于PLL,48MHz  
  }   
  //static void TIM_Timer_Init(void)
  {


    TIM_TSCR1 = 0x90;//计数器使能TEN|快速清零TFFCA

    TIM_TSCR2 = 0x87;//Timer Overflow Interrupt Enable,DIV 128->320ms
                      //000-Bus Clock/1
                      //001-Bus Clock/2
                      //010-Bus Clock/4
                      //011-Bus Clock/8
                      //100-Bus Clock/16
                      //101-Bus Clock/32
                      //110-Bus Clock/64
                      //111-Bus Clock/128  
    TIM_TCNT = 0;     //   
    TIM_PACTL = 0X50;  //IOC7使能,上升沿

    /*                        
    PITCFLMT_PITE = 1;   //PIT 模块使能
    PITCFLMT_PFLMT0 = 1; //选择0号8位计数器
    PITFLT_PFLT0 = 1;   //选择0号16位计数器
    PITCE_PCE0 = 1;    //定时器通道0使能
    PITMUX_PMUX0 = 0;
    PITMTLD0 = 240-1; //定时10us
    PITLD0 = 1000-1;  //定时10ms
    PITINTE_PINTE0 = 1;  //定时器通道0的中断允许使能
    */
  }  
//static void IO_Init(void)
  {
    DDRB = 0xff;  //LED  PTB0--7,
    PORTB= 0x00;  //LEDs on  
  }

        EnableInterrupts;


  for(;;) { PORTB_PB6=~PORTB_PB6;
    _FEED_COP(); /* feeds the dog */
  } /* loop forever */
  /* please make sure that you never leave main */
}

我知道答案 目前已有0人回答
回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /4 下一条

Archiver|手机版|小黑屋|恩智浦技术社区

GMT+8, 2024-5-9 15:54 , Processed in 0.126982 second(s), 20 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表