打印

CC2540定时器不准吗?

[复制链接]
1937|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hm_315|  楼主 | 2015-12-6 20:59 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
新手上手熟悉CC2540芯片,做了一些定时器的小实验。
但是发现实际输出的波形周期误差还是蛮大的,比如定时500ms,基本周期都是510ms~520ms。
以前用AVR或DSP之内的感觉都还好,请问是因为什么原因呢?

设置如下:


程序如下:
#include<ioCC2540.h>

#define uint unsigned int
#define uchar unsigned char

//定义控制LED灯的端口
#define LED1 P1_0         //定义LED1为P10口控制

//函数声明
void Delayms(uint xms);   //延时函数
void InitLed(void);       //初始化P1口
void InitT3();            //初始化定时器T3

uint count;               //用于定时器计数

/****************************
//延时函数
*****************************/
void Delayms(uint xms)   //i=xms 即延时i毫秒
{
  uint i,j;
  for(i=xms;i>0;i--)
    for(j=587;j>0;j--);
}
/****************************
//初始化程序
*****************************/
void InitLed(void)
{
  P1DIR |= 0x01;          //P1_0义为输出
  LED1 = 0;               //LED1灯熄灭
}
//定时器初始化
void InitT3()
{     
  T3CTL |= 0x08 ;         //开溢出中断     
  T3IE = 1;               //开总中断和T3中断
  T3CTL|=0XE0;            //128分频,128/16000000*N=0.5S,N=62500
  T3CTL &= ~0X03;         //自动重装,选择自由模式 00->0xff  62500/256=244(次)
  T3CTL |=0X10;           //启动
  EA = 1;
}

/***************************
//主函数
***************************/
void main(void)
{   
  InitLed();               //调用初始化函数
  InitT3();
  while(1);
}

#pragma vector = T3_VECTOR //定时器T3
__interrupt void T3_ISR(void)
{
  IRCON = 0x00;             //清中断标志, 也可由硬件自动完成
  if(++count>244)           //244次中断后LED取反,闪烁一轮(约为0.5 秒时间)
  {         
   count = 0;               // 计数清零
   LED1=~LED1;
  }
}


相关帖子

沙发
dirtwillfly| | 2015-12-7 07:49 | 只看该作者
测量下晶振频率或者系统时钟准不准是多少?

使用特权

评论回复
板凳
xyz549040622| | 2015-12-7 09:10 | 只看该作者
没见你设置晶振,用的内部晶振么?换外部晶振试试。再调节下重载值试试

使用特权

评论回复
地板
hm_315|  楼主 | 2015-12-7 13:50 | 只看该作者
xyz549040622 发表于 2015-12-7 09:10
没见你设置晶振,用的内部晶振么?换外部晶振试试。再调节下重载值试试

恩,确实是晶振设置问题,现在自己还不会设置,使用了ble的时钟初始化函数后,定时已经很精确了,谢谢!
后面还有待学习!

使用特权

评论回复
5
xyz549040622| | 2015-12-7 15:31 | 只看该作者
hm_315 发表于 2015-12-7 13:50
恩,确实是晶振设置问题,现在自己还不会设置,使用了ble的时钟初始化函数后,定时已经很精确了,谢谢!
...

多看看数据手册,多跑跑例程就好了。

使用特权

评论回复
6
dirtwillfly| | 2015-12-7 19:34 | 只看该作者
hm_315 发表于 2015-12-7 13:50
恩,确实是晶振设置问题,现在自己还不会设置,使用了ble的时钟初始化函数后,定时已经很精确了,谢谢!
...

加油

使用特权

评论回复
7
豆腐块| | 2015-12-8 21:35 | 只看该作者
确实是晶振设置问题,现在自己还不会设置

楼主可以先参考例程学习

使用特权

评论回复
8
lefeng| | 2015-12-10 20:32 | 只看该作者
内部时钟有误差的,外部晶振就好的多

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

35

帖子

0

粉丝