新手上手熟悉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;
- }
- }
复制代码
一周热门 更多>