久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 5887|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

MSP430 LaunchPAD學(xué)習(xí)筆記

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:302552 發(fā)表于 2018-4-5 22:15 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
一:端口配置
   1:P1DIR   設(shè)置為1,相應(yīng)管腳為輸出。設(shè)置為0.相應(yīng)管腳                              為輸入狀態(tài)。
   2:P1IE      設(shè)置為1,相應(yīng)管腳具有中斷功能。設(shè)置為0,                            相應(yīng)管腳沒有中斷功能。
   3:P1IES   設(shè)置為1,選擇下降沿觸發(fā)方式,設(shè)置為0,選                            擇上升沿觸發(fā)方式。
   4:P1IFG    P1端口的中斷標(biāo)志寄存器,如果P1端口當(dāng)某                            個(gè)管腳設(shè)置成中斷管腳,當(dāng)有中斷觸發(fā)時(shí),想應(yīng)比特為1 ;                              如果沒有中斷觸發(fā),相應(yīng)比特為0.
5: P1IN   P1端口輸入寄存器,在輸入模式下,讀取該寄                            存器相應(yīng)管腳上的數(shù)據(jù)。
6: P1OUT   P1端口的輸出去寄存器,在輸出模式下,如                            果該寄存器相應(yīng)比特設(shè)置為1時(shí),相應(yīng)管腳輸出高電平;                            如果該寄存器相應(yīng)比特為0時(shí),相應(yīng)管腳輸出低電平。
7: P1SEL寄存器  P1端口功能選擇寄存器,該寄存器主要                            控制P1端口的I/O管腳作為一般I/O還是外圍模塊的功能                            端口,該寄存器的相應(yīng)比特為1時(shí)候,相應(yīng)管腳為外圍功能                           模塊,當(dāng)該寄存器為0時(shí),相應(yīng)管腳為一般I/O管腳。
二  LaunchPad 寫程序的必要頭文件和格式:
/*===================================================
#include"msp430g2553.h"
Void main()
{
    WDTCTL=WDTPW+WDTHOLD;//關(guān)閉看門狗。
    //WDTPW 是看門狗的密碼,寫錯(cuò)了會(huì)導(dǎo)致系統(tǒng)復(fù)位。
   **(程序)
}
=====================================================*/
三  點(diǎn)亮LED
  僅僅是對(duì)IO 口的輸入輸出操作。與51 很不相同。
P1DIR|=BIT0;//設(shè)置P1.0 為輸出方向。===P1DIR|=0x01;
//{P1DIR=BIT0;是設(shè)置P1.0 為輸出,其他全部為輸入方向。}
//注意:LaunchPad 中很多操作是與,或,非等操作組成,時(shí)刻注意。
P1OUT|=BIT0;//這條指令就是設(shè)置P1.0 輸出為高電平。
這樣,就點(diǎn)亮了LED(接在P1.0 上的LED);
具體程序:
#include"msp430g2553.h"
Void main()
{
WDTCTL=WDTPW+WDTHOLD;
P1DIR|=BIT0;
P1OUT|=BIT0;
While(1);
}
四: 閃爍LED
LaunchPad 上面自帶有2 個(gè)LED,一個(gè)接在P1.0 上,一個(gè)接在P1.6 上。
我們用2 個(gè)交替閃爍。
#include"msp430g2553.h"
Void main();第一個(gè)字母大寫
{
WDTCTL=WDTPW+WDTHOLD;
P1DIR|=BIT0+BIT6;//設(shè)置P1.0 和P1.6 為輸出
P1OUT|=BIT0;//線讓LED0 亮。
While(1)
{
Unsigned int i=50000;
While(i--);
P1OUT^=0x41;//對(duì)P1.0 和P1.6 取反,所以LED0 和LED1 會(huì)交替閃爍。
}
}
五:中斷系統(tǒng)
LaunchPad 的中斷系統(tǒng)功能相當(dāng)強(qiáng)大,51 只有5 個(gè)中斷源,2 個(gè)定時(shí),2 個(gè)外部,
一個(gè)串行口。但是LaunchPad 的中斷源幾乎是所有的引腳和所用的定時(shí)器。
在這里,最重要的就是中斷向量的判斷了。
定時(shí)器一般都是:
vector=TIMER0_A0_VECTOR
vector=TIMER0_A1_VECTOR
vector=TIMER1_A0_VECTOR
vector=TIMER1_A1_VECTOR
引腳中斷的向量:
vector=PORT1_VECTOR;    P1 口的中斷向量。
判斷是哪個(gè)引腳的話,有2 種辦法:
舉例子:P1.3 和P1.4 都是中斷的輸入引腳。現(xiàn)在進(jìn)了中斷,我如何判斷是那個(gè)引
腳引起的呢?
第一種方法:
vector=PORT1_VECTOR
__interruput void Port1 (void)
{
If(P1IFG&BIT3);判斷的是P1.3 產(chǎn)生的中斷。
{
;要執(zhí)行的函數(shù)。
P1IFG=0x00;//清0 中斷標(biāo)志位。
}
If(P1IFG&BIT4)
{
;P1.4 產(chǎn)生的中端,執(zhí)行相應(yīng)的函數(shù)。
P1IFG=0x00;
}
}
第二種方法:
vector=PORT1_VECTOR
__interruput void Port1 (void)
{
P1IFG&=BIT3+BIT4;//因?yàn)橹挥玫搅薖1.0 和P1.4,其他的中斷標(biāo)志全部清零。
(或者:P1IFG=P1IFG&0x18)
Switch(P1IFG)
{
Case 0x08: vector=3;break; //P1.3 產(chǎn)生的中斷
Case 0x10:vector=4;break;//P1.4 產(chǎn)生的中斷
}
}
切記:進(jìn)入中斷函數(shù)后要做的第一件事是,清除中斷標(biāo)志。
例程:
#include<msp430g2553.h>
Void main(void)
{
  WDTCTL=WDTPW+WDTHOLD;
  P1DIR|=BIT0;  //                            設(shè)置P1.0輸出
  P1IES |=BIT3;  //     設(shè)置從高到底跳變觸發(fā)
  P1IFG&=~BIT3//                清除中斷標(biāo)志位
  P1IE |=BIT3   //                   使P1.3能中斷
  _BIS_SR(LPM_bits+GIE);//              啟動(dòng)LMP4節(jié)能模式
}
#proagma vector=PORT1_VECTOR
_interrupt  void Port_1(void)
{
   If(P1IFG&BIT3)
  {
P1OUT^=BIT0;   
P1IFG&=~BIT3;
  }
}
程序一開始
1   WDTCTL=WDTPW+WDTHOLD;  HOLD住看門狗
2   P1DIR|=BIT0;將P1.0              設(shè)置為輸出口。lunchpad上的P1.O接有一個(gè)LED.
3. 接下來到P1IES |= BIT3; 在上一節(jié)中已經(jīng)介紹了,P1IES 寄存器是中斷沿選擇寄存器。這里是選擇位下降沿觸發(fā)中斷。
4. P1IFG &= ~BIT3; 為清除中斷標(biāo)志,保證程序正常運(yùn)行,當(dāng)然此句可以不寫,這里只是做為例子
5. P1IE |= BIT3; 在上一節(jié)中已經(jīng)介紹了,P1IE寄存器是使能中斷事件發(fā)生的寄存器。
  • _BIS_SR(LPM4_bits + GIE);這里使程序進(jìn)入最低功耗(LPM4)狀態(tài)。靠中斷來觸發(fā)喚醒CPU,在文章開始已經(jīng)介紹有,假如在中斷函數(shù)中沒有寫有退出低功耗狀態(tài)的指令,程序會(huì)在進(jìn)入低功耗的下一句中卡死,不再運(yùn)行下去。另外_BIS_SR(GIE); 為打開總中斷的意思。
  • 接下來到中斷函數(shù)的編寫。以此為例,詳細(xì)介紹中斷函數(shù)的編寫。如上所示,中斷函數(shù)編寫的規(guī)則為
#pragma vector= 中斷向量源
__interrupt void 函數(shù)名(void)

摁住“Ctrl  +  左鍵”點(diǎn)擊PORT1_VECTOR即可查看到所有的“中斷向量”
在上面的中斷向量中,加黑的位中斷向量源,寫入中斷函數(shù)編寫語法規(guī)則里面即可。而函數(shù)名則可以任意編寫。比如我要編寫一個(gè)有定時(shí)器1,CCR0寄存器溢出產(chǎn)生的中斷,則可以這樣編寫
#pragma vector= TIMER1_A0_VECTOR
__interrupt void T1A0Int(void)
{
//程序代碼。。。
}
假如是多IO輸入中斷,則如下所寫。
vector=PORT1_VECTOR
__interrupt void Port1()
{

//以下為參考處理程序,不使用的端口應(yīng)當(dāng)刪除其對(duì)于中斷源的判斷。
if((P1IFG&BIT0) == BIT0)
{
P2OUT&=~BIT0; //處理P1IN.0中斷
P1IFG &= ~BIT0; //清除中斷標(biāo)志
//以下填充用戶代碼
}
else if((P1IFG&BIT1) ==BIT1)
{
P2OUT&=~BIT1; //處理P1IN.1中斷
P1IFG &= ~BIT1; //清除中斷標(biāo)志
//以下填充用戶代碼
}
else if((P1IFG&BIT2) ==BIT2)
{
P2OUT&=~BIT2; //處理P1IN.2中斷
P1IFG &= ~BIT2; //清除中斷標(biāo)志
//以下填充用戶代碼
}
else if((P1IFG&BIT3) ==BIT3)
{
//處理P1IN.3中斷
P1IFG &= ~BIT3; //清除中斷標(biāo)志
//以下填充用戶代碼
}
else if((P1IFG&BIT4) ==BIT4)
{
P2OUT&=~BIT4; //處理P1IN.4中斷
P1IFG &= ~BIT4; //清除中斷標(biāo)志
//以下填充用戶代碼
}
else if((P1IFG&BIT5) ==BIT5)
{
//處理P1IN.5中斷
P1IFG &= ~BIT5; //清除中斷標(biāo)志
//以下填充用戶代碼
}
else if((P1IFG&BIT6) ==BIT6)
{
//處理P1IN.6中斷
P1IFG &= ~BIT6; //清除中斷標(biāo)志
//以下填充用戶代碼
}
else
{
//處理P1IN.7中斷
P1IFG &= ~BIT7; //清除中斷標(biāo)志
//以下填充用戶代碼
}
LPM3_EXIT; //退出中斷后退出低功耗模式。若退出中斷后要保留低功耗模式,將本句屏蔽
}
六   定時(shí)器模塊
文先,介紹幾個(gè)英文縮寫的意思以及一些注意的地方。
1. Timer0/1 定時(shí)器0/1,在User's Guide中用的是TimerA/B,所指的也是Timer0/1 。G2553Datasheet中用的是Timer0/1 ,本文以G2553Datasheet為準(zhǔn)。全文以Timer0為例,Timer1類同。
2. TAxR(x = 0/1)定時(shí)器x對(duì)應(yīng)的計(jì)數(shù)器,這是一個(gè)只讀寄存器。硬件自動(dòng)驅(qū)動(dòng)計(jì)數(shù)。
  • EQUyy = 0/1/2)計(jì)數(shù)事件發(fā)生寄存器,當(dāng)TAxR  =  TAxCCRy時(shí)EQUy1
定時(shí)器簡(jiǎn)介
MSPG2553共有兩個(gè)定時(shí)器,Timer0、Timer1,他們都是十六位的定時(shí)、計(jì)數(shù)器,內(nèi)含三個(gè)捕獲、比較寄存器。兩個(gè)定時(shí)器均支持多個(gè)捕獲、PWM輸出、間歇性計(jì)時(shí),定時(shí)器包含多個(gè)中斷源,可以是計(jì)數(shù)溢出中斷、捕獲中斷等等。
定時(shí)器包含:
同步十六位定時(shí),計(jì)數(shù)器運(yùn)行模式。
時(shí)鐘源從MCLK、SMCLK、ACLK任意選擇
三個(gè)比較,捕獲寄存器。
中斷向量寄存器能快速解碼的所有定時(shí)器中斷
Timer0組成框圖
下面簡(jiǎn)要介紹一下該硬件框圖的意思,從左上角看,首先是一個(gè)時(shí)鐘源選擇寄存器TASSELx,通過該寄存器選擇定時(shí)器的時(shí)鐘源,選擇了時(shí)鐘源后有一個(gè)分頻器Divider,相應(yīng)的設(shè)置寄存器是IDx,再過來就到一個(gè)定時(shí)器的核心部分,一個(gè)16位的定時(shí)器TAR。其右側(cè)有一個(gè)定時(shí)器的計(jì)數(shù)模塊,MCx寄存器用來設(shè)置計(jì)數(shù)模式。接下來,TAR正下方有三個(gè)橫線,右側(cè)標(biāo)有CCR0、CCR1、CCR2,意思是CCR1、CCR0的框圖和下方CCR2的框圖是一樣的。此處省略不寫。在CCR中,左上角為一個(gè)捕獲源選擇寄存器。可以從CCI2A、CCI2B、GND或者VCC選擇捕獲源,選擇捕獲源后有一個(gè)選擇捕獲模式寄存器Capture Mode,然后過來有一個(gè)捕獲溢出狀態(tài)寄存器COV,SCS同步/異步捕獲模式選擇位,然后連接到捕獲比較寄存器。下方為模式選擇寄存器,具體設(shè)置可以查看相應(yīng)的寄存器設(shè)置。
這里僅是大概介紹一下Timer0的寄存器,具體的設(shè)置使用還看參考相應(yīng)的寄存器并結(jié)合例程慢慢學(xué)習(xí)理解。
定時(shí)器運(yùn)行方式
下面簡(jiǎn)要重點(diǎn)介紹定時(shí)器計(jì)數(shù)模塊的四種模式以及7種輸出模式。
Timer0有一個(gè)在不斷計(jì)數(shù)的只讀寄存器TA0R。計(jì)數(shù)器的計(jì)數(shù)模式共有四種,
停止模式(Stop mode)、連續(xù)增計(jì)數(shù)模式(Up mode)、遞增計(jì)數(shù)模式(continuous mode)、增減計(jì)數(shù)模式(Up/down mode)。由上圖可知,這四種模式可以通過MCx寄存器進(jìn)行設(shè)置。
以上四種模式可以由下圖可以很好理解。
1. Stop模式計(jì)數(shù)器不工作。
2. 連續(xù)計(jì)數(shù)模式為計(jì)數(shù)器從零開始連續(xù)增計(jì)數(shù)一直到0xFFFF即65535,然后又重新從零開始計(jì)數(shù)。
3. 遞增計(jì)數(shù)模式與連續(xù)計(jì)數(shù)模式僅有一點(diǎn)點(diǎn)區(qū)別,遞增模式為計(jì)數(shù)器連續(xù)增加到TA0CCR0(即圖中的CCR0)中的值后又重新從零開始計(jì)數(shù)。TA0CCR0的值時(shí)可以在程序中直接賦值的。
4. 遞增遞減模式也很好理解,計(jì)數(shù)器從零開始計(jì)數(shù)到CCR0后又自動(dòng)減數(shù),到零后又增計(jì)數(shù),就像三角波一樣。
每一個(gè)捕獲比較模塊都有一個(gè)輸出單元,這個(gè)輸出單元專門用來產(chǎn)生以下如PWM的波形信號(hào),每一個(gè)輸出單元都可以通過配置OUTMOD寄存器的值來設(shè)定八種信號(hào)輸出模式,
接下來再介紹一下定時(shí)器的捕獲/比較功能,具體應(yīng)查看技術(shù)手冊(cè)。
捕獲模式
捕獲模式可以用來速度計(jì)算或時(shí)間測(cè)量.CCIxA ,CCIxB的捕獲源可以連接到外部引腳或者內(nèi)部信號(hào),可以設(shè)定CCIDx,CMx,位讓寄存器捕獲上升,下降,或者兩個(gè)信號(hào)的邊緣.輸入信號(hào)的電平可以通過CCI位的讀取.
當(dāng)設(shè)置寄存器CAP=1時(shí),使能捕獲模塊.
比較模式
比較模式設(shè)置CAP = 0的情況向,比較模式用于產(chǎn)生PWM信號(hào)。或者在指定時(shí)間里輸出終端信號(hào),當(dāng)TAxR計(jì)數(shù)到TACCRx時(shí)
建立起CCIFG位
中斷事件發(fā)生標(biāo)志位EQUx=1
EQUx的隱含改變將影響輸出模式
輸入信號(hào)CCI被鎖上SCCI
  • 增計(jì)數(shù)模式下的輸出
   

2. 遞增計(jì)數(shù)模式下的輸出
*
  • 第增/第減計(jì)數(shù)模式下的輸出
**************************************************************** /
  / ******************************************************************
   *                    TACTL寄存器,Timer_A 控制寄存器
   * TASSEL_x:TA時(shí)鐘源選擇寄存器
   *     00 TACLK
   *     01 ACLK
   *     10 SMCLK
   *     11 INCLK
   * IDx:     時(shí)鐘源分頻寄存器。為輸入時(shí)鐘分頻選擇
   *       00  /1
   *       01  /2
   *       10  /4
   *       11  /8
   *  * ************************************************************** /
   *              定時(shí)計(jì)數(shù)模塊 =四中模式+7種輸出方式
/ *****************************************************************
   *
   * MCx:    計(jì)數(shù)模式寄存器   模式控制,當(dāng)TA不用于節(jié)省功耗時(shí),將MCx=00h
   *     00  停止模式:定時(shí)器停止
   *     01  增模式  :定時(shí)器計(jì)數(shù)到TACCR0
   *     10  連續(xù)模式:定時(shí)器計(jì)數(shù)到0FFFFh
   *     11  增減模式:定時(shí)器計(jì)數(shù)到TACCR0 然后減到000h
   *
   * TACLR:  定時(shí)器清零。置位時(shí)會(huì)復(fù)位TAR,時(shí)鐘分頻和計(jì)數(shù)方向。
   *     TACLR位會(huì)自動(dòng)復(fù)位并讀出值為零。
   *
   * TAIE:   TA中斷允許。改為允許TAIFG中斷請(qǐng)求
   *     0 中斷禁止
   *     1 中斷允許
   * TAIFG:  TA中斷標(biāo)志位
   *     0 無中斷掛起
   *     1 中斷掛起
   * ************************************************************** /
/ *****************************************************************
*
*
   *             TACCTLx,捕獲比較控制寄存器
   * CMx:  捕獲模式
   *   00 不捕獲
   *   01 上升沿捕獲
   *   10 下降沿捕獲
   *   11 上升和下降同時(shí)捕
   * CCISx: 捕獲比較選擇,改為選擇TACCRx的輸入信號(hào)
   *   00 CCIxA
   *   01 CCIxB
   *   10 GND
   *   11 VCC
   * SCS:  同步捕獲源,改為用于將捕獲通信和同步時(shí)鐘
   *   0 異步捕獲
   *   1 同步捕獲
   * SCCI:同步的捕獲/比較輸入,所選擇的輸入信號(hào)由EQUx信號(hào)所存,
   *   并可通過該位讀取
   * CAP:  捕獲模式
   *   0 比較模式
   *   1 捕獲模式
   *OUTMODx:輸出模式位,對(duì)TACCR0無效
   *         000 OUT 位的值
   *         001 置位
   *         010 翻轉(zhuǎn)/復(fù)位
   *         011 復(fù)位/復(fù)位
   *         100 翻轉(zhuǎn)
   *         101 復(fù)位
   *         110 翻轉(zhuǎn)/置位
   *         111 復(fù)位/置位
   * CCIE: 捕獲比較中斷允許位
   *   0 中斷禁止
   *   1 中斷允許
   * CCI:  捕獲比較輸入
   * OUT:  對(duì)于輸出模式0,該位直接控制輸出狀態(tài)
   * COV:  捕獲溢出位。該位表示一個(gè)捕獲溢出發(fā)生,由軟件復(fù)位
   * CCIFG:捕獲比較中斷標(biāo)志位
   *   0 沒有中斷掛起
   *   1 有中斷掛起
   * ***************************************************************/
#include <msp430g2553.h>
unsigned  int A=10,  B=20 ;  void main (void)
{
  WDTCTL = WDTPW + WDTHOLD;
  TACTL|=TASSEL_2+TACLR+MC_1+ID_3;  // SMCLK時(shí)鐘 ;定時(shí)器清零;增模式   8分頻
  CCTL0=CCIE;                       //捕獲中斷允許
  CCR0=B;                         //TACCR0 裝載值
  CCTL1=OUTMOD_7;                   //輸出模式復(fù)位
  CCR1=A;
// BCSCTL1
  P1DIR=BIT6;
  P1SEL=BIT6;
// _EINT();                          //使能所有中斷
  while(1);
}
/*#pragma vector=TIMER0_A0_VECTOR
__interrupt void  ta0_isr(void)
{
  unsigned  int i;
  for(i=0;i<num;i++)
    pwm=i;
}*/

定時(shí)器中斷
這里以定時(shí)器0為例,定時(shí)器1同。
定時(shí)器的中斷可有定時(shí)器TA0CCR0溢出產(chǎn)生,也可由TA0CCRx(x =1/2)溢出產(chǎn)生、捕獲/比較事件發(fā)生引起的中斷,前者有一個(gè)專用的中斷向量,TIMER0_A0_VECTOR,而后者用的TIMER0_A1_VECTOR,至于是哪一個(gè)中斷時(shí)間發(fā)生,還要根據(jù)標(biāo)志位來判斷。
下面以官方例程LaunchPad Lab2為例介紹定時(shí)器A的操作。
例一
#include <msp430g2553.h>
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer
if (CALBC1_1MHZ ==0xFF || CALDCO_1MHZ == 0xFF)
{
while(1); // If calibration constants erased, trap CPU!!
}
BCSCTL1 = CALBC1_1MHZ; // Set range
DCOCTL = CALDCO_1MHZ; // Set DCO step + modulation
BCSCTL3 |= LFXT1S_2; // LFXT1 = VLO
P1DIR = 0x40; // P1.6 output (green LED)
P1OUT = 0; // LED off
IFG1 &= ~OFIFG; // Clear OSCFault flag
BCSCTL1 |= DIVA_3; // ACLK = VLO/8
BCSCTL2 |= SELM_3 + DIVM_3 + DIVS_3; // MCLK = DCO/8, SMCLK = DCO/8
// Configure TimerA
TACTL = TASSEL_1 + MC_1 + TAIE; // Source: ACLK, UP mode
CCR0 = 5100; //Timer count 5100
CCR1 = 2000; //Timer count 100
CCTL0 = CCIE; //CCR0 interrupt enabled
CCTL1 = CCIE; //CCR1 interrupt enabled
_BIS_SR(GIE);
for(;;);
}
// Timer A0 interrupt service routine
#pragma vector=TIMER0_A0_VECTOR
__interrupt void Timer_A0 (void)
{
P1OUT |= BIT6; // P1.6 output High
}
// Timer A1 Interrupt Vector (TA0IV) handler
#pragma vector=TIMER0_A1_VECTOR
__interrupt void Timer_A1(void)
{
switch( TA0IV )
{
case 2: P1OUT &= ~BIT6; // P1.6 output Low
break;
case 10:
break;
}
}
程序一開始關(guān)閉看門狗,if語句作為時(shí)鐘校準(zhǔn)的范例,可以刪去。BCSCTL3 |= LFXT1S_2; 選擇超低頻時(shí)鐘源。然后設(shè)定輸出口,清除中斷標(biāo)志,時(shí)鐘源分頻設(shè)定,接下里組建定時(shí)器A,即定時(shí)器0,在詳細(xì)介紹代碼之前,首先看頭文件關(guān)于定時(shí)器相關(guān)寄存器的設(shè)定。
例二
  下面舉一個(gè)無需中斷服務(wù)函數(shù)、硬件自動(dòng)實(shí)現(xiàn)產(chǎn)生兩路PWM的例子。
代碼很簡(jiǎn)單,初始化一下即可。
#include<msp430g2553.h>
void Set_TimerB_PWM(void)
{
//使用系統(tǒng)初始化時(shí)的默認(rèn)時(shí)鐘1MHz,定時(shí)器B專門用于產(chǎn)生PWM 波形。
TA1CTL = TASSEL_2 + MC_1 + TACLR;//使用系統(tǒng)次主機(jī)SMCKL、增計(jì)數(shù)模式、清楚定時(shí)器B時(shí)鐘
TA1CCR0 = 5001 - 1;//在1MHz的主頻率下,1*10^6/5000=200Hz的中斷頻率
TA1CCR1 = 3751 - 2;//當(dāng)寄存器TACCR1的值小于3750時(shí),輸出口保持高電平。5000*3/4=3750,此路產(chǎn)生3:1的PWM波形。
TA1CCR2 = 1251 - 2;//當(dāng)寄存器TACCR1的值小于1250時(shí),輸出口保持高電平。5000*1/4=1250,產(chǎn)生1:3的PWM波
TA1CCTL1 = OUTMOD_7;//輸出模式7,計(jì)數(shù)器計(jì)數(shù)到5000計(jì)數(shù)器自動(dòng)置位,無需中斷服務(wù)子函數(shù)。
TA1CCTL2 = OUTMOD_7;//輸出模式7,計(jì)數(shù)器計(jì)數(shù)到5000計(jì)數(shù)器自動(dòng)置位,無需中斷服務(wù)子函數(shù)。
P2SEL |= BIT1 + BIT5;//只有這兩路可選(為什么是這兩路?在G2553Datasheet中有特別指明)。做第二功能使用(PWM輸出)
P1DIR |= BIT6; //電機(jī)控制口CTL//這里與本例無關(guān)
P1OUT &= ~BIT6; //start with 0 -->IN2,4為1,滅//這里與本例無關(guān)
}
  初始化時(shí)鐘后直接調(diào)用該函數(shù)即可。
我這里使用的是定時(shí)器B(即Timer1)。詳細(xì)的介紹見以上備注。  
七  時(shí)鐘配置
  時(shí)鐘源:

     外部晶體振蕩器
     超低頻率振蕩器(VLO)
     數(shù)字控制振蕩器(DCO)

  時(shí)鐘信號(hào):


     ACLK :Auxiliary clock.輔助時(shí)鐘。
     MCLK :Master clock主時(shí)鐘。
     SMCLK :Second Master clock次主機(jī)時(shí)鐘。
內(nèi)部晶體振蕩器產(chǎn)生時(shí)鐘后經(jīng)過DCOR、SCG0、RSELx、DCO等各個(gè)寄存器為MCLK、SMCLK提供時(shí)鐘源
內(nèi)部時(shí)鐘還有一個(gè)超低頻率內(nèi)置晶體振蕩器(VLO)在上圖的最上方。可作為低頻時(shí)鐘源。
另外一個(gè)部分是系統(tǒng)的外部時(shí)鐘,外部晶振經(jīng)過LFXT等各個(gè)寄存器設(shè)置后可以為MCLK、ACLK提供時(shí)鐘源。
上圖中SELM、SELS為時(shí)鐘源選擇寄存器。
上圖中DIVA、DIVM、DIVS都是分頻器,時(shí)鐘源可以經(jīng)過1/2/4/8分頻后為CPU提供時(shí)鐘,以降低功耗。
   



ADC10的時(shí)鐘部分框圖



Timer_A的結(jié)構(gòu)框圖
     Timer_A不能選擇MCLK作為Timer_A的時(shí)鐘


CPU是處理器的核心部分,它使用的時(shí)鐘始終是MCLK。
上電后,系統(tǒng)默認(rèn)使用的主系統(tǒng)時(shí)鐘MCLK和子系統(tǒng)時(shí)鐘SMCLK是同為DCOCLK產(chǎn)生的1MHz時(shí)鐘,而輔助時(shí)鐘ACLK則為內(nèi)部VLOCLK產(chǎn)生的12KHz時(shí)鐘
MSP430低功耗模式
    單片機(jī)中,功耗最低的單片機(jī)要MSP430單片機(jī),這是做手持設(shè)備最優(yōu)選擇,MSP430中,用到5種低功耗,LPM0,LPM1,LPM2,LPM3,LPM4,這五種低功耗各種解釋如下 :
LPM0:CPU停止工作,MCLK時(shí)鐘停止,SMCLK、ACLK時(shí)鐘還在工作。
LPM1:CPU停止工作,MCLK時(shí)鐘停止,在活動(dòng)模式如果DCO沒有作為MCLK和SMCLK時(shí)鐘時(shí),則直流發(fā)生器被禁止,否則就保持活動(dòng)狀態(tài),SMCLK、ACLK時(shí)鐘依然還在工作。
LPM2:CPU停止工作,MCLK、SMCLK時(shí)鐘停止工作,如果DCO沒有作為MCLK、SMCLK,自動(dòng)被禁止直流發(fā)生器保持有效,ACLK還處于工作中。
LPM3:CPU停止工作,MCLK、SMCLK時(shí)鐘停止工作,DCO時(shí)鐘也停止工作,僅ACLK時(shí)鐘還處于工作狀態(tài)。
LPM4:CPU停止工作,MCLK、SMCLK時(shí)鐘停止工作,DCO時(shí)鐘也停止工作,ACLK也停止工作。此時(shí)功耗最低。
一般情況下,處理器進(jìn)入低功耗模式后,由中斷來喚醒,外部中斷或內(nèi)部中斷。
如果想進(jìn)入低功耗1,則程序可以為:_BIS_SR(LPM1_bits + GIE);退出低功耗1,則程序可以為:LPM1_EXIT; 進(jìn)入其他低功耗和退出低功耗一樣。
低功耗執(zhí)行的一個(gè)過程:程序從main函數(shù)入口開始執(zhí)行程序,當(dāng)遇到進(jìn)入低功耗程序時(shí),如:_BIS_SR(LPM1_bits + GIE);此時(shí)相當(dāng)于下面的程序處于停止?fàn)顟B(tài)不再執(zhí)行,當(dāng)有一個(gè)中斷來到,則會(huì)進(jìn)入中斷處理程序,自動(dòng)退出低功耗,如果在中斷中沒有沒有退出低功耗,當(dāng)中斷服務(wù)程序執(zhí)行完成后,又會(huì)重新進(jìn)入低功耗。

完整的Word格式文檔51黑下載地址:
MSP430學(xué)習(xí)筆記 .doc (488 KB, 下載次數(shù): 152)


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂1 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美中文视频 | 成人在线精品视频 | 欧美三区| 古典武侠第一页久久777 | 国产精品毛片一区二区在线看 | 99视频网站 | 亚洲www啪成人一区二区麻豆 | 日日淫 | av在线视 | 日韩成人影院 | 亚洲成年在线 | 免费黄色的网站 | 国产精品18hdxxxⅹ在线 | 国产专区在线 | 国产美女黄色片 | 欧美黑人狂野猛交老妇 | 国产一极毛片 | 国产精品久久久久一区二区三区 | 国产99久久精品一区二区永久免费 | 成人日韩 | 国产精品久久久久久福利一牛影视 | 亚洲国产一区二区在线 | 岛国av一区二区三区 | a级毛片国产 | a级毛片毛片免费观看久潮喷 | 亚洲精选一区二区 | 精品久久久久久久久久久下田 | 久久伊人影院 | 农村妇女毛片精品久久久 | 午夜久久久久久久久久一区二区 | 性生活毛片 | 一级毛片色一级 | 日韩一区二区在线观看视频 | 国产高清在线 | 亚洲狠狠| 先锋资源网 | 国产一区二区在线播放视频 | 污污的网站在线观看 | 雨宫琴音一区二区在线 | 精品在线一区二区三区 | 九九精品久久久 |