娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

定時器單片機常用的其本設備,用來產生精確計時或是其他功能;msp430的定時器不僅可以完成精確定時,還能產生PWM波形輸出,和捕獲時刻值(上升沿或是下降沿到來的時候)。這里完成一個比較通用的PWM波形產生程序。


硬件介紹:MSP430系列單片機的TimerA結構復雜,功能強大,適合應用于工業控制,如數字化電機控制,電表和手持式儀表的理想配置。它給開發人員提供了較多靈活的選擇余地。當PWM 不需要修改占空比和時間時,TimerA 能自動輸出PWM,而不需利用中斷維持PWM輸出。


MSP430F16x和MSP430F14x單片機內部均含有兩個定時器,TA和TB;TA有三個模塊,CCR0-CCR2;TB含有CCR0-CCR67個模塊;其中CCR0模塊不能完整的輸出PWM波形(只有三種輸出模式可用);TA可以輸出完整的2路PWM波形;TB可以輸出6路完整的PWM波形。


定時器的PWM輸出有有8種模式:


輸出模式0 輸出模式:輸出信號OUTx由每個捕獲/比較模塊的控制寄存器CCTLx中的OUTx位定義,并在寫入該寄存器后立即更新。最終位OUTx直通。


輸出模式1 置位模式:輸出信號在TAR等于CCRx時置位,并保持置位到定時器復位或選擇另一種輸出模式為止。


輸出模式2 PWM翻轉/復位模式:輸出在TAR的值等于CCRx時翻轉,當TAR的值等于CCR0時復位。


輸出模式3 PWM置位/復位模式:輸出在TAR的值等于CCRx時置位,當TAR的值等于CCR0時復位。


輸出模式4 翻轉模式:輸出電平在TAR的值等于CCRx時翻轉,輸出周期是定時器周期的2倍。


輸出模式5復位模式:輸出在TAR的值等于CCRx時復位,并保持低電平直到選擇另一種輸出模式。


輸出模式6PWM翻轉/置位模式:輸出電平在TAR的值等于CCRx時翻轉,當TAR值等于CCR0時置位。


輸出模式7PWM復位/置位模式:輸出電平在TAR的值等于CCRx時復位,當TAR的值等于CCR0時置位。


下圖是增計數模式下的輸出波形(本程序使用的是增模式3和7):

image

計數模式:


增計數模式


捕獲/比較寄存器CCR0用作Timer_A增計數模式的周期寄存器,因為CCR0為16位寄存器,所以該模式適用于定時周期小于65 536的連續計數情況。計數器TAR可以增計數到CCR0的值,當計數值與CCR0的值相等(或定時器值大于CCR0的值)時,定時器復位并從0開始重新計數。

image

連續計數模式


在需要65 536個時鐘周期的定時應用場合常用連續計數模式。定時器從當前值計數到0FFFFH后,又從0開始重新計數。

image

增/減計數模式


需要對稱波形的情況經常可以使用增/減計數模式,該模式下,定時器先增計數到CCR0的值,然后反向減計數到0。計數周期仍由CCR0定義,它是CCR0計數器數值的2倍。

image

TA定時器有比較、捕獲兩種工作方式;比較可以產生PWM波形等,捕獲可以精確的測量時間;這里用的是比較輸出。


硬件介紹就這么多了,其他的可以參考msp430x1xx_family_users_guide(用戶指南)。


程序實現:


本程序是直接從msp430f42x移植的,只改動了端口就能正常使用了。由此,430的模塊在不同的系列中是通用的,有關寄存器是一樣的;只是也許外部端口不太一樣。


程序初始化部分:完成TA相關寄存器的初始化。


char TAPwmInit(char Clk,char Div,char Mode1,char Mode2)

{

    TACTL = 0;                  //清除以前設置

    TACTL |= MC_1;              //定時器TA設為增計數模式  

    switch(Clk)                 //選擇時鐘源

    { 

        case 'A': case 'a':  TACTL|=TASSEL_1; break;    //ACLK

        case 'S': case 's':  TACTL|=TASSEL_2; break;    //SMCLK

        case 'E':            TACTL|=TASSEL_0; break;    //外部輸入(TACLK)

        case 'e':            TACTL|=TASSEL_3; break;    //外部輸入(TACLK取反)

        default :  return(0);                           //參數有誤

    } 

    switch(Div)                 //選擇分頻系數

    { 

        case 1:   TACTL|=ID_0; break;   //1

        case 2:   TACTL|=ID_1; break;   //2

        case 4:   TACTL|=ID_2; break;   //4

        case 8:   TACTL|=ID_3; break;   //8

        default :  return(0);           //參數有誤

    } 

    switch(Mode1)               //設置PWM通道1的輸出模式。

    { 

        case 'P':case 'p':          //如果設置為高電平模式

            TACCTL1 = OUTMOD_7;     //高電平PWM輸出

            P1SEL |= BIT2;          //從P1.2輸出 (不同型號單片機可能不一樣)

            P1DIR |= BIT2;          //從P1.2輸出 (不同型號單片機可能不一樣)              

            break;

        case 'N':case 'n':          //如果設置為低電平模式          

            TACCTL1 = OUTMOD_3;     //低電平PWM輸出

            P1SEL |= BIT2;          //從P1.2輸出 (不同型號單片機可能不一樣) 

            P1DIR |= BIT2;          //從P1.2輸出 (不同型號單片機可能不一樣)                

            break; 

        case '0':case 0:            //如果設置為禁用          

            P1SEL &= ~BIT2;         //P1.2恢復為普通IO口              

            break;                 

        default :  return(0);       //參數有誤

    } 

    switch(Mode2)                   //設置PWM通道1的輸出模式。

    { 

        case 'P':case 'p':          //如果設置為高電平模式

            TACCTL2 =OUTMOD_7;      //高電平PWM輸出

            P1SEL |= BIT3;          //從P1.3輸出 (不同型號單片機可能不一樣)

            P1DIR |= BIT3;          //從P1.3輸出 (不同型號單片機可能不一樣)

            break;

        case 'N':case 'n':          //如果設置為低電平模式          

            TACCTL2 =OUTMOD_3;      //低電平PWM輸出

            P1SEL |= BIT3;          //從P1.3輸出 (不同型號單片機可能不一樣)  

            P1DIR |= BIT3;          //從P1.3輸出 (不同型號單片機可能不一樣)              

            break; 

        case '0':case 0:            //如果設置為禁用          

            P1SEL &= ~BIT3;         //P1.3恢復為普通IO口              

            break;                 

        default :  return(0);       //參數有誤

    }    

    return(1);  

}

        主要是設置TACTL寄存器,讓TA工作于增模式,設置時鐘源和分頻;CCTLx設置對應的輸出模式;并且打開相應端口的第二功能。

設置周期函數:設置PWM波形的周期,單位是多少個TACLK周期。


void TAPwmSetPeriod(unsigned int Period)

{

    TACCR0 = Period;

}

工作于增模式時,TA計數到TACCR0,設CCR0就完成了周期的設置。


設置占空比:設置TA的PWM輸出的有效電平的時間。


void TAPwmSetDuty(char Channel,unsigned int Duty)

{

    switch(Channel)

    {

        case 1: TACCR1=Duty; break; 

        case 2: TACCR2=Duty; break;    

    }

}

根據參數分別設置每一路的參數。


設置占空比,用千分比設置:


* 入口參數:Channel: 當前設置的通道號  1/2

            Percent: PWM有效時間的千分比 (0~1000) 

* 出口參數:無

* 說    明: 1000=100.0%  500=50.0% ,依次類推        

* 范    例: TAPwmSetPermill(1,300)設置PWM通道1方波的占空比為30.0%

            TAPwmSetPermill(2,825)設置PWM通道2方波的占空比為82.5%

            */

void TAPwmSetPermill(char Channel,unsigned int Percent)

{

    unsigned long int Period;

    unsigned int Duty;

    Period = TACCR0;

    Duty = Period * Percent / 1000;

    TAPwmSetDuty(Channel,Duty);

}

這個函數用千分比來設置PWM輸出的有效時間。方便程序的使用。


有關定時器,TI提供的大量的例程,這些歷程都很簡潔、清晰。需要其他功能可以自己根據例程編寫對應的程序。程序實現就這么多了,下面說下本程序的使用方法。


使用示例:


使用方式:依然是在工程中加入c文件;文件包含h頭文件;然后就可以正常使用本函數了。詳細參考示例工程和main.c。


main主要程序如下:


#include "msp430x16x.h"     //430寄存器頭文件

#include "TAPwm.h"          //TA PWM輸出程序庫頭文件


void main()

{

    // Stop watchdog timer to prevent time out reset

    WDTCTL = WDTPW + WDTHOLD;

    ClkInit();

    

    TAPwmInit('A',1,'P','P');   //將定時器TA初始化成為PWM發生器

                  //時鐘源=ACLK ; 無分頻;  通道1和通道2均設為高電平模式。

    TAPwmSetPeriod(500);        //通道1/2的PWM方波周期均設為500個時鐘周期

    TAPwmSetDuty(1,200);        //1通道 有效200個時鐘周期

    TAPwmSetPermill(2,200);     //2通道 20.0%


    LPM0;

}

本程序調用程序庫,產生兩路PWM波形。


TA的PWM輸出就到這兒了,如果需要更多路的PWM波,可以使用TB,他可以產生6路完整的PWM波形;可以參考本程序編寫TB的波形輸出程序。


關鍵字:MSP430  定時器  PWM輸出 引用地址:MSP430定時器的PWM輸出

上一篇:用MSP430單片機實現微波成像系統的掃描控制與數據采集
下一篇:MSP430省電方式的兩種喚醒方法

推薦閱讀

  4月24日的深圳華強實業股份有限公司投資者關系活動中,深圳華強宣布了一記重磅消息,決定將成立半導體集團作為今年的工作重點!同時深圳華強宣布將成立半導體集團,擬將持有的旗下各授權分銷企業的股權轉到華強半導體集團。下面就物聯網小編一起來了解一下相關內容吧。  2018年工作重點將放在半導體集團  深圳華強表示經過近幾年的轉型和發展,公司...
4月19日,由車東西與2019上海車展承辦方——上海市國際展覽有限公司(SIEC)聯合舉辦的2019全球智能汽車供應鏈創新峰會在2019上海車展同期舉辦,大會邀請到來自學術界、整車企業、零部件企業、互聯網公司、新興自動駕駛公司和人工智能公司等智能汽車供應鏈領域的15位嘉賓登臺,分享對智能汽車產業發展變化的真知灼見。在峰會現場,小馬智行創始人兼CEO彭軍...
來自三星官網的最新消息稱,根據德國BMWi--聯邦經濟事務和能源部正式委托進行的一項研究顯示,三星電子在5G授權專利數量方面排名第一。 這份名為“關于根據5G標準聲明的專利實況調查”報告中,三星的5G授權專利家族數量在全球企業中高居榜首,這些專利家族都至少在歐洲、美國或專利合作條約(PCT)中進行了提交。這項研究是由柏林工業...
集微網4月28日消息,據國際數據公司(IDC)發布最新報告顯示, 2020年下半年,中國邊緣計算服務器的整體市場規模為15.42億美元,2020年全年達到26.55億美元,同比2019年增長16.3%。IDC預計,2019-2024年,中國邊緣計算服務器市場年復合增長率將達到22.0%,高于全球19.6%的平均增速。圖源:IDC報告中,IDC針對電信網絡(MEC)和行業邊緣應用市場做了進一步...

史海拾趣

問答坊 | AI 解惑

新手的pic學習筆記

我近來在學習一些pic的芯片,準備將學習過程中的一些點點滴滴寫下來,一方面為后面自己做參考,一方面和壇子里面的pic新手一起學習,一起進步。 首先需要感謝armok提供了這么一個開放的平臺, 然后感謝我的老師教會了我學習的方法, 還要感謝 ...…

查看全部問答∨

預測

本帖最后由 paulhyde 于 2014-9-15 09:10 編輯 共同學習  …

查看全部問答∨

Mini2440學習筆記

看到了一篇學習筆記,覺得不錯,轉載來 來源:ouravr foxfox 入手Mini2440,根據優龍的代碼,修改了LCD驅動,增加了中英文顯示,另外增加了一個貪吃蛇的游戲。 MDK中國版例程服務包,里面有優龍的代碼。 http://arm.embedinfo.com/down-li ...…

查看全部問答∨

奧特曼Zigbee讀書日記(二)--OSAL系統框架專題

9. TI協議棧所用系統框架探討。 51的系統往往不是太大,但是幾十K的程序,也足以讓一個初學者望而卻步。我們首先忽略C語言本身的難度,光是系統框架也讓生手讀起來很吃力,再加上這種到處是API跟\"define\"的程序,還沒有正式學習協議部分就已經讓 ...…

查看全部問答∨

Edge Detection Reference Design

Introduction Video and image processing typically require very high computational power. Given the increasing processing demands, the parallel processing capabilities of Altera® programmable logic devices (PLDs) make them a ...…

查看全部問答∨

求89c52燒錄軟件

那位用這個,發給兄弟伙了...謝了...1005450581…

查看全部問答∨

如何讀寫51程序

我想知道8051是如果從電腦下載到51芯片中的,我的板子是52,看了下芯片資料是用P30 P31串口寫入的,就算燒寫的時候,PSEN腳要拉低電平,這是怎么被拉低的,找了每天每找到 而且燒寫的軟件是用的驅動程序,這么復雜,應該不要用驅動就能送數據到51 ...…

查看全部問答∨

請問arm 模塊驅動?

請問各位大蝦,現在我用ARM模塊作了一個模塊,需要計算機把它識別成一個人體學輸入設備,該模塊現在用的是windows ce系統,請問是否可以做一個驅動程序?大概應該怎么做?…

查看全部問答∨

2007年E題 開關穩壓電源方案、原理圖、程序

本帖最后由 paulhyde 于 2014-9-15 03:46 編輯 2007年E題 開關穩壓電源方案、原理圖、程序    …

查看全部問答∨
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 昌平区| 山阴县| 达尔| 延安市| 泌阳县| 苏尼特左旗| 台江县| 梨树县| 兴宁市| 沁阳市| 长丰县| 惠东县| 区。| 定兴县| 临海市| 吉安市| 郴州市| 温宿县| 宜兰市| 巴林右旗| 远安县| 荔波县| 子长县| 梧州市| 独山县| 安阳县| 大兴区| 隆昌县| 青神县| 钦州市| 黄浦区| 岱山县| 陵水| 石嘴山市| 绥德县| 镇康县| 利辛县| 岢岚县| 阳城县| 茂名市| 连江县|