大俠們好,最近在搗鼓 cc1110 這個無線的芯片,
使用外部 26MHz 晶振
設(shè)置 time 1 定時器的定時時間 總是不對,不知道是哪里出錯了,請大俠們指點指點 ?
代碼如下:
我的定時時間的計算方法: 26MHz/128 = 203.125KHz, 1/203.125KHz = 5uS;
那么1ms 就是 1000/5us = 200次,所以TIM1_VAL 這個設(shè)置為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) //比較計數(shù)
#define TIMER1_RUN(value) (T1CTL = (value) ? T1CTL |= 0x01 : 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分頻,設(shè)置為模模式 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,貌似有幾百ms了 ?????????????????????
{
TempFlag = !TempFlag; //改變閃爍標志
}
void main()
{
TIME1_Init();
while(1)
{
if(TempFlag)
{
RLED = !RLED;
TempFlag = 0;
}
}
}
|