CC2540定时器不准吗?

2019-07-24 15:15发布

新手上手熟悉CC2540芯片,做了一些定时器的小实验。
但是发现实际输出的波形周期误差还是蛮大的,比如定时500ms,基本周期都是510ms~520ms。
以前用AVR或DSP之内的感觉都还好,请问是因为什么原因呢?

设置如下:
1.png 2.png 3.png

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

  2. #define uint unsigned int
  3. #define uchar unsigned char

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

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

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

  11. /****************************
  12. //延时函数
  13. *****************************/
  14. void Delayms(uint xms)   //i=xms 即延时i毫秒
  15. {
  16.   uint i,j;
  17.   for(i=xms;i>0;i--)
  18.     for(j=587;j>0;j--);
  19. }
  20. /****************************
  21. //初始化程序
  22. *****************************/
  23. void InitLed(void)
  24. {
  25.   P1DIR |= 0x01;          //P1_0义为输出
  26.   LED1 = 0;               //LED1灯熄灭
  27. }
  28. //定时器初始化
  29. void InitT3()
  30. {     
  31.   T3CTL |= 0x08 ;         //开溢出中断     
  32.   T3IE = 1;               //开总中断和T3中断
  33.   T3CTL|=0XE0;            //128分频,128/16000000*N=0.5S,N=62500
  34.   T3CTL &= ~0X03;         //自动重装,选择自由模式 00->0xff  62500/256=244(次)
  35.   T3CTL |=0X10;           //启动
  36.   EA = 1;
  37. }

  38. /***************************
  39. //主函数
  40. ***************************/
  41. void main(void)
  42. {   
  43.   InitLed();               //调用初始化函数
  44.   InitT3();
  45.   while(1);
  46. }

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

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
7条回答
xyz549040622
2019-07-24 20:05
hm_315 发表于 2015-12-7 13:50
恩,确实是晶振设置问题,现在自己还不会设置,使用了ble的时钟初始化函数后,定时已经很精确了,谢谢!
...

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

一周热门 更多>