MSP430F5529 上手小例程3

MSP430F5529 上手小例程3

*利用Timer_A比較模式的多路定時,讓LED閃爍

查閱資料得知

MSP430有兩類定時器:Timer_A(3個)&Timer_B(1個)
其中,每個定時器都配有不同的捕獲比較寄存器:Timer0_A(5個)、Timer1_A(3個)、Timer2_A(3個)、Timer0_B(7個)。


F5529的芯片管腳圖如下圖所示:
在這裏插入圖片描述
可以看出,P1.1-P1.5即爲Timer0_A的五個捕獲比較寄存器。這裏沒用TA0CCR0,是因爲它優先級最高,有一個專門的中斷向量。

計數器存放計數值最大爲0xFFFF,因此我們把它分爲五段,由於採用連續模式,當計數器達到TA0CCR1的值,即13107時,中斷標誌CCIFG位置位,同時TAIFG中斷標誌置位。依次類推,直至溢出。

代碼如下1

#include <msp430.h> 
#include <msp430f5529.h>

/**
 * main.c
 */
int main(void)
{
	WDTCTL = WDTPW | WDTHOLD;	// stop watchdog timer
	P1DIR |= (BIT1+BIT2+BIT3+BIT4+BIT5+BIT6);
	P1OUT = 0x00;
	TA0CCTL1 = CCIE;      //捕獲比較寄存器開啓CCIFG位中斷
	TA0CCR1 = 13107;      //植入要比較的值0xffff/5=13107
	TA0CCTL2 = CCIE;
	TA0CCR2 = 26214;
    TA0CCTL3 = CCIE;
    TA0CCR3 = 39321;
    TA0CCTL4 = CCIE;
    TA0CCR4 = 52428;

    TA0CTL |= TACLR + TAIE; //開啓中斷並清零
    TA0CTL |= TASSEL_1 + MC_2 + TAIE;   //選擇ACLK=32.768KHZ爲時鐘,連續模式,開中斷

    __enable_interrupt();
    while(1);

	return 0;
}

#pragma vector = TIMER0_A1_VECTOR
__interrupt void Timer(void)
{
    switch(__even_in_range(TA0IV,14))   
    /*只有在TA0IV的值爲0-14的偶數的時候才執行switch內的語句,
        可以提高switch語句的效率*/
    {
    case 2:
        P1OUT=BIT6;
        break;
    case 4:
        P1OUT=BIT2;
        break;
    case 6:
        P1OUT=BIT3;
        break;
    case 8:
        P1OUT=BIT4;
        break;
    case 14:    //定時器溢出
        P1OUT=BIT5;
        break;
    default:
        break;
    }
}

不能放視頻就放個圖片,就是五個小彩燈輪流閃爍
在這裏插入圖片描述


  1. 代碼來自:https://download.csdn.net/download/berrynard/11426569 博主是個搬運工並實踐了一下??? ↩︎

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章