智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 1931|回复: 1
打印 上一主题 下一主题

T0怎么用不了?

[复制链接]

2

主题

19

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
400
威望
258
贡献
86
兑换币
0
注册时间
2012-3-1
在线时间
28 小时
毕业学校
shaoyang
跳转到指定楼层
1#
发表于 2012-5-29 15:28:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我用的芯片是dp512,不知道怎么搞的,一开始设置的PACB能用,T0能正确计数,不知道怎么搞的,什么参数都没改,昨天T0又不计数了。我的代码如下,请高手指点一下看看是什么情况?
#include <hidef.h>      /* common defines and macros */
#include "derivative.h"      /* derivative-specific definitions */
#define LEDCPU PORTK_BIT4
#define LEDCPU_dir DDRK_BIT4
#define  BUS_CLOCK     32000000    //总线频率
#define  OSC_CLOCK     16000000    //晶振频率
unsigned int data1,data2;
unsigned int pulsenum;
unsigned int i;
/*************************************************************/
/*                      初始化锁相环                         */
/*************************************************************/
void INIT_PLL(void)
{
    CRGINT = 0;                  //关中断
    CLKSEL_PLLSEL = 0;           //在未初始化PLL前不使用PLL的输出作为CPU时钟
   
  #if(BUS_CLOCK == 40000000)
    SYNR = 4;
  #elif(BUS_CLOCK == 32000000)
    SYNR = 3;     
  #elif(BUS_CLOCK == 24000000)
    SYNR = 2;
  #endif
    REFDV = 1;                   //PLLCLK=2×OSCCLK×(SYNR+1)/(REFDV+1)=64MHz ,fbus=32M
    PLLCTL_PLLON = 1;            //开PLL
    PLLCTL_AUTO = 1;             //选取自动模式
    while (CRGFLG_LOCK == 0);    //等待PLL锁定频率
    CLKSEL_PLLSEL = 1;           //选择系统时钟由PLL产生
}
/************************************************************/
/*                    初始化ECT模块                         */
/************************************************************/
void initialize_ect(void){
  TSCR1_TFFCA = 1;  // 定时器标志位快速清除
  TSCR1_TEN = 1;    // 定时器使能位. 1=允许定时器正常工作; 0=使主定时器不起作用(包括计数器)
  TIOS  = 0xf0;      //指定所有通道为输出比较方式
  TCTL1 = 0x00;     // 后四个通道设置为定时器与输出引脚断开
  TCTL2 = 0x00;     // 前四个通道设置为定时器与输出引脚断开
  DLYCT = 0x00;     // 延迟控制功能禁止
  ICOVW = 0x00;     // 对应的寄存器允许被覆盖;  NOVWx = 1, 对应的寄存器不允许覆盖
  ICSYS = 0x00;     // 禁止IC及PAC的保持寄存器
  TIE   = 0x00;     // 禁止所有通道定时中断
  TSCR2 = 0x07;     // 预分频系数pr2-pr0:111,,时钟周期为4us,
  TFLG1 = 0xff;     // 清除各IC/OC中断标志位
  TFLG2 = 0xff;     // 清除自由定时器中断标志位
}
/*************************************************************/
/*                      初始化累加器                         */
/*************************************************************/
void INIT_PAI(void)
{
  
  PBCTL = 0x40;      //始能B脉冲累加器
  TCTL4=0X02;     //捕捉下降沿
  PACN10=0x00;
}
  
/*************************************************************/
/*                         主函数                            */
/*************************************************************/
void main(void) {
  DisableInterrupts;
  INIT_PLL();
    INIT_PAI();
  initialize_ect();
  LEDCPU_dir = 1;
  EnableInterrupts;
  LEDCPU = 0;
  
  TFLG1_C0F = 1;
  TC0 = TCNT+62500;     //时间间隔为0.25s
  
  for(;;)
  {
    for(i=0;i<4;i++)          //延时1秒
    {
        while(TFLG1_C0F == 0);
        TFLG1_C0F = 1;
        TC0 = TCNT+62500;
    }
    data1 = data2;
    data2 = PACN10;
    pulsenum = data2-data1;   //计算1秒钟采集的上升沿的数量
  }
}

0

主题

52

帖子

0

精华

高级会员

Rank: 4

积分
784
威望
400
贡献
224
兑换币
206
注册时间
2012-11-19
在线时间
80 小时
毕业学校
合肥师范学院
2#
发表于 2012-12-21 18:51:32 | 只看该作者
赶紧准备期末考试啊。。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-21 08:04 , Processed in 0.045178 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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