智能车制作

标题: 飞思卡尔定时器问题 [打印本页]

作者: jinkai    时间: 2012-7-8 12:09
标题: 飞思卡尔定时器问题
飞思卡尔定时器怎么计算定时时间,比如要定时1s,怎么写?下面程序定时是多少?
/*--------------------------------------------------*/
/*芯片型号:MC9S12XS128 LED跑马灯测试程序            */                        
/*    功能:LED测试程序                              */                           
/*     程序由安阳创想电子科技编写                    */
/*淘宝店铺:www.shop34763529.taobao.com              */
/*    电话:13523332693                              */
/*      QQ:262342506                                */
/*    飞思卡尔系统的处理器为:  MC9S12XS128          */
/*     AVR系统的晶振频率:  24 Mhz                   */
/*---------------------------------------------------*/
#include <hidef.h>      
#include <MC9S12XS128.h>     
#pragma LINK_INFO DERIVATIVE "mc9s12xs128"



int counter;



void TimerOverflow(void) {

  while (TCNT != 0x0000);
  while (TCNT == 0x0000);
  counter++;   
  if (counter == 8) PORTB = 0x7e; /* LED亮 */
  if (counter == 7) PORTB = 0xbd;
  if (counter == 6) PORTB = 0xdb;
  if (counter == 5) PORTB = 0xe7;
  if (counter == 4) PORTB = 0xe7;
  if (counter == 3) PORTB = 0xdb;
  if (counter == 2) PORTB = 0xbd;
  if (counter == 1) PORTB = 0x7e;
}
/*时钟初始化*/

void Initial(void)      //PLLCLK=2*OSCCLK*(SYNR+1)/(REFDV+1)

{                     //锁相环时钟=2*16*(2+1)/(1+1)=48MHz

  REFDV=1;           //总线时钟=48/2=24MHz

  SYNR=2;

  while(!(CRGFLG&0x08));

  CLKSEL=0x80;

}
void main(void)
{
  Initial();
  TSCR1 = 0x80; /* 打开定时器 TCNT */
  TSCR2 = 0x07; /* TCNT 开始计数 */
  counter = 0;

  DDRB=0xff; /* PTB 输出 */
  PORTB=0xff;  /* LED关闭 */
  asm{
  nop
  }
  for (;;)
  {
    TimerOverflow();
    if (counter >= 8) {
         counter = 0;
         TSCR2 = 0x07;  
    }
  }
}



作者: 独爱sheng    时间: 2012-7-8 13:22
频率太高了,设为8M就行了
作者: 451506709    时间: 2012-7-8 14:34
其实,不管频率多高都可以定时,48MHz不算高,莫非,你想降低频率和处理速度来换取低功耗{:soso_e144:}




欢迎光临 智能车制作 (http://dns.znczz.com/) Powered by Discuz! X3.2