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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6291|回復: 3
打印 上一主題 下一主題
收起左側

MSP430單片機內部資源總結(含程序)

[復制鏈接]
跳轉到指定樓層
樓主
ID:71834 發表于 2015-1-8 09:29 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
                                     第一章   內部資源篇

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 溢出中斷 共用一個中斷向量


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

使用道具 舉報

沙發
ID:77403 發表于 2015-4-19 00:42 | 只看該作者
謝謝謝。。。。。。。。。。
回復

使用道具 舉報

板凳
ID:92785 發表于 2015-10-18 00:52 | 只看該作者
謝謝樓主分享了
回復

使用道具 舉報

地板
ID:79034 發表于 2015-12-2 11:47 | 只看該作者
正在學MSP430,不知道該如何下手。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美日韩久久 | 国产激情视频在线观看 | 精品自拍视频在线观看 | 精品欧美一区二区在线观看欧美熟 | 久久久久久www | 日韩精品在线观看一区二区 | 天天操综合网 | 精品av| 中文字幕免费在线 | 大香网伊人 | 97在线超碰| 欧美一区二区三区在线观看视频 | 午夜久久av | 欧美日韩在线一区二区 | 久久成人免费观看 | 伊人色综合久久天天五月婷 | 亚洲精品毛片av | 二区三区av| 色婷婷av久久久久久久 | 亚洲日韩中文字幕一区 | 色www精品视频在线观看 | 一级视频黄色 | 波多野结衣在线观看一区二区三区 | 久久91精品国产 | 欧美色a v | 亚洲精品国产第一综合99久久 | 欧美一区二区三区在线观看 | av毛片| 蜜桃av人人夜夜澡人人爽 | 色综合一区二区三区 | 久久国产精品视频免费看 | 欧美在线国产精品 | aaa综合国产| 在线观看日本网站 | 99精品视频免费观看 | 97色在线观看免费视频 | 国产精品福利视频 | 久久出精品 | 91高清在线观看 | 中文字幕成人av | 亚洲精品视频免费观看 |