亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 430學習筆記.txt

?? 這只是我在學習TI公司生產的16位超的功耗單片機MSP430的隨筆
?? TXT
?? 第 1 頁 / 共 2 頁
字號:
這只是我在學習TI公司生產的16位超的功耗單片機MSP430的隨筆,希望能對其他朋友有所借鑒,不對之處還請多指教。

下面,開始430之旅。

講解430的書現在也有很多了,不過大多數都是詳細說明底層硬件結構的,看了不免有些空洞和枯燥,我認為了解一個MCU的操作首先要對其基礎特性有所了解,然后再仔細研究各模塊的功能。

1.首先你要知道msp430的存儲器結構。典型微處理器的結構有兩種:馮。諾依曼結構——程序存儲器和數據存儲器統一編碼;哈佛結構——程序存儲器和數據存儲器;msp430系列單片機屬于前者,而常用的mcs51系列屬于后者。

0-0xf特殊功能寄存器;0x10-0x1ff外圍模塊寄存器;0x200-?根據不同型號地址從低向高擴展;0x1000-0x107f seg_b0x1080_0x10ff seg_a 供flash信息存儲

剩下的從0xffff開始向下擴展,根據不同容量,例如149為60KB,0xffff-0x1100

2.復位信號是MCU工作的起點,430的復位型號有兩種:上電復位信號POR和上電清楚信號PUC。POR信號只在上電和RST/NMI復位管腳被設置為復位功能,且低電平時系統復位。而PUC信號是POR信號產生,以及其他如看門狗定時溢出、安全鍵值出現錯誤是產生。但是,無論那種信號觸發的復位,都會使msp430在地址0xffff處讀取復位中斷向量,然后程序從中斷向量所指的地址開始執行。復位后的狀態不寫了,詳見參考書,嘿嘿。

3.系統時鐘是一個程序運行的指揮官,時序和中斷也是整個程序的核心和中軸線。430最多有三個振蕩器,DCO內部振蕩器;LFXT1外接低頻振蕩器,常見的32768HZ,不用外接負載電容;也可接高頻450KHZ-8M,需接負載電容;XT2接高頻450KHZ-8M,加外接電容。

430有三種時鐘信號:MCLK系統主時鐘,可分頻1 2 4 8,供cpu使用,其他外圍模塊在有選擇情況下也可使用;SMCLK系統子時鐘,供外圍模塊使用,可選則不同振蕩器產生的時鐘信號;ACLK輔助時鐘,只能由LFXT1產生,供外圍模塊。

4.中斷是430處理器的一大特色,因為幾乎每個外圍模塊都能產生,430可以在沒有任務時進入低功耗狀態,有事件時中斷喚醒cpu,處理完畢再次進入低功耗狀態。

整個中斷的響應過程是這樣的,當有中斷請求時,如果cpu處于活動狀態,先完成當前命令;如果處于低功耗,先退出,將下一條指令的pc值壓入堆棧;如果有多個中斷請求,先響應優先級高的;執行完后,等待中斷請求標志位復位,要注意,單中斷源的中斷請求標志位自動復位,而多中斷的標志位需要軟件復位;然后系統總中斷允許位SR.GIE復位,相應的中斷向量值裝入pc,程序從這個地址繼續執行。

這里要注意,中斷允許位SR.GIE和中斷嵌套問題。如果當你執行中斷程序過程中,希望可以響應更高級別的中斷請求時,必須在進入第一個中斷時把SR.GIE置位。

其實,其他的外圍模塊時鐘沿著時鐘和中斷這個核心來執行的。具體的結構我也不羅索了,可以參考430系列手冊。

明天開始,講述msp430單片機C語言編程的故事


上回把430單片機的基礎特性交待了一下,讓大家整體有了結構的印象,今天我想在寫一下c語言對430編程的整體結構。基本上屬于框架結構,即整體的模塊化編程,其實這也是硬件編程的基本法則拉(可不是我規定的法則哦)。

首先是程序的頭文件,包括#include <MSP430x14x.h>,這是14系列,因為常用149;其他型號可自己修改。還可以包括#include "data.h" 等數據庫頭文件,或函數變量聲明頭文件,都是你自己定義的哦。

接著就是函數和變量的聲明 void Init_Sys(void);系統初始化

系統初始化是個整體的概念,廣義上講包括所有外圍模塊的初始化,你可以把外圍模塊初始化的子函數寫到Init_Sys()中,也可以分別寫各個模塊的初始化。但結構的簡潔,最好寫完系統的時鐘初始化后,其他所用到的模塊也在這里初始化。

void Init_Sys()
{
   unsigned int i;

   BCSCTL1&=~XT2OFF;          //打開XT2振蕩器
   do
   {
   IFG1 &= ~OFIFG;                  // 清除振蕩器失效標志
   for (i = 0xFF; i > 0; i--);  // 延時,等待XT2起振
  }
  while ((IFG1 & OFIFG) != 0);    // 判斷XT2是否起振

  BCSCTL2 =SELM_2+SELS;     //選擇MCLK、SMCLK為XT2

 //以下對各種模塊、中斷、外圍設備等進行初始化

                         ........................................

   _EINT(); //打開全局中斷控制
}

這里涉及到時鐘問題,通常我們選擇XT2為8M晶振,也即系統主時鐘MCLK為8M,cpu執行命令以此時鐘為準;但其他外圍模塊可以在相應的控制寄存器中選擇其他的時鐘,ACLK;當你對速度要求很低,定時時間間隔大時,就可以選擇ACLK,例如在定時器Timea初始化中設置。

主程序:                       void main( void )
                                    {

                                      WDTCTL = WDTPW + WDTHOLD;              //關閉看門狗

                                       InitSys();     //初始化

                                       //自己任務中的其他功能函數

                                            。。。。。。。。。。。。。。。。。。。。。 

                                      while(1);

                                    }

主程序之后我要講講中斷函數,中斷是你做單片機任務中不可缺少的部分,也可以說是靈魂了(夸張嗎)。

                       /*****************************************************************************
                         各中斷函數,可按優先級依次書寫
                          ***********************************************************************/

舉個定時中斷的例子:

    初始化                    void Init_Timer_A(void)
                                   {
                                    TACTL = TASSEL0 + TACLR;              // ACLK, clear TAR
                                    CCTL0 = CCIE;                         // CCR0 中斷使能
                                    CCR0=32768;                           //定時1s
                                    TACTL|=MC0;                           //增計數模式
                                    }

     中斷服務                #pragma vector=TIMERA0_VECTOR
                                   __interrupt void TimerA0()

                                 {

                                    // 你自己要求中斷執行的任務

                                  }

當然,還有其他的定時,和多種中斷,各系列芯片的中斷向量個數也不同。

這就是簡單的整體程序框架,寫得簡單啦,還忘諒解,明天詳細了解一下各外圍模塊的初始化和功能,晚安。


整體的程序設計結構,包括了所有外圍模塊及內部時鐘,中斷,定時的初始化。具體情況大家可以根據自己的需要添加或者減少,記住,模塊化設計時最有力的武器。

這可是個人總結的經典阿,謝謝支持。因為經常使用149,所以這是149的結構,其他的再更改,根據個人需要。

/*****************************************************************************\
文件名:main.c
描述:MSP430框架程序。適用于MSP430F149,其他型號需要適當改變。
      不使用的中斷函數保留或者刪除都可以,但保留時應確保不要打開不需要的中斷。
     
\*****************************************************************************/

//頭文件
#include <MSP430x14x.h>

//函數聲明
void InitSys();


int main( void )
{

  WDTCTL = WDTPW + WDTHOLD;              //關閉看門狗

  InitSys();     //初始化

start:
  //以下填充用戶代碼


 LPM3;   //進入低功耗模式n,n:0~4。若不希望進入低功耗模式,屏蔽本句
 goto start;

}

/*****************************************************************************
系統初始化
******************************************************************************/
void InitSys()
{
   unsigned int iq0;

 //使用XT2振蕩器
   BCSCTL1&=~XT2OFF;          //打開XT2振蕩器
   do
   {
   IFG1 &= ~OFIFG;     // 清除振蕩器失效標志
   for (iq0 = 0xFF; iq0 > 0; iq0--);  // 延時,等待XT2起振
  }
  while ((IFG1 & OFIFG) != 0);    // 判斷XT2是否起振

  BCSCTL2 =SELM_2+SELS;     //選擇MCLK、SMCLK為XT2

 //以下填充用戶代碼,對各種模塊、中斷、外圍設備等進行初始化

   _EINT(); //打開全局中斷控制,若不需要打開,可以屏蔽本句
}

/*****************************************************************************
端口2中斷函數
******************************************************************************/
#pragma vector=PORT2_VECTOR
__interrupt void Port2()
{
 //以下為參考處理程序,不使用的端口應當刪除其對于中斷源的判斷。
 if((P2IFG&BIT0) == BIT0)
 {
  //處理P2IN.0中斷
  P2IFG &= ~BIT0; //清除中斷標志
  //以下填充用戶代碼

 }
 else if((P2IFG&BIT1) ==BIT1)
 {
  //處理P2IN.1中斷
  P2IFG &= ~BIT1; //清除中斷標志
  //以下填充用戶代碼

 }
 else if((P2IFG&BIT2) ==BIT2)
 {
  //處理P2IN.2中斷
  P2IFG &= ~BIT2; //清除中斷標志
  //以下填充用戶代碼

 }
 else if((P2IFG&BIT3) ==BIT3)
 {
  //處理P2IN.3中斷
  P2IFG &= ~BIT3; //清除中斷標志
  //以下填充用戶代碼

 }
 else if((P2IFG&BIT4) ==BIT4)
 {
  //處理P2IN.4中斷
  P2IFG &= ~BIT4; //清除中斷標志
  //以下填充用戶代碼

 }
 else if((P2IFG&BIT5) ==BIT5)
 {
  //處理P2IN.5中斷
  P2IFG &= ~BIT5; //清除中斷標志
  //以下填充用戶代碼

 }
 else if((P2IFG&BIT6) ==BIT6)
 {
  //處理P2IN.6中斷
  P2IFG &= ~BIT6; //清除中斷標志
  //以下填充用戶代碼

 }
 else
 {
  //處理P2IN.7中斷
  P2IFG &= ~BIT7; //清除中斷標志
  //以下填充用戶代碼

 }

 LPM3_EXIT; //退出中斷后退出低功耗模式。若退出中斷后要保留低功耗模式,將本句屏蔽
}

/*****************************************************************************
USART1發送中斷函數
******************************************************************************/
#pragma vector=USART1TX_VECTOR
__interrupt void Usart1Tx()
{
 //以下填充用戶代碼


 LPM3_EXIT; //退出中斷后退出低功耗模式。若退出中斷后要保留低功耗模式,將本句屏蔽
}

/*****************************************************************************
USART1接收中斷函數
******************************************************************************/
#pragma vector=USART1RX_VECTOR
__interrupt void Ustra1Rx()
{
 //以下填充用戶代碼


 LPM3_EXIT; //退出中斷后退出低功耗模式。若退出中斷后要保留低功耗模式,將本句屏蔽
}

/*****************************************************************************
端口1中斷函數
多中斷中斷源:P1IFG.0~P1IFG7
進入中斷后應首先判斷中斷源,退出中斷前應清除中斷標志,否則將再次引發中斷
******************************************************************************/
#pragma vector=PORT1_VECTOR
__interrupt void Port1()
{
 //以下為參考處理程序,不使用的端口應當刪除其對于中斷源的判斷。
 if((P1IFG&BIT0) == BIT0)
 {
  //處理P1IN.0中斷
  P1IFG &= ~BIT0; //清除中斷標志
  //以下填充用戶代碼

 }
 else if((P1IFG&BIT1) ==BIT1)
 {
  //處理P1IN.1中斷
  P1IFG &= ~BIT1; //清除中斷標志
  //以下填充用戶代碼

 }
 else if((P1IFG&BIT2) ==BIT2)
 {
  //處理P1IN.2中斷
  P1IFG &= ~BIT2; //清除中斷標志
  //以下填充用戶代碼

 }
 else if((P1IFG&BIT3) ==BIT3)
 {
  //處理P1IN.3中斷
  P1IFG &= ~BIT3; //清除中斷標志
  //以下填充用戶代碼

 }
 else if((P1IFG&BIT4) ==BIT4)
 {
  //處理P1IN.4中斷
  P1IFG &= ~BIT4; //清除中斷標志
  //以下填充用戶代碼

 }
 else if((P1IFG&BIT5) ==BIT5)
 {
  //處理P1IN.5中斷
  P1IFG &= ~BIT5; //清除中斷標志
  //以下填充用戶代碼

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91丨porny丨户外露出| 日韩一区国产二区欧美三区| 欧美日本一道本| 国产亚洲福利社区一区| 一区二区三区91| 丁香婷婷综合色啪| 亚洲精品一线二线三线| 亚洲成av人片一区二区梦乃| 99久久99精品久久久久久 | 欧美亚洲综合久久| 久久久久国产精品麻豆| 日本不卡中文字幕| 欧美日韩亚洲综合在线 欧美亚洲特黄一级 | 国内外精品视频| 懂色一区二区三区免费观看| 日韩一区二区高清| 亚洲一区二区在线免费观看视频| 成人国产精品免费观看视频| 精品国产区一区| 蜜桃精品在线观看| 宅男在线国产精品| 午夜电影一区二区三区| 欧洲精品中文字幕| 一区二区三区四区蜜桃| 91麻豆福利精品推荐| 中日韩av电影| av福利精品导航| 最好看的中文字幕久久| 国产精品一区二区免费不卡| 久久综合资源网| 狠狠色综合播放一区二区| 日韩欧美一区电影| 久久精品国产一区二区三| 日韩精品综合一本久道在线视频| 免费不卡在线观看| 精品福利二区三区| 国产99久久久精品| 亚洲人成7777| 欧美亚洲综合在线| 日本不卡一区二区| 精品国产青草久久久久福利| 国产美女精品一区二区三区| 国产无人区一区二区三区| 成人午夜大片免费观看| 亚洲视频你懂的| 欧美在线播放高清精品| 蜜桃传媒麻豆第一区在线观看| 欧美不卡一区二区三区| 国产成人亚洲精品青草天美| 国产精品高潮久久久久无| 91久久久免费一区二区| 日韩av电影天堂| 国产偷v国产偷v亚洲高清| 成人av动漫网站| 亚洲mv在线观看| 精品成人在线观看| 97久久久精品综合88久久| 婷婷综合久久一区二区三区| 精品国产三级a在线观看| 99精品视频在线播放观看| 亚洲va欧美va人人爽| 久久人人爽爽爽人久久久| 91在线观看视频| 老司机精品视频在线| 亚洲男女一区二区三区| 91精品国产美女浴室洗澡无遮挡| 国产精品一区二区在线看| 亚洲三级久久久| 日韩欧美国产一区在线观看| 成人一道本在线| 丝袜国产日韩另类美女| 亚洲国产精品t66y| 欧美一区二区精美| 99vv1com这只有精品| 另类小说图片综合网| 中文字幕一区av| 精品免费视频.| 在线观看国产日韩| 国产风韵犹存在线视精品| 婷婷综合五月天| 亚洲精选视频免费看| 久久这里只有精品首页| 欧美色图在线观看| 成人国产精品免费观看动漫| 极品少妇xxxx精品少妇偷拍| 亚洲成av人片一区二区| 亚洲三级免费观看| 中文字幕第一区二区| 欧美一区二区成人6969| 欧美在线你懂得| 91麻豆成人久久精品二区三区| 国内精品伊人久久久久av影院| 亚洲成在人线在线播放| 一色桃子久久精品亚洲| 久久精品人人做人人爽人人| 欧美一卡二卡在线| 欧美丰满一区二区免费视频| 色婷婷国产精品| 99精品视频在线观看免费| 丁香婷婷综合色啪| 国产盗摄女厕一区二区三区| 精品一区二区三区的国产在线播放| 亚洲国产日韩一级| 亚洲一区中文日韩| 亚洲精品国产第一综合99久久| 中文字幕一区二区三区蜜月| 欧美国产精品专区| 中文字幕第一区| 欧美激情一区在线观看| 日本一区二区三区电影| 欧美韩国日本一区| 国产精品色眯眯| 中文字幕av在线一区二区三区| wwww国产精品欧美| 国产欧美日韩视频在线观看| 国产亚洲婷婷免费| 国产精品卡一卡二| 亚洲欧美国产毛片在线| 一区二区三区免费在线观看| 亚洲色大成网站www久久九九| 亚洲乱码国产乱码精品精98午夜 | 日韩一级二级三级| 欧美一区二区在线免费播放| 欧美一级日韩不卡播放免费| 91.xcao| 日韩无一区二区| 久久久久久久久久久久久女国产乱| 久久综合久久综合久久综合| 久久综合久久久久88| 国产精品理伦片| 亚洲18影院在线观看| 蜜桃一区二区三区在线观看| 国产乱码精品一品二品| 成人av一区二区三区| 欧美午夜片在线看| 欧美成人官网二区| 国产精品久久久久久久浪潮网站| 亚洲一区免费在线观看| 老司机精品视频线观看86| 成人高清免费观看| 欧美日韩一卡二卡| 久久久高清一区二区三区| 亚洲久草在线视频| 久久成人综合网| 91丨九色丨蝌蚪丨老版| 欧美日韩精品免费观看视频| 久久综合色综合88| 亚洲精品成人在线| 久久丁香综合五月国产三级网站 | 欧美日韩成人在线一区| 久久久午夜精品| 亚洲一区二区三区精品在线| 久久www免费人成看片高清| 不卡的电视剧免费网站有什么| 欧美日产在线观看| 亚洲国产精品成人综合色在线婷婷| 亚洲电影第三页| 国产精品亚洲а∨天堂免在线| 欧美日韩中文一区| 欧美国产日韩亚洲一区| 蜜臀av一级做a爰片久久| 成人福利在线看| 精品国产乱子伦一区| 一区二区三区四区视频精品免费 | 欧美日韩的一区二区| 国产精品福利一区| 麻豆成人在线观看| 欧美亚男人的天堂| 亚洲天堂成人网| 国产高清不卡一区| 欧美不卡123| 日本欧美一区二区三区乱码| 99re成人精品视频| 国产欧美一区二区精品婷婷| 日韩av在线播放中文字幕| 91成人在线精品| 国产精品久久久久毛片软件| 国产一区二区影院| 欧美一级在线观看| 日日嗨av一区二区三区四区| 色婷婷精品大在线视频| 亚洲天堂精品视频| fc2成人免费人成在线观看播放| 久久网站热最新地址| 免费成人av资源网| 在线播放中文一区| 午夜av区久久| 欧美三日本三级三级在线播放| 亚洲精品国产品国语在线app| 97久久精品人人做人人爽 | 日韩精品91亚洲二区在线观看| 日本乱码高清不卡字幕| 国产精品国产a| 99久久夜色精品国产网站| 亚洲国产精品传媒在线观看| 大白屁股一区二区视频| 中文字幕免费不卡| 99热99精品| 一区二区三区不卡视频在线观看| 99久久99久久综合|