喝了酒的晚上,剛才的還沒有寫完。
給我參考程序:
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異或=位取反
}
|