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

立即注冊 登錄
返回首頁

uid:71834的個人空間

日志

TI公司MSP430單片機內部資源總結(包含實例程序)

熱度 1已有 4448 次閱讀2015-1-8 09:24 |個人分類:430單片機| 單片機, 程序, 資源

                                   內部資源篇

1:  把主系統時鐘設置為高頻晶體振蕩器:
#include<msp430x14x.h>
void main()
{
    WDTCTL=WDTPW+WDTHOLD;
    P5DIR|=BIT4;
    P5SEL|=BIT4;                      //p5.4選擇做為mclk的輸出端
    
    BCSCTL1&=~XT2OFF;                  //XT2=HF XTAL
    do
    {   unsigned int i;
        IFG1&=~OFIFG;              //clear OSCFault Flag
        for(i=0xff;i>0;i--);             //Time for flag to set
    }while((IFG1&OFIFG));        //OSCFault flag still  OFIFG默認為1 時是沒有振蕩的
    BCSCTL2|=SELM_2;              ////MCLK=XT2(safe)
    
    ////////////////////////該段程序為切換主時鐘的程序
    
    for(;;);//do nothing
}


步驟:第一步:關閉看門狗
      第二步:打開高頻晶體振蕩器    通過設置寄存器 BCSCTL1
      第三步:等待高頻晶體振蕩器起振    然后在進行第四部的時鐘源切換
      第四步:設置主系統時鐘為高頻晶體振蕩器  通過 寄存器 BCSCTL2


2      低功耗模式:
#include  <msp430x14x.h>
#define uint unsigned int
void main(void)
{
  P6DIR |= BIT2;P6OUT |= BIT2;              //關電平轉換
  BCSCTL1 |= DIVA_2;                        // ACLK/4
  WDTCTL = WDT_ADLY_1000;                   // WDT 1s/4 interval timer
  IE1 |= WDTIE;                             // Enable WDT interrupt
  while(1)
  {
    uint i;
    _BIS_SR(LPM3_bits + GIE);               // Enter LPM3
//  或者寫      _EINT();   LPM3;
    P3OUT &= ~BIT5;                          // Set P3.5 LED on
    for (i = 18000; i>0; i--);               // Delay
    P3OUT |= BIT5;                         // Clear P3.5 LED off
  }
}

#pragma vector=WDT_VECTOR
__interrupt void watchdog_timer (void)
{
    _BIC_SR_IRQ(LPM3_bits);                 // Clear LPM3 bits from 0(SR)
    //或者寫       LPM3_EXIT;
}

步驟:  第一步:先寫看門狗延時函數  ,開看門狗中斷
        第二步:寫進入低功耗模式 開總中斷  _EINT();  LPM3;
        第三步: 寫應用程序
        第四步:  寫中斷函數  退出低功耗  LPM3_EXIT;


3  看門狗定時器與低功耗模式應用


#include<msp430x14x.h>
int flag;

void main()
{
    WDTCTL=WDT_MDLY_32;
    IE1|=WDTIE;
    P2DIR|=BIT7;
    _EINT();//開全局中斷
    LPM0;
}
#pragma vector=WDT_VECTOR
__interrupt void WDTDOG_time()
{
   flag++;
   if(flag==10)
   {
   P2OUT^=BIT7;
   flag=0;
   }
}

步驟:  第一步: 設置看門狗為定時模式
        第二步:使能看門狗中斷
        第三步: 開全局中斷 //用簡寫模式 LPMx  必須寫   _EINT();
        第四步: 寫應用程序
        第五步: 進入低功耗模式
        第六步: 寫看門狗中斷服務函數

4  低功耗模式下的時鐘源工作狀態驗證  (2013 09 18)
/********************************************
此程序用看門狗定時器讓LED間隔閃爍

也可用來檢測不同低功耗模式下SMCLK 與ACLK的工作狀態

通過此程序 表面 LPM0 1 2 3情況下ACLK工作
LPM4情況下 ACLK不工作
 SMCLK 在LPM2 3 4情況下不工作
在LPM 0 1情況下工作
但這與書本上說的有點不同  


*********************************************/


#include<msp430x14x.h>
int flag;

void main()
{
     WDTCTL=WDT_MDLY_32;
   //WDTCTL=WDT_ADLY_1000; 
    IE1|=WDTIE;
    P2DIR|=BIT7;
    _EINT();//開全局中斷
    LPM0;
}
#pragma vector=WDT_VECTOR
__interrupt void WDTDOG_time()
{
   flag++;
   if(flag==2)
   {
   P2OUT^=BIT7;
   flag=0;
   }
}

5  定時器A  之連續計數模式  2013 09 20
#include<msp430x14x.h>
void main()
{
    WDTCTL=WDTHOLD+WDTPW;    //關狗
    P2DIR|=BIT1;
     
    CCTL0=CCIE;    //使能CCR0中斷
    CCR0=50000;   //這個CCR0 與TACCR0一樣  但多寫成CCRO
    TACTL=TASSEL_2+MC_2;  //smclk  continue mode
   
    _EINT();  //開全局中斷
    LPM1; //進入低功耗
}
#pragma vector=TIMERA0_VECTOR
__interrupt void timerA ()
{
    P2OUT^=BIT1;
    CCR0+=50000;//連續計數模式下 CCR0必須加偏置 才能保持方波周期恒定
}

注意:  定時器A操作步驟:  
               第一步:  打開定時器A的中斷
               第二步:  選擇定時器A的時鐘源  分頻器  計數模式



6      定時器A 之增計數模式   2013 09 20
/********************************
定時器A的增計數模式

************************************/


#include<msp430x14x.h>
void main()
{
   WDTCTL=WDTPW+WDTHOLD;   //關小狗
   P2DIR|=BIT2;
   CCTL0=CCIE;   //使能CCR0
   CCR0=50000;
   TACTL=TASSEL_2+MC_1;  //SMCLK  UP MODE
   _EINT();  //開全局中斷
   LPM1;
   //_BIS_SR(LPM0_bits + GIE); 
}

#pragma vector=TIMERA0_VECTOR
__interrupt void timeA0()
{
    P2OUT^=BIT2; 
}

特別注意: 這個程序在編譯過程中若選擇F1612就不能實現功能  但選擇
      F149  F169都可以  這是神馬歌原因呢




7  定時器A的雙中斷運用    2013 09 20
/****************************************************
定時器A工作在連續計數模式下 用CCRO在P2.0出產生一方波
  用溢出中斷在P2.7產生一方波

****************************************************/

#include<msp430x14x.h>
void main()
{
    WDTCTL=WDTPW+WDTHOLD;  //關小狗
    P2DIR=BIT0+BIT7;
    CCTL0=CCIE;  //CCRO中斷允許
    CCR0=20000;
    TACTL|=MC_2+TASSEL_2+TAIE;  //SMCLK  CONTINUE MODE 溢出中斷允許
     _BIS_SR(LPM0_bits + GIE);                 // Enter LPM0 w/ interrupt

}

//TimerA0 CCRO中斷服務函數
#pragma vector=TIMERA0_VECTOR
__interrupt void timerA0()
{
  P2OUT^=BIT0;
  CCR0+=20000;//連續計數模式下 CCR0必須加偏置 才能保持方波周期恒定
}
//TimerA1  溢出中斷服務函數
#pragma vector=TIMERA1_VECTOR
__interrupt void  timerA1()
{
   switch(TAIV)
   { 
     case 2 :  break;//CCR1
     case 4:  break;//CCR2
     case 10: P2OUT^=BIT7; break;
   }
}

//特別注意: 定時器A有4個中斷  CCRO  單獨使用一個中斷向量TIMERA0_VECTOR
           而CCR1  CCR2 溢出中斷 共用一個中斷向量


路過

雞蛋
1

鮮花

握手

雷人

剛表態過的朋友 (1 人)

全部作者的其他最新日志

評論 (0 個評論)

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

Powered by 單片機教程網

返回頂部
主站蜘蛛池模板: 91在线观看免费视频 | 国产黄色大片在线观看 | 国产一区在线视频 | 亚洲成人播放器 | 久久av网站 | 国产精品亚洲欧美日韩一区在线 | 龙珠z在线观看 | 国产激情视频网站 | av一区二区三区四区 | 亚洲欧美一区二区三区视频 | 国产在线一区二区 | 中文一区二区 | av 一区二区三区 | 久久国产精品视频免费看 | 亚洲高清一区二区三区 | 国产成人免费视频网站高清观看视频 | 久久夜视频| 99视频| 91污在线 | 欧美日本在线 | 亚洲天堂二区 | 一级毛片视频 | 成人二区 | 一区二区三区四区在线 | 国内自拍第一页 | 欧美日韩成人影院 | 午夜精品一区二区三区在线观看 | 秋霞影院一区二区 | 国产不卡在线观看 | 国产精品久久久久久久午夜片 | 久久精品欧美一区二区三区不卡 | 久久日本 | 一级毛片免费看 | 99久热在线精品视频观看 | 欧美日韩国产一区二区三区 | 亚洲成人精品影院 | 免费视频一区二区 | 久久国产免费看 | 国产精品久久久久av | 黄色一级视频免费 | 极品销魂美女一区二区 |