喝了酒的晚上,刚才的还没有写完。
给我参考程序:
void main()
{
Init_Timer_A();
}
unsigned int it=0; //测试时钟精度,用来校准
void Init_Timer_A(void)
{
/*----------------SMCLK--分频再分频------------SMCLK来源在main中选择:BCSCTL2=SELS */
// TACTL = TASSEL_2 + ID_3 + MC_1 ;//+ TAIE; //TASSEL_1:时钟,ID_3:分频,MC_1:增计数到CCR0从0重新计。err:TASSEL_0外部时钟,TAIE溢出中断允许,对应TIMERA1_VECTOR的TA0IV 10,不需要CCIE也中断
// CCTL0 = CCIE; //= CCR0 捕获比较中断使能,对应TIMERA0_VECTOR。计数中断见TAIE
// CCR0=62500; //8Mhz晶体/8=1M--->SMCLK, DCOx---->MCK(BCSCTL2 =SELM_1,主时钟(main中)用DOC), 8MHz/8(DIV_3)/8(ID_3)=125000--->TimerA,0.5S=125000/2=62500
//▲ CCTL1 = CCIE; //= CCR1 中断使能,▲▲FFF:如果使能,一定要用中断处理函数TIMERA1_VECTOR(才自清标志),否则TimerA0只执行一次。
/*----------------ACLK--------------*/
TACTL = TASSEL_1 + ID_0 + MC_1 ;//+ TAIE; //TASSEL_1:时钟,ID_3:分频,MC_1:增计数到CCR0从0重新计。err:TASSEL_0外部时钟,TAIE溢出中断允许,对应TIMERA1_VECTOR的TA0IV 10,不需要CCIE也中断
CCTL0 = CCIE; //= CCR0 捕获比较中断使能,对应TIMERA0_VECTOR。计数中断见TAIE
CCR0=32768; //1S
//▲ CCTL1 = CCIE; //= CCR1 中断使能,▲▲FFF:如果使能,一定要用中断处理函数TIMERA1_VECTOR(才自清标志),否则TimerA0只执行一次。
_EINT();
}
/*同一个定时器,但是有2个中断向量地址。TIMERA0对CCR0溢出中断;TIMERA1对CCR1/CCR2或TAR计数溢出中断,*/
#pragma vector=TIMERA0_VECTOR //g2332 TIMER0_A0_VECTOR
__interrupt void TimerA0()
{
P2DIR |= BIT5; //方向设为输出
P2OUT ^= BIT5; //输出取反,与位的1异或=位取反
}
|