智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 910|回复: 2
打印 上一主题 下一主题

xs128的输出比较问题

[复制链接]

4

主题

9

帖子

0

精华

注册会员

Rank: 2

积分
92
威望
56
贡献
26
兑换币
27
注册时间
2016-9-16
在线时间
5 小时
毕业学校
哈工大
跳转到指定楼层
1#
发表于 2016-11-21 20:33:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本人刚学xs128的新手,请问各位大神这个输出比较的时间0.125s是怎么算出来的。

/*---------------------------------------------------------*/
/************************************************************
飞翔科技MC9S12XS128汽车电子开发板
E-mail: 2008f.d@163.com
淘宝店:http://fxfreefly.taobao.com
************************************************************/
/*---------------------------------------------------------*/
#include <hidef.h>      /* common defines and macros */
#include "derivative.h"      /* derivative-specific definitions */

#define LEDCPU PORTK_PK4
#define LEDCPU_dir DDRK_DDRK4
#define  BUS_CLOCK                   32000000           //总线频率
#define  OSC_CLOCK                   16000000           //晶振频率

/*************************************************************/
/*                      初始化锁相环                         */
/*************************************************************/
void INIT_PLL(void)
{
    CLKSEL &= 0x7f;       //set OSCCLK as sysclk
    PLLCTL &= 0x8F;       //Disable PLL circuit
    CRGINT &= 0xDF;

    #if(BUS_CLOCK == 40000000)
      SYNR = 0x44;
    #elif(BUS_CLOCK == 32000000)
      SYNR = 0x43;     
    #elif(BUS_CLOCK == 24000000)
      SYNR = 0x42;
    #endif

    REFDV = 0x81;         //PLLCLK=2×OSCCLK×(SYNDIV+1)/(REFDIV+1)=64MHz ,fbus=32M
    PLLCTL =PLLCTL|0x70;  //Enable PLL circuit
    asm NOP;
    asm NOP;
    while(!(CRGFLG&0x08)); //PLLCLK is Locked already
    CLKSEL |= 0x80;        //set PLLCLK as sysclk
}

/************************************************************/
/*                    初始化ECT模块                         */
/************************************************************/
void initialize_ect(void){
  TSCR1_TFFCA = 1;  // 定时器标志位快速清除
  TSCR1_TEN = 1;    // 定时器使能位. 1=允许定时器正常工作; 0=使主定时器不起作用(包括计数器)
  TIOS  = 0xff;      //指定所有通道为输出比较方式
  TCTL1 = 0x00;            // 后四个通道设置为定时器与输出引脚断开
  TCTL2 = 0x00;     // 前四个通道设置为定时器与输出引脚断开
  TIE   = 0x00;     // 禁止所有通道定时中断
  TSCR2 = 0x07;            // 预分频系数pr2-pr0:111,,时钟周期为4us,
  TFLG1 = 0xff;            // 清除各IC/OC中断标志位
  TFLG2 = 0xff;     // 清除自由定时器中断标志位
}

/*************************************************************/
/*                        初始化LED                          */
/*************************************************************/
void INIT_LED(void)
{
LEDCPU_dir = 1;
LEDCPU = 0;
}


/*************************************************************/
/*                         主函数                            */
/*************************************************************/
void main(void) {
  DisableInterrupts;
  INIT_PLL();
  INIT_LED();
  initialize_ect();
  EnableInterrupts;

  for(;;)
  {
    TFLG1_C0F = 1;              //清除标志位
    TC0 = TCNT + 31250;         //设置输出比较时间为0.125s
    while(TFLG1_C0F == 0);      //等待,直到发生输出比较事件
    TFLG1_C0F = 1;              //清除标志位
    TC0 = TCNT + 31250;         //设置输出比较时间为0.125s
    while(TFLG1_C0F == 0);      //等待,直到发生输出比较事件
    TFLG1_C0F = 1;              //清除标志位
    TC0 = TCNT + 31250;         //设置输出比较时间为0.125s
    while(TFLG1_C0F == 0);      //等待,直到发生输出比较事件
    TFLG1_C0F = 1;              //清除标志位
    TC0 = TCNT + 31250;         //设置输出比较时间为0.125s
    while(TFLG1_C0F == 0);      //等待,直到发生输出比较事件
    LEDCPU = ~LEDCPU;           //反转灯的状态
  }
}


回复

使用道具 举报

0

主题

14

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
361
威望
195
贡献
116
兑换币
126
注册时间
2015-9-22
在线时间
25 小时
毕业学校
武汉理工大学
2#
发表于 2016-11-23 13:23:56 | 只看该作者
你ECT不是4us一次嘛,31250x4us=0.125s
回复 支持 反对

使用道具 举报

4

主题

9

帖子

0

精华

注册会员

Rank: 2

积分
92
威望
56
贡献
26
兑换币
27
注册时间
2016-9-16
在线时间
5 小时
毕业学校
哈工大
3#
 楼主| 发表于 2016-11-24 16:38:17 | 只看该作者
哦,谢谢
回复 支持 反对

使用道具 举报

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

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-12-26 14:59 , Processed in 0.093802 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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