|
- #include <msp430.h>
-
- #define LED BIT0 // 假設(shè)LED連接在P1.0端口
-
- void init_led(void)
- {
- P1DIR |= LED; // 設(shè)置P1.0為輸出
- P1OUT &= ~LED; // 初始LED熄滅
- }
-
- // Timer_A中斷服務(wù)程序
- #if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
- #pragma vector=TIMERA0_VECTOR
- __interrupt void Timer_A (void)
- #elif defined(__GNUC__)
- void __attribute__ ((interrupt(TIMERA0_VECTOR))) Timer_A (void)
- #else
- #error Compiler not supported!
- #endif
- {
- P1OUT ^= LED; // 切換LED狀態(tài)
- }
-
- void init_timer(void)
- {
- // 配置Timer_A為增計(jì)數(shù)模式,SMCLK分頻,分頻系數(shù)和計(jì)數(shù)周期視需要設(shè)定
- TACCR0 = 0; // 計(jì)數(shù)器清零
- TACTL = TASSEL_2 + ID_3 + MC_1; // SMCLK, 分頻8, 增計(jì)數(shù)模式
-
- // 假設(shè)SMCLK = 1MHz, 分頻8, 則Timer_A計(jì)數(shù)周期為1us
- // 為了得到0.5秒的中斷周期, 需要計(jì)數(shù)500,000次
- // 但TACCR0是16位的, 所以可能需要用到TACCR1 (如果TACCR1存在)
- // 或者使用其他策略, 如溢出中斷+TACCR0計(jì)數(shù)
-
- // 示例: 使用溢出中斷 + TACCR0計(jì)數(shù)到某個(gè)值
- TACCR1 = 0; // 假設(shè)TACCR1存在且用作高位
- TACCR0 = 某個(gè)值; // 取決于你的SMCLK頻率和所需的中斷頻率
-
- // 清除中斷標(biāo)志位
- TAIFG = 0;
-
- // 使能定時(shí)器A中斷
- TAIE = 1;
-
- // 啟動(dòng)定時(shí)器A
- TACTL |= MC_1;
- }
-
- int main(void)
- {
- WDTCTL = WDTPW + WDTHOLD; // 停止看門狗
- init_led();
- init_timer();
-
- // 等待中斷
- __bis_SR_register(GIE); // 使能全局中斷
- __bis_SR_register(CPUOFF); // CPU進(jìn)入低功耗模式, 等待中斷
-
- return 0;
- }
復(fù)制代碼
可以參考一下這個(gè) |
|