當(dāng)前位置:首頁(yè) > 技術(shù)學(xué)院 > 技術(shù)前線
[導(dǎo)讀]MSP430F5529共有兩類(lèi)共4個(gè)定時(shí)器,分別是Timer_A定時(shí)器3個(gè)和Timer_B定時(shí)器1個(gè),按照每個(gè)寄存器配備的捕獲/比較器的個(gè)數(shù)分別命名為T(mén)imer0_A(內(nèi)有5個(gè)捕獲比較器)、Timer1_A(3個(gè))、Timer2_A(3個(gè))、Timer0_B(7個(gè))。

定時(shí)器A是一個(gè)復(fù)合了捕獲/比較寄存器的十六位的定時(shí)(加減)計(jì)數(shù)器。定時(shí)器A支持多重捕獲/比較,PWM輸出和內(nèi)部定時(shí),具有擴(kuò)展中斷功能,中斷可以由定時(shí)器溢出產(chǎn)生或由捕獲/比較寄存器產(chǎn)生。

特征簡(jiǎn)介:

○四種運(yùn)行模式的異步16位定時(shí)/計(jì)數(shù)器

○自身時(shí)鐘源可選擇配置

○最多達(dá)5個(gè)可配置的捕獲/比較寄存器(CCR)

capture/compare registers

○可配置的PWM輸出

○異步輸入和輸出鎖存

○對(duì)所有Timer_A中斷快速響應(yīng)的中斷向量寄存器

下面這張圖形象的解釋了Timer_A的結(jié)構(gòu)特性

6.2 TA(Timer_A)的幾個(gè)基本操作設(shè)置(含寄存器介紹及設(shè)置)

聲明:所有寄存器同樣支持字和字節(jié)操作,不要忘記這是什么意思

所有寄存器初始化都為0x0000

6.2.1 TA控制寄存器TACTL(最常用最基本)

再次說(shuō)明一下例如:TA0CTL、TA1CTL、TA2CTL分別表示3個(gè)不同

定時(shí)器A的控制寄存器

rw-(0)表示默認(rèn)讀寫(xiě)均為0

TASSELx :時(shí)鐘源選擇。盡量不要選TASSEL0-TACLK外部時(shí)鐘源,因?yàn)槿绻鸗ACLK和CPU時(shí)鐘不同步,很容易出問(wèn)題。(TA0CLK接P1.0引腳)

00 TACLK

01 ACLK

10 SMCLK

11 ~TACLK

IDx:第一次分頻控制。ID0-1分頻;ID1-2分頻;ID2-4分頻;ID3-8分頻

MC:工作模式控制。(建議在修改定時(shí)器運(yùn)行模式前先停止定時(shí)器(中斷使能、中斷標(biāo)志、TACLR例外),以避免產(chǎn)生未知的誤操作。)

00 停止模式:定時(shí)器停止

01 增模式: 定時(shí)器計(jì)數(shù)到TACCR0

10 連續(xù)模式,定時(shí)器計(jì)數(shù)到0FFFH

11增減模式:定時(shí)器加計(jì)數(shù)到TACCR0然后減計(jì)數(shù)到0000H

TACLR:定時(shí)器清零位。該位置位會(huì)復(fù)位TA寄存器,時(shí)鐘分頻和計(jì)數(shù)方向。

TACLR位會(huì)自動(dòng)復(fù)位并置0

TAIE:定時(shí)器中斷使能

0:中斷禁止

1:中斷允許

TAIFG:中斷標(biāo)志位

0:沒(méi)有中斷發(fā)生

1:有中斷掛起

6.2.2 計(jì)數(shù)值存放寄存器TAR

①顯然,最大存放計(jì)數(shù)值為0xFFFFh;

②(類(lèi)似51單片機(jī))可以被用來(lái)存放一個(gè)初值,然后選用連續(xù)模式。這樣不斷計(jì)滿再手動(dòng)填充,從而達(dá)到精確計(jì)時(shí)的效果;

③默認(rèn)為0,且對(duì)該寄存器可以直接賦值;

6.2.3 擴(kuò)展寄存器TAEX0

很簡(jiǎn)單,這個(gè)寄存器就是為了控制時(shí)鐘源的二次分頻(看結(jié)構(gòu)圖)。

該寄存器的低3為定義為T(mén)AIDEX:000-111分別表示1-8分頻

6.2.4 捕獲/比較寄存器TACCR0-TACCR4(共5個(gè))

比較模式下,用來(lái)設(shè)定計(jì)數(shù)終值;

捕獲模式下用來(lái)將捕獲的TAR值存放進(jìn)TACCRx中。

6.3 MC控制的四種工作模式的詳細(xì)講解

6.3.1 MC=0停止模式

這是系統(tǒng)默認(rèn)的模式,定時(shí)計(jì)數(shù)器禁止工作。

6.3.2 MC=1增模式

總結(jié)幾句話:(紅色標(biāo)記的很重要)

①此模式下嚴(yán)禁從0xffff開(kāi)始計(jì)數(shù);

②注意從0計(jì)到TACCR0,實(shí)際上記了TACCR0+1個(gè)數(shù);

③計(jì)到TACCR0后,會(huì)回到0重新開(kāi)始計(jì)數(shù);

④如果TAR的值大于TACCR0,這時(shí)候會(huì)立即從0開(kāi)始計(jì)數(shù);

⑤當(dāng)定時(shí)器計(jì)數(shù)到TACCR0的值時(shí),中斷標(biāo)志CCIFG位(之后會(huì)講到)置位。當(dāng)定時(shí)器由TACCR0返回0時(shí),TAIFG中斷標(biāo)志置位;

⑥在定時(shí)器運(yùn)行時(shí)修改TACCR0,如果新的周期值大于或等于舊的周期值,或大于當(dāng)前的定時(shí)器計(jì)數(shù)值,那么定時(shí)器立刻開(kāi)始執(zhí)行新周期計(jì)數(shù)。如果新周期小于當(dāng)前的計(jì)數(shù)值,那么定時(shí)器回到0。但是,在回到0之前會(huì)多一個(gè)額外的計(jì)數(shù)。

6.3.3 MC=2連續(xù)模式

在連續(xù)模式中,定時(shí)器重復(fù)計(jì)數(shù)到0FFFFH,然后重新從0開(kāi)始增計(jì)數(shù)(除非每次重裝計(jì)數(shù)初值)。當(dāng)定時(shí)器從0FFFFH到0時(shí),TAIFG中斷標(biāo)志置位。

應(yīng)用:連續(xù)模式下利用捕獲/比較器產(chǎn)生需要的時(shí)間間隔。原理是:計(jì)數(shù)在一直進(jìn)行,捕獲器TACCRX中存有第一個(gè)計(jì)數(shù)終值,每次捕獲器計(jì)到TACCRX時(shí),會(huì)產(chǎn)生中斷標(biāo)志,我們可以在中斷服務(wù)函數(shù)中寫(xiě)入一個(gè)計(jì)算好的下一個(gè)的計(jì)數(shù)終值,這樣無(wú)限計(jì)算和中斷下去,那么該捕獲器就會(huì)產(chǎn)生一個(gè)穩(wěn)定的時(shí)間間隔序列。(其實(shí)吧,不明白也沒(méi)關(guān)系。就算明白了,也不好用,因?yàn)橛?jì)算起來(lái)很麻煩而且也不好用)

如圖:

6.3.4 MC=3增減模式(常用于生成PWM波)

①該模式下,計(jì)數(shù)方向是固定的,即讓定時(shí)器停止后再重新啟動(dòng)定時(shí)器,它就沿著停止時(shí)的計(jì)數(shù)方向和數(shù)值開(kāi)始計(jì)數(shù)。如果不希望這樣,就需要將TACLR置位來(lái)清除方向。TACLR位也會(huì)清除TAR的值和定時(shí)器的時(shí)鐘分頻。

②此模式下置位情況如下圖:

③當(dāng)定時(shí)器運(yùn)行時(shí),改變TACCR0的值,如果正處于減計(jì)數(shù)的情況,定時(shí)器會(huì)繼續(xù)減到0,新的周期在減到0后開(kāi)始。

如果正處于增計(jì)數(shù)狀態(tài),新周期大于等于原來(lái)的周期,或比當(dāng)前計(jì)數(shù)值要大,定時(shí)器會(huì)增計(jì)數(shù)到新的周期;如果新周期小于原來(lái)的周期,定時(shí)器立刻開(kāi)始減計(jì)數(shù),但是,在定時(shí)器開(kāi)始減計(jì)數(shù)之前會(huì)多計(jì)一個(gè)數(shù)。

6.4 捕獲比較模塊

這是在以上介紹的基礎(chǔ)上正式講TA的重要功能。

先看一個(gè)寄存器TACCTL0-TACCTL6:(TA中最復(fù)雜的寄存器,用到的時(shí)候查表啦)

CMx:捕獲模式設(shè)定 00 不捕獲

01 上升沿捕獲

10 下降沿捕獲

11上升和下降沿都捕獲

CCISx:捕獲源的選擇 00 CCIxA

01 CCIxB

10 GND

11 VCC

SCS:同步捕獲源,設(shè)定是否與時(shí)鐘同步

0 異步捕獲

1 同步捕獲

SCCI:選擇的CCI輸入信號(hào)由EQUx信號(hào)鎖存,并可通過(guò)該位讀取。

CAP: 0-比較模式 1-捕獲模式

OUTMOD:輸出模式控制位。(之后會(huì)在輸出模塊詳細(xì)解釋)

CCIE:中斷使能,該位允許相應(yīng)的CCIFG標(biāo)志中斷請(qǐng)求 。

0-中斷禁止 1 -中斷允許

CCI 3 :捕獲比較輸入,所選擇的輸入信號(hào)可以通過(guò)該位讀取

OUT : 對(duì)于輸出模式0,該位直接控制輸出狀態(tài) 。

0-輸出低電平 1-輸出高電平

COV:捕獲溢出位。該位表示一個(gè)捕獲溢出發(fā)出,COV必須由軟件復(fù)位。

0-沒(méi)有捕獲溢出發(fā)生 1-有捕獲溢出發(fā)生

CCIFG:捕獲比較中斷標(biāo)志位。

0-沒(méi)有中斷掛起 1-有中斷掛起

最后一個(gè)寄存器TAIV:(還記得外部中斷寄存器嗎,里面同樣存儲(chǔ)的只是一個(gè)中斷代號(hào))

里面沒(méi)有TACCR0的中斷標(biāo)志,因?yàn)門(mén)ACCR0優(yōu)先級(jí)最高,有一個(gè)專(zhuān)門(mén)的中斷向量)

這里面的標(biāo)志位需要軟件手動(dòng)清零。一種情況例外:兩個(gè)中斷同時(shí)發(fā)生,先響應(yīng)優(yōu)先級(jí)高的中斷,當(dāng)該中斷服務(wù)程序結(jié)束后,該位的中斷標(biāo)志會(huì)自動(dòng)清零,然后去響應(yīng)另外一個(gè)中斷。

6.4.1比較模式

TA啟動(dòng)時(shí)默認(rèn)為比較模式。

(CAP=0時(shí)選擇比較模式)

比較模式簡(jiǎn)介:(也就是一般意義上的定時(shí)計(jì)時(shí)模式)

這是定時(shí)器的默認(rèn)模式,當(dāng)在比較模式下的時(shí)候,與捕獲模式相關(guān)的硬件停止工作,如果這個(gè)時(shí)候開(kāi)啟定時(shí)器中斷,然后設(shè)置定時(shí)器終值(將終值寫(xiě)入TACCRx),開(kāi)啟定時(shí)器,當(dāng)TAR的值增加到和某個(gè)TACCRx里面的值相等的的時(shí)候,相應(yīng)的中斷標(biāo)志位CCIFGx置一,同時(shí)中斷標(biāo)志位TAIFG置位。若中斷允許未開(kāi)啟則只將中斷標(biāo)志位CCIFGx置一。

(還記得51單片機(jī)的定時(shí)器嗎)

注意:當(dāng)Timer_A要用到TACCR0的值作為終值來(lái)計(jì)數(shù)(也就是增模式或者增減模式),很顯然TACCR0的值一定要大于其TACCRx的值,否則那些比TACCR0大的計(jì)數(shù)值就沒(méi)有存在的意義了。

下面是我畫(huà)的一個(gè)圖。比較形象的解釋了工作原理。(期間TACCR的值不改變)

所謂的比較就是,如果計(jì)數(shù)器TAR中的值和某個(gè)TACCRx中的值相等了,那么相應(yīng)的標(biāo)志位就會(huì)置位。


msp430f5529定時(shí)器

這只是一個(gè)原理,實(shí)際應(yīng)用的時(shí)候,會(huì)很靈活,通過(guò)一個(gè)一個(gè)設(shè)定每次的TACCR值,可以得到想要的各種時(shí)間間隔。

總結(jié):比較模式用于選擇PWM輸出信號(hào)或在特定的時(shí)間間隔中斷。當(dāng)TAR計(jì)數(shù)到TACCRx的值時(shí):

○相應(yīng)的中斷標(biāo)志CCIFG置位;

○內(nèi)部信號(hào)EQUx=1

○EQUx根據(jù)輸出模式來(lái)影響輸出信號(hào)

○輸入信號(hào)CCI鎖存到SCCI

6.4.2 捕獲模式

當(dāng)CAP=1時(shí),選擇捕獲模式。捕獲模式用于記錄時(shí)間事件,比如速度估計(jì)或時(shí)間測(cè)量。捕獲輸入CCIXA和CCLXB連接外部的引腳或內(nèi)部的信號(hào),這通過(guò)CCISX位來(lái)選擇。CMX位選擇捕獲輸入信號(hào)觸發(fā)沿;上升沿、下降沿或兩者都捕獲。當(dāng)輸入信號(hào)的觸發(fā)沿到來(lái)時(shí),捕獲事件發(fā)生:

○定時(shí)器的TAR值復(fù)制到TACCRX寄存器中

○中斷標(biāo)志位CCIFG置位

注意:①捕獲信號(hào)可能會(huì)和定時(shí)器時(shí)鐘不同步,并導(dǎo)致競(jìng)爭(zhēng)條件的發(fā)生。將SCS位置位可以在下個(gè)定時(shí)器時(shí)鐘使捕獲同步

②如果第二次捕獲發(fā)生時(shí),第一次捕獲的TAR值還沒(méi)有及時(shí)被存到TACCRx,捕獲比較寄存器就會(huì)產(chǎn)生一個(gè)溢出邏輯,COV位在此時(shí)置位, COV位必須軟件清除。

6.5 輸出模塊

傳統(tǒng)的定時(shí)器,都是通過(guò)標(biāo)志位的判斷來(lái)定時(shí)觸發(fā)事件的。而430則具有輸出模塊,通過(guò)和定時(shí)結(jié)合起來(lái),可以方便的產(chǎn)生PWM信號(hào)或者其它控制信號(hào)

每個(gè)捕獲/比較器都有一個(gè)輸出口,如P1.1-P1.5對(duì)應(yīng)TA0.0-TA0.4這5個(gè)捕獲比較器的輸出。

輸出模式: 輸出模式由OUTMODx位來(lái)確定,如下表對(duì)于所有模式來(lái)說(shuō)(模式0除外),OUTx信號(hào)隨著定時(shí)器時(shí)鐘的上升沿而改變。輸出模式2,3,6和7對(duì)輸出模式0無(wú)效,因?yàn)榇四J较拢珽QUx=EQU0。

(復(fù)位指的是置0)

OUTMODX模式說(shuō)明

000輸出輸出信號(hào)OUTx由OUT位定義。當(dāng)OUT位更

新時(shí),OUTx信號(hào)立刻更新

001置位當(dāng)定時(shí)器計(jì)數(shù)到TACCRX值時(shí),輸出置位,并保

持置位直到定時(shí)器復(fù)位或選擇了另一個(gè)輸出模式

010翻轉(zhuǎn)/復(fù)位當(dāng)定時(shí)器計(jì)數(shù)到TACCRX值時(shí),輸出翻轉(zhuǎn)。當(dāng)定

時(shí)器計(jì)數(shù)到TACCR0值時(shí),輸出復(fù)位

011置位/復(fù)位當(dāng)定時(shí)器計(jì)數(shù)到TACCRX值時(shí),輸出置位。當(dāng)定

時(shí)器計(jì)數(shù)到TACCR0值時(shí),輸出復(fù)位

100翻轉(zhuǎn)當(dāng)定時(shí)器計(jì)數(shù)到TACCRX值時(shí),輸出翻轉(zhuǎn)。輸出

信號(hào)的周期將是定時(shí)器的2倍

101復(fù)位當(dāng)定時(shí)器計(jì)數(shù)到TACCRX值時(shí),輸出復(fù)位,并保

持復(fù)位直到選擇了另一個(gè)輸出模式

110翻轉(zhuǎn)/置位當(dāng)定時(shí)器計(jì)數(shù)到TACCRX值時(shí),輸出翻轉(zhuǎn)。當(dāng)定

時(shí)器計(jì)數(shù)到TACCR0值時(shí),輸出置位

111復(fù)位/置位當(dāng)定時(shí)器計(jì)數(shù)到TACCRX值時(shí),輸出復(fù)位。當(dāng)定

時(shí)器計(jì)數(shù)到TACCR0值時(shí),輸出置位

舉一個(gè)例子:結(jié)合上表看下圖

注意:在模式轉(zhuǎn)換的時(shí)候,一定要保持OUTMOD至少一位置位,除非轉(zhuǎn)向0模式。所以最好的做法是:先把OUTMOD置為7,然后再清除掉不需要的位。

做一個(gè)說(shuō)明:比較模式下,當(dāng)計(jì)數(shù)器TAR中的值和TACCRX中的設(shè)計(jì)值相等時(shí),相應(yīng)捕獲/比較器的EQUx就會(huì)置位。那么EQU0、EQUx和OUTMOD是怎么來(lái)影響輸出的呢?以模式2(翻轉(zhuǎn)/復(fù)位)為例,該模式的定義是這樣的:當(dāng)定時(shí)器計(jì)數(shù)到TACCRX值時(shí),輸出翻轉(zhuǎn)。當(dāng)定時(shí)器計(jì)數(shù)到TACCR0值時(shí),輸出復(fù)位。于是,這句話就也可以翻譯成在模式2的條件下,當(dāng)EQUX=1時(shí),輸出翻轉(zhuǎn);當(dāng)EQU0等于1的時(shí)候,輸出復(fù)位。這兩個(gè)信號(hào)這里相當(dāng)于兩個(gè)觸發(fā)(使能)信號(hào)了。

總結(jié)

實(shí)驗(yàn)一:

/*利用Timer_A比較模式下的多路定時(shí),讓LED閃爍*/

#include

void main(void)

{

WDTCTL=WDTPW+WDTHOLD;

P1DIR|=(BIT1+BIT2+BIT3+BIT4+BIT5);//P1.1-P1.5為輸出方向

P1OUT=0x00; //全部拉低,初始化LED全滅

TA0CCTL1=CCIE; //捕獲比較器1開(kāi)啟CCIFG位中斷

TA0CCR1=13107; //置入要比較的數(shù)值0xff/5=13107

TA0CCTL2=CCIE; //捕獲比較器2開(kāi)啟中斷

TA0CCR2=26214; //13107*2=26214

TA0CCTL3=CCIE; //捕獲比較器3開(kāi)啟中斷

TA0CCR3=39321; //13107*3=39321

TA0CCTL4=CCIE; //捕獲比較器4開(kāi)啟中斷

TA0CCR4=52428; //13107*4=52428

TA0CTL|=TACLR+TAIE; //開(kāi)啟中斷并清零

TA0CTL|=TASSEL_1+MC_2+TAIE;//選擇SCLK32.768KHZ作為時(shí)鐘,選用連續(xù)模式,并開(kāi)啟中斷

/*這樣的話,5個(gè)燈閃一遍的時(shí)間為0xffff/32768=2S*/

__enable_interrupt(); //開(kāi)啟總中斷

while(1);

}

/*TIMER0_A0_VECTOR是計(jì)時(shí)器0的CCR0的中斷寄存器,TIMER0_A1_VECTOR是計(jì)時(shí)器0的CCR1-CCR4、TA的寄存器*/

/*同理定時(shí)器TA1也是分為兩個(gè)TIMER1_A0_VECTOR和TIMER1_A1_VECTOR*/

#pragma vector=TIMER0_A1_VECTOR

__interrupt void TimerA(void)

{

switch(__even_in_range(TA0IV,14))

/* 這句話的意思是:只有在TA0IV的值是在0--14內(nèi)的偶數(shù)時(shí)才會(huì)執(zhí)行switch函數(shù)內(nèi)的語(yǔ)句

其作用是提高switch語(yǔ)句的效率*/

{

case 2:P1OUT=BIT1;break; //TACCR1 CCIFG置位,表明計(jì)數(shù)值和設(shè)定的13107相等了,也就是說(shuō)計(jì)了0.4S了

case 4:P1OUT=BIT2;break; //TACCR2 CCIFG置位,表明計(jì)了0.8S了

case 6:P1OUT=BIT3;break; //TACCR3 CCIFG置位,表明計(jì)了1.2S了

case 8:P1OUT=BIT4;break; //TACCR4 CCIFG置位,表明計(jì)了1.6S了

case 14:P1OUT=BIT5;break; //TAIFG置位,表明計(jì)了2S了

default:break;

}

}

實(shí)驗(yàn)二:比較模式-增減模式輸出PWM波


msp430f5529定時(shí)器

/*在比較和增減模式下產(chǎn)生PWM波(矩形波) */

/*提一個(gè)PWM波的用處:驅(qū)動(dòng)直流電機(jī)。我們知道對(duì)于直流電機(jī),驅(qū)動(dòng)它的電流的頻率并不影響轉(zhuǎn)速 ,只有占空比會(huì)影響轉(zhuǎn)速*/

/*開(kāi)發(fā)板上P2.0是有外接排針的,所以用這一端口輸出PWM*/

/*看CPU引腳發(fā)現(xiàn),P2.0為T(mén)A1.1,也就是定時(shí)器A1的1號(hào)捕獲比較器輸出口*/

#include

void main(void)

{

WDTCTL=WDTPW+WDTHOLD;

P2SEL|=BIT0; //聲明有特殊功能,不做普通I/O使用

P2DIR|=BIT0; //輸出

P2DS |=BIT0; //全力驅(qū)動(dòng),否則可能無(wú)法驅(qū)動(dòng)電機(jī)

P2OUT&=~BIT0; //初始化輸出低電平

/*把SMCL配置為XT2 4MHZ*/

P5SEL=BIT2+BIT3; //聲明特殊功能,將用作外部時(shí)鐘晶振XT2輸入

UCSCTL6&=~XT2OFF; //開(kāi)啟XT2

while(SFRIFG1 & OFIFG)

{

UCSCTL7 &=~(XT2OFFG+DCOFFG+XT1LFOFFG);//清除3種時(shí)鐘錯(cuò)誤標(biāo)志

SFRIFG1&=~(OFIFG);//清除時(shí)鐘錯(cuò)誤標(biāo)志位

} //直到XT2從起振到振蕩正常,沒(méi)有錯(cuò)誤發(fā)生

UCSCTL4|=SELS_5; //把SMCLK的時(shí)鐘源選為XT2 4MHZ

TA1CCTL0=CCIE; //定時(shí)器A1的捕獲比較器0開(kāi)啟CCIFG位中斷

TA1CCR0=200; //置入計(jì)數(shù)終值,則PWM頻率為10KHZ

TA1CCTL1=CCIE; //捕獲比較器1開(kāi)啟中斷

TA1CCR1=50; //占空比為75%

TA1CTL|=TACLR; //將計(jì)時(shí)器A1清零

TA1CTL|=TASSEL_2+MC_3; //定時(shí)器選擇SMCLK作為時(shí)鐘源,且為增減模式

TA1CCTL1=OUTMOD_4; //定時(shí)器A1中的捕獲比較器1,輸出模式為4翻轉(zhuǎn)

while(1);

}

//呼吸燈//

// 介紹: 該程序利用TIMER A 的 UP模式 在P1.3腳產(chǎn)生PWM輸出

// 將CCR0設(shè)置為1500來(lái)定義PWM的周期,利用循環(huán)不斷改變CCR1的值,

// 實(shí)現(xiàn)利用改變PWM的占空比來(lái)改變LED亮度.

// SMCLK = MCLK = TACLK = default DCO

#include

void delay_nms(unsigned int n)// 延時(shí)函數(shù)

{

unsigned int j;

for (j=0;j<(n);j++)

{

__delay_cycles(400); //太短會(huì)使LED顯得好像在常亮,太長(zhǎng)就要等較長(zhǎng)時(shí)間來(lái)觀察了

}

}

void main(void)

{

unsigned const PWMPeriod = 1500; //設(shè)置PWM周期參數(shù),const聲明此值不允許改變.該數(shù)值太大,會(huì)導(dǎo)致LED閃爍

volatile unsigned int i; //聲明變量i是隨時(shí)可變的,系統(tǒng)不要去優(yōu)化這個(gè)值

WDTCTL = WDTPW + WDTHOLD; // 關(guān)閉看門(mén)狗

P1DIR |=BIT3; // 設(shè)置 P1.3為輸出

P1SEL |=BIT3; // 設(shè)置 P1.3為T(mén)A0.2輸出

TA0CCR0 = PWMPeriod; // 設(shè)置PWM 周期

TA0CCTL2 = OUTMOD_7; // 設(shè)置PWM 輸出模式為:7 - PWM復(fù)位/置位模式,

// 即輸出電平在TAR的值等于CCR2時(shí)復(fù)位為0,當(dāng)TAR的值等于CCR0時(shí)置位為1,改變CCR2,從而產(chǎn)生PWM。其實(shí)模式2也可以

TA0CTL= TASSEL_2 +MC_1; // 設(shè)置TIMERA的時(shí)鐘源為SMCLK, 計(jì)數(shù)模式為up,到CCR0再自動(dòng)從0開(kāi)始計(jì)數(shù)

while(1)

{

TA0CCR2=0;//確保最開(kāi)始是暗的

//漸亮過(guò)程:不斷設(shè)置TA0CCR2的值,使翻轉(zhuǎn)的時(shí)間變長(zhǎng),改變PWM的占空比

for(i=0;i

{

TA0CCR2=i;

delay_nms(4-(i/500)); //占空比變化的延時(shí),調(diào)整延遲時(shí)間可改變呼吸燈變暗的速度

//在暗的時(shí)候延長(zhǎng)delay時(shí)間,可增強(qiáng)效果

}

//漸暗過(guò)程:不斷設(shè)置TA0CCR2的值,使翻轉(zhuǎn)的時(shí)間變短,改變PWM的占空比

for(i=PWMPeriod;i>0;i-=1)

{

TA0CCR2=i;

delay_nms(4-(i/500)); //占空比變化的延時(shí),調(diào)整延遲時(shí)間可改變呼吸燈變暗的速度

//在暗的時(shí)候延長(zhǎng)delay時(shí)間,可增強(qiáng)效果

}

TA0CCR2=0; //確保燈暗

delay_nms(250); //時(shí)間長(zhǎng)一點(diǎn),增強(qiáng)視覺(jué)效果

}

}

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專(zhuān)欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車(chē)的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車(chē)技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車(chē)工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車(chē)。 SODA V工具的開(kāi)發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車(chē) 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開(kāi)幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉