本帖最后由 hpdell 于 2014-10-3 17:28 编辑
大侠们好,最近在捣鼓 cc1110 这个无线的芯片,
使用外部 26MHz 晶振
设置 time 1 定时器的定时时间 总是不对,不知道是哪里出错了,请大侠们指点指点 ?
代码如下:
我的定时时间的计算方法: 26MHz/128 = 203.125KHz, 1/203.125KHz = 5uS;
那么1ms 就是 1000/5us = 200次,所以TIM1_VAL 这个设置为200,
#define TIM1_VAL ( 200 ) //
#define TIMER1_INIT()
do{
T1CTL = 0x00;
T1CCTL0 = 0x00;
T1CCTL1 = 0x00;
T1CCTL2 = 0x00;
TIMIF &= ~0x40;
}while(0)
#define TIMER1_RUN(value) (T1CTL = (value) ? T1CTL |= 0x02 : T1CTL & ~0x03)
#define TIMER1_ENABLE_OVERFLOW_INT(val)
(TIMIF = (val) ? TIMIF | 0x40 : TIMIF & ~0x40)
void TIME1_Init(void);
void TIME1_Init(void)
{
TIMER1_INIT();
T1CTL |= 0x0C; //128分频,设置为模模式 0000 1100
T1CC0L = (u8)TIM1_VAL; //溢出值低8位
T1CC0H = (u8)(TIM1_VAL >> 8); //溢出值高8位
TIMER1_ENABLE_OVERFLOW_INT(TRUE); //定时器 T1 溢出中断使能
INT_ENABLE(INUM_T1, INT_ON); //定时器 T1 中断使能
EA = INT_ON; //全局中断使能
TIMER1_RUN(TRUE); //启动定时器
}
#pragma vector = T1_VECTOR
__interrupt void Timer1_ISR(void) //1ms中断,实际不止1ms ?????????????????????
{
static u16 cnt = 0;
if(cnt++ >= 500) //led灯亮灭各500ms
{
TempFlag = !TempFlag; //改变闪烁标志
cnt = 0;
}
}
void main()
{
TIME1_Init();
while(1)
{
if(TempFlag)
{
RLED = !RLED;
TempFlag = 0;
}
}
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>