基於msp430Timer A定時器的LED

2021-08-21 06:05:02 字數 3806 閱讀 5474

相信學過430的朋友對timer_a應該不陌生吧,反正我是難忘了,感覺學的比stm32的定時器都吃力啊,看起來簡單,但是,,,就是學起來吃力,怪我咯!

閒話少說,今天我就來總結一下我學習timer_a的痛苦經歷。

首先,我們要知道timer_a的基本結構吧:

總結起來就兩點:

16位的定時/計數器3個捕獲/比較暫存器

然後,我們來看看它的基本特徵

總結如下:

支援多多個捕獲/比較同時工作支援pwm波的輸出支援輸出時間間隔擁有多種中斷,如溢位中斷,捕獲/比較中斷

在然後,我就我這個專案要用到的知識跟大家講一下,其餘的知識呢,,,,啥,你給我糖,我也懶的講(傲嬌)

那麼,首先是定時器a,要工作,是不是要時鐘呢?沒有時鐘,它是工作不了滴!

所以,我們在用它之前,肯定是要選乙個時鐘的。那是不是只有乙個時鐘呢?

of course not! 它可是有4種時鐘可以選擇呢?

吶吶,看到沒? 手冊裡說了,我麼可以通過tasselx(2bits,屬於tactl(時鐘控制的縮寫)暫存器)來選擇它的時鐘,具體有四種:aclk(輔助時鐘),smclk(子系統時鐘),taclk(外接引腳時鐘),inclk(外接時鐘)。除此之外,我們還可以通過idx(同tasselx)來對時鐘進行分頻。至於taclr(1bit ,屬於tactl),是用來清零的,可以復位分頻設定等。

時鐘源選好了,那麼就該選比較/捕獲暫存器了。比較/捕獲暫存器有三個,這裡我只用了第乙個taccr0,所以,下面我就講它乙個,其餘兩個,你們要用到的話,就去看資料手冊吧,也很簡單的。

上圖列出了timer_a的9中暫存器,我們只先介紹taccr0,tacctl0.

首先,tacctl0,這是比較/捕獲暫存器0的控制暫存器。裡面有些位用來控制taccr0。我們這裡要只用到它的比較中斷,就是當tar(計數器暫存器)和taccr0中的設定值相等時,taccr0發生比較中斷,置位標誌位ccifg。(ccie,ccifg都是tacctl0中的位)

介紹完中斷,還不算完,我們還有設定計數器的計數方式呢!tar有三種計數方式:而它的設定是在tactl中:

它是通過設定mcx來對計數方式進行設定,翻譯為:

停止計數增計數連續計數增減計數

我們這裡會用到增計數,也就是在taccr0中設定乙個值,然後定時器就會啟動,從0開始,每乙個時鐘週期加1,直到加到與taccr0中值相等時,產生中斷。然後tar繼續從0開始計數,重複剛才的動作。

再然後就是具體電路了,這裡可以參見我的我的另一篇部落格:

最後就是**了:

#include 

#include "config.h" //開發板硬體巨集

uchar i=0; //跑馬燈迴圈變數

long long count=40000; //taccr0的值

uchar flag=0; //中斷標誌位

//*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

******

// msp430io口初始化

//*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

******

void port_init()

//*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

******

// timera初始化,設定為up模式計數

//*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

******

void timera_init()

//*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

******

// timera中斷服務程式,需要判斷中斷型別

//*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

******

#pragma vector = timera0_vector //taccr0的中斷向量

__interrupt void timer_a(void)

void main( void )

} }

}

搞定!

有待更新。。。。。。

MSP430 TIMER A定時器設定示例

先記下來,以後看,說不定就會了呢 問題很多,咱啥都不懂,能看出歡迎討論哈 直接設定 ta0cctl0 ccie ccr0 interrupt enabled ta0ccr0 1000 意思是週期為1000ms 1hz ta0ctl tassel 2 mc 1 taclr 選擇時鐘源smclk,遞增模...

MSP430f2619學習 Timer A定時器

msp430f2619學習 timer a定時器 1 時鐘源設定 tactl tassel 2 id 3 mc 1 taclr 此處選擇smclk,8分頻,向上計數模式,taclr位可清tar計數值 2 中斷配置 msp430f2619定時器a共有3個捕獲 比較暫存器,中斷配置涉及到的暫存器 tac...

MSP430系列微控制器 Timer A實現PWM

pwm訊號是一種具有固定週期 不定占空比的數碼訊號。如果timer a的計數器工作在增計數模式,輸出採用輸出模式7 復位 置位模式 利用暫存器taxccr0控制pwm波形的週期,用其他某個暫存器taxccrx來控制占空比 t高電平 t週期 設aclk taclk lfxt1 32768hz,mclk...