您的位置:首頁>正文

基於Proteus的MSP430單片機模擬實例21

一、任務要求

利用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中畫好電路圖後, 按兩下單片機, 將可執行檔裝載到單片機內, 點擊運行, 觀察虛擬示波器的波形。 如下圖所示。

同類文章
Next Article
喜欢就按个赞吧!!!
点击关闭提示