利用MSP30F247單片機的計時器B產生8路週期信號, 週期分別為4S, 2S, 1S, 0.5, 0.25S, 0.125S, 0.0625S, 0.03125S。 八路週期信號分別從P1.0, 和P4.0~P4.6所對應TB0~TB6的埠輸出。
二、分析說明計時器B有7個捕獲/比較寄存器TBCCR0~TBCCR6。 若設置計時器B工作在連續模式, 利用7個比較器可以獲得7路不同的週期信號, 再利用計時器溢出中斷可以再輸出1路週期信號。 因此, 計時器A可以很方便的產生8路時間間隔不同的週期信號。
三、硬體電路硬體電路如下圖所示。
MSP30F247單片機的低頻晶振為32768Hz, 為ACLK提供精確時鐘, 計時器B使用ACLK作為時鐘源, 最大定時時間間隔2S(時鐘不分頻)和128S(時鐘64分頻)。 8路週期信號分別從P1.0, 和P4.0~P4.6所對應TB0~TB6的埠輸出。 用兩個虛擬示波器觀察。
四、程式設計#include "msp430f247.h"
#include "stdlib.h"
#include "string.h"
/*****************************************軟體延時, 主頻1M*******************/
#define CPU_F1 ((double)1000000)
#define delay_us1M(x) __delay_cycles((long)(CPU_F1*(double)x/1000000.0))
#define delay_ms1M(x) __delay_cycles((long)(CPU_F1*(double)x/1000.0))
/****************************************************************************/
/************************************************
函數名稱:主函數
函數功能:計時器B產生8路週期信號
入口參數:無
出口參數:無
描述:
作者:老馬識途單片機
日期:2018年1月15日
************************************************/
main()
{
WDTCTL = WDTPW + WDTHOLD;//關看門狗
P1DIR = 0x01;//P1.0輸出
P4SEL=0xff;//P4口選擇第二功能
P4DIR=0xff;//P4埠置為輸出口
TBCCTL0 = OUTMOD_4 + CCIE;//CCR0翻轉, CCR0中斷允許
TBCCTL1 = OUTMOD_4 + CCIE;//CCR1翻轉, CCR1中斷允許
TBCCTL2 = OUTMOD_4 + CCIE;//CCR2翻轉, CCR2中斷允許
TBCCTL3 = OUTMOD_4 + CCIE;//CCR3翻轉, CCR3中斷允許
TBCCTL4 = OUTMOD_4 + CCIE;//CCR4翻轉, CCR4中斷允許
TBCCTL5 = OUTMOD_4 + CCIE;//CCR5翻轉, CCR5中斷允許
TBCCTL6 = OUTMOD_4 + CCIE;//CCR6翻轉, CCR6中斷允許
TBCTL = TBSSEL_1 + MC_2 + TBIE;//計時器B的時鐘源為ACLK, 連續計數模式, 中斷允許
_BIS_SR(LPM0_bits+GIE);//進入LPM0低功耗模式, 總中斷允許
// while(1)
// {
//
// }
}
#pragma vector=TIMERB0_VECTOR
__interrupt void Timer_B0(void)//計時器B0中斷服務程式
{
TBCCR0 += 32768;//週期2S
}
#pragma vector=TIMERB1_VECTOR
__interrupt void Timer_B1(void)//計時器B1中斷服務程式,TBIV中斷向量
{
switch(TBIV)//TAIV中斷向量
{
case 2:
TBCCR1 += 32768/2;//週期1S
break;
case 4:
TBCCR2 += 32768/4;//週期0.5S
break;
case 6:
TBCCR3 += 32768/8;//週期0.25S
case 8:
TBCCR4 += 32768/16;//週期0.125S
break;
case 10:
TBCCR5 += 32768/32;//週期62.5MS
break;break;
case 12:
TBCCR6 += 32768/64;//週期31.25MS
break;
case 14:
P1OUT ^= 0x01;//週期4S
break;
}
}
五、程式說明單片機的程式運行主時鐘MCLK=DCO=1.1MHz。 計時器B採用連續計數模式, 計時器B的時鐘源為ACLK=32768Hz。 時基單位為1/32768S, 設置捕獲/比較寄存器TBCCR0~TBCCR6為適當的初始值, 可以得到要求的週期信號輸出, 利用計時器B的溢出中斷, 可以得到週期4S的信號。
六、模擬結果與分析在proteus中畫好電路圖後, 按兩下單片機, 將可執行檔裝載到單片機內, 點擊運行, 觀察虛擬示波器的波形。 如下圖所示。