⑴ 如何學好單片機
1、熟悉單片機的原理,結構;
2、學好數電,模電,為設計電路打好基礎;
3、熟練使用C語言,多學習別人的程序;
4、對操作系統原理有一定的了解;
5、Protel至少要有點基礎;
6、要實際動手調試電路的能力。
學習單片機的步驟
當前的單片機種類很多,但是 51 是最基礎的,因此單片機的學習最好也是從 51 開始,不僅容易上手,而且相當實用。然而 51 單片機畢竟過於基礎,後來的很多單片機在功能上都有很大的擴展,因此按照我們實驗室多數人的路線接下來大多數人會學習 AVR 單片機, AVR 單片機在功能上較 51 有很大提升,集成了 A/D 、快速 PWM 等很多實用的功能,而且和很多大型的單片機在功能上有很多類似之處,因此如果以後還想掌握其他單片機 AVR 無疑是一個很好的跳板。
學習的過程
學習單片機最終要的是當然是練,我所說的學習跟課堂上的單片機學習不同,我以前也看過一些單片機教材,有些教材講的是單片機的工作原理和內部結構,這些東西對於我們暫時並不需要,等以後開課的時候在學習好了。現在要學習的是暫時拋開內部結構原理不談,如何能用單片機寫一些簡單的小程序,是從實用性的角度出發,網上有一種說法稱之為先實踐後理論的學習方法。
因此我的觀點如下,單片機的硬體結構首先要有一個基本的了解,最起碼要知道各引腳的功能、區別,能自己動手搭一個單片機的最小系統,然後就可以直接從程序入手,程序最好還是用 C 語言編程,從簡單的跑馬燈做起,逐漸深入,陸續可以做一些數碼管、液晶、 DS1302 、 DS18B20 等電子元器件的應用,在深入就可以結合一些具體實例擴展一些中斷、串口通訊等功能。還有一點要聲明的是單片機里用到的 C 語言其實很有限,課堂上學習 C++ 的很大一部分內容在初期單片機編程中都用不到,因此沒必要因為覺的自己的 C 語言基礎不是很好而對單片機望而止步!
學習的工具
軟體方面方面, 51 單片機用的是 KEIL 軟體,這個軟體在學校圖書館軟體下載和其他網站上都有,具體用法自己查找相關資料, AVR 的軟體就比較多了,我用的是 CVAVR ,另外還有 ICCAVR 等多款編譯軟體,這要看個人喜好了,建議有了一定的 51 基礎再學。另外就是燒寫軟體,燒寫軟體的作用就是將編譯器生成的 HEX 文件燒寫至單片機里,這要配合下載線實用,如果有並口的話最好用並口下載線,軟體最好用廣州雙龍的 SLISP 軟體,如果是筆記本沒有並口的話則要自己買一個下載器了,名稱為 USBASP ,網上電子市場有賣 20 塊錢左右,軟體會隨光碟自帶。
硬體方面,首先是要有單片機,對於單片機有一點要注意, 51 單片機最好買 89S51 、 89S52 這兩種型號,上面我所說的燒寫程序是 ISP 方式,這兩種單片機支持 ISP 下載,所以如果買其他型號的燒寫程序可能會不太方便, AVR 單片機常用的就是 ATmega16L 其它型號的區別也不是很大,甚至有些兼容。至於單片機開發板,目前的價格都很貴,從一百到幾百不等,不過像上次學校里廣告的那個六十多塊錢的最好還是免了,沒什麼作用。能買一塊當然好,沒有的話也不要緊,自己動手買個電路板搭一下也很方便,引出 ISP 介面,燒寫程序十分容易,然後將 I/O 口引出擴展也很方便。
學習單片機的其它幾個注意點:
1 .理論與實踐並重
對一個初學單片機的人來說,如果按教科書式的學法,上來就是一大堆指令、名詞,學了半天還搞不清這些指令起什麼作用,也許用不了幾天就會覺得枯燥乏味以致半途而廢。所以學習與實踐結合是一個好方法,邊學習、邊演練,循序漸進,這樣用不了幾次就能將所用到的指令理解、吃透、紮根於腦海,甚至 「 根深蒂固 」 。也就是說,當你學習完幾條指令後 ( 一次數量不求多,只求懂 ) ,接下去就該做實驗了,通過實驗,使你感受到剛才的指令產生的控制效果,眼睛看得見 ( 燈光 ) 、耳朵聽得到 ( 聲音 ) ,更能深刻理解指令是怎樣轉化成信號去實現控制的,通過實驗看到自己所學的成果不僅有一種成就感也能提升你對單片機的興趣。說句實在話,單片機與其說是學出來的,還不如說是做實驗練出來的,何況做實驗本身也是一種學習過程。因此邊學邊練的學習方法,效果特別好。
2 .合理安排時間持之以恆
學習單片機不能 「 三天打魚、兩天曬網 」 ,要有持之以恆的毅力與決 4 心。學習完幾條指令後,就應及時做實驗,融匯貫通,而不要等幾天或幾個星期之後再做實驗,這樣效果不好甚至前學後忘。另外要有打 「 持久戰 」 的心理准備,不要興趣來時學上幾天,無興趣時涼上幾星期。學習單片機很重要的一點就是持之以恆。
3 .遇到問題耐心檢查
單片機有軟硬體兩方面的內容,有時一個程序怎麼調都不出效果,然而從理論分析卻又是對的,這是就要仔細找原因了,學習單片機經常碰到很多問題,有時一兩天都不能解決,這是就要有耐心,從底層找起,相信每找出一個錯誤都會有一個新的收獲。切不可輕言放棄!!!
4 .對只短暫學過一遍的知識,充其量只比浮光掠影稍好。因此,較好的方法是過一段時間後 (1-2 個月 ) 再重新學一遍,學過的知識要經常運用,這樣反復循環幾次就能徹底弄懂消化,永不忘卻。
5 .要進行適當投資購買實驗器材及書籍資料
單片機技術含金量高,一旦學會後,給你帶來的效益當然也高,無論是應聘求職還是自起爐灶開廠辦公司,其前景都光明無限。因此在學習時要捨得適當投資購買必要的學習、實驗器材。另外還要經常去科技圖書店看看,購買一些適合自己學習、提高的書籍。一本好的書籍真的很重要,可以隨時翻閱,隨時補充不懂或遺忘的知識。
學習使用單片機就是理解單片機硬體結構,以及內部資源的應用,在匯編或C語言中學會各種功能的初始化設置,以及實現各種功能的程序編制。
第一步:數字I/O的使用
使用按鈕輸入信號,發光二極體顯示輸出電平,就可以學習引腳的數字I/O功能,在按下某個按鈕後,某發光二極體發亮,這就是數字電路中組合邏輯的功能,雖然很簡單,但是可以學習一般的單片機編程思想,例如,必須設置很多寄存器對引腳進行初始化處理,才能使引腳具備有數字輸入和輸出輸出功能。每使用單片機的一個功能,就要對控制該功能的寄存器進行設置,這就是單片機編程的特點,千萬不要怕麻煩,所有的單片機都是這樣。
第二步:定時器的使用 學會定時器的使用,就可以用單片機實現時序電路,時序電路的功能是強大的,在工業、家用電氣設備的控制中有很多應用,例如,可以用單片機實現一個具有一個按鈕的樓道燈開關,該開關在按鈕按下一次後,燈亮3分鍾後自動滅,當按鈕連續按下兩次後,燈常亮不滅,當按鈕按下時間超過2s,則燈滅。數字集成電路可以實現時序電路,可編程邏輯器件(PLD)可以實現時序電路,可編程式控制制器(PLC)也可以實現時序電路,但是只有單片機實現起來最簡單,成本最低。
定時器的使用是非常重要的,邏輯加時間控制是單片機使用的基礎。
第三步:中斷
單片機的特點是一段程序反復執行,程序中的每個指令的執行都需要一定的執行時間,如果程序沒有執行到某指令,則該指令的動作就不會發生,這樣就會耽誤很多快速發生的事情,例如,按鈕按下時的下降沿。要使單片機在程序正常運行過程中,對快速動作做出反應,就必須使用單片機的中斷功能,該功能就是在快速動作發生後,單片機中斷正常運行的程序,處理快速發生的動作,處理完成後,在返回執行正常的程序。中斷功能使用中的困難是需要精確地知道什麼時候不允許中斷發生(屏蔽中斷)、什麼時候允許中斷發生(開中斷),需要設置哪些寄存器才能使某種中斷起作用,中斷開始時,程序應該干什麼,中斷完成後,程序應該干什麼等等。
中斷學會後,就可以編制更復雜結構的程序,這樣的程序可以干著一件事,監視著一件事,一旦監視的事情發生,就中斷正在乾的事情,處理監視的事情,當然也可以監視多個事情,形象的比喻,中斷功能使單片機具有吃著碗里的,看著鍋里的功能。
以上三步學會,就相當於降龍十八掌武功,會了三掌了,可以勉強護身。
第四步:與PC機進行RS232通信
單片機都有USART介面,特別是MSP430系列中很多型號,都具有兩個USART介面。USART介面不能直接與PC機的RS232介面連接,它們之間的邏輯電平不同,需要使用一個MAX3232晶元進行電平轉換。
USART介面的使用是非常重要的,通過該介面,可以使單片機與PC機之間交換信息,雖然RS232通信並不先進,但是對於介面的學習是非常重要的。正確使用USART介面,需要學習通信協議,PC機的RS232介面編程等等知識。試想,單片機實驗板上的數據顯示在PC機監視器上,而PC機的鍵盤信號可以在單片機實驗板上得到顯示,將是多麼有意思的事情啊!
第五步:學會A/D轉換
MAP430單片機帶有多通道12位A/D轉換器,通過這些A/D轉換器可以使單片機操作模擬量,顯示和檢測電壓、電流等信號。學習時注意模擬地與數字地、參考電壓、采樣時間,轉換速率,轉換誤差等概念。
使用A/D轉換功能的簡單的例子是設計一個電壓表。
第六步:學會PCI、I2C介面和液晶顯示器介面
這些介面的使用可以使單片機更容易連接外部設備,在擴展單片機功能方面非常重要。
第七步:學會比較、捕捉、PWM功能
這些功能可以使單片機能夠控制電機,檢測轉速信號,實現電機調速器等控制起功能。
如果以上七步都學會,就可以設計一般的應用系統,相當於學會十招降龍十八掌,可以出手攻擊了。
第八步:學習USB介面、TCP/IP介面、各種工業匯流排的硬體與軟體設計學習USB介面、TCP/IP介面、各種工業匯流排的硬體與軟體設計是非常重要的,因為這是當前產品開發的發展方向。
到此為止,相當於學會15招降龍十八掌,但還不到打遍天下無敵手的境界。即使如此,也算是單片機大蝦了
⑵ 單片機原理及應用技術的目錄
第1章 概述
第2章 單片機的硬體結構
2.1 MCS-51系列單片機內部結構
2.2 中央處理單元
2.3 存儲器結構
2.3.1 程序存儲器
2.3.2 數據存儲器
2.4 I/O埠
2.4.1 埠結構
2.4.2 埠功能
2.4.3 埠輸入/輸出方式
2.5 MCS-51系列單片機外部引腳
2.6 時鍾電路和時序
2.6.1 振盪器和時鍾電路
2.6.2 CPU時序
2.6.3 MCS-51訪問外部存儲器的時序
2.7 復位
2.7.1 復位信號和復位操作
2.7.2 復位電路
2.8 低功耗運行方式
習題
第3章 MCS-51單片機指令系統及程序設計
3.1 指令系統簡介
3.1.1 指令格式
3.1.2 指令的分類
3.1.3 偽指令
3.2 MCS-51的定址方式
3.3 數據傳送指令
3.4 算術運算指令、邏輯運算指令和移位指令
3.4.1 MCS-51算術運算指令
3.4.2 MCS-51邏輯運算及移位指令
3.5 控制轉移指令和布爾變數操作指令
3.5.1 MCS-51控制轉移指令
3.5.2 MCS-51位操作指令
3.6 匯編語言程序設計
3.6.1 匯編語言概述
3.6.2 匯編語言程序設計與匯編
3.6.3 程序設計方法與舉例
習題
第4章 單片機內部功能
4.1 MCS-51單片機中斷功能
4.1.1 中斷的概念
4.1.2 中斷的控制與管理
4.1.3 中斷的應用實例
4.2 MCS-51單片機定時器/計數器功能
4.2.1 定時器/計數器工作模式
4.2.2 定時器/計數器的控制與管理
4.2.3 定時器/計數器的應用實例
4.3 MCS-51單片機串列通信功能
4.3.1 串列通信的基本概念
4.3.2 MCS-51單片機串列介面的工作方式及控制
4.3.3 串列通信的應用實例
習題
第5章 單片機系統擴展
5.1 單片機的最小系統
5.2 單片機系統的擴展結構
5.3 程序存儲器的擴展與應用
5.3.1 EPROM程序存儲器的擴展設計
5.3.2 E2PROM程序存儲器的擴展設計
5.4 數據存儲器的擴展與應用
5.4.1 數據存儲器的擴展方法
5.4.2 靜態RAM6116數據存儲器的擴展
5.5 I/O的擴展與應用
5.5.1 並行口的擴展原理
5.5.2 並行口的擴展方法
5.5.3 串列口的擴展方法
5.5.4 用串列口擴展並行I/O口
習題
第6章 I/O設備及介面技術
6.1 鍵盤及其介面
6.1.1 獨立式鍵盤介面原理及應用
6.1.2 矩陣式鍵盤介面原理及應用
6.1.3 鍵盤的特殊擴展方式
6.2 顯示及其介面
6.2.1 LED數碼管及介面
6.2.2 LCD液晶顯示器及介面
6.3 可編程鍵盤、顯示器介面電路ZLG7290B
6.4 MCS-51單片機與A/D、D/A轉換器的介面及應用
6.4.1 MCS-51單片機與A/D轉換器的介面及應用
6.4.2 MCS-51單片機與D/A轉換器的介面及應用
6.5 MCS-51單片機與串列匯流排介面技術及應用
6.5.1 MCS-51單片機與I2C匯流排介面及應用
6.5.2 MCS-51單片機與SPI匯流排介面及應用
習題
第7章 單片機應用系統設計實例
7.1 單片機應用系統的結構及設計過程
7.1.1 單片機應用系統設計的基本要求
7.1.2 硬體設計
7.1.3 軟體設計
7.2 單片機應用系統的抗干擾技術
7.2.1 干擾源
7.2.2 硬體抗干擾方法
7.2.3 軟體抗干擾方法
7.3 單片機室內檢測控制系統
7.3.1 設計思想
7.3.2 系統設計
7.3.3 軟體設計
7.4 自行車里程/速度計
7.4.1 系統設計及硬體設計
7.4.2 軟體設計
7.5 防盜報警系統
7.5.1 系統組成原理
7.5.2 硬體設計
7.5.3 軟體設計
習題
第8章 單片機新技術
8.1 新型流行單片機簡介
8.1.1 Philips公司的P89LPC900系列單片機
8.1.2 TI公司高精度A/D介面單片機MSCl210
8.1.3 C8051F02X系列高速混合信號ISP單片機
8.1.4 嵌入式高速可編程系統器件:ItPSD3200系列單片機
8.1.5 高性能SoCAC84X系列單片機
8.1.6 MSP430系列的16位單片機
8.1.7 凌陽16位單片機
8.2 單片機SOC(片上系統)及開發技術
8.2.1 片上系統簡介
8.2.2 S0C單片機的開發過程
8.2.3 開發工具和開發環境
8.3 嵌入式操作系統與單片機開發
8.3.1 嵌入式操作系統簡介
8.3.2 典型嵌入式實時操作系統簡介
8.3.3 嵌入式系統開發平台
習題
附錄A 單片機實驗
實驗1 模擬環境的使用
實驗2 運算類程序實驗
實驗3 找最大數與最小數
實驗4 按鍵實驗.
實驗5 8路撥動開關的實驗
實驗6 定時器的使用
實驗7 外部中斷應用
實驗8 簡單的I/O口擴展實驗
實驗9 8255介面擴展
實驗10 定時器/計數器實驗
實驗11 D/A轉換器DAC0832的應用
實驗12 A/D轉換器ADC0809的應用
實驗13 串列口擴展實驗
實驗14 串並轉換實驗
附錄B ASCII(美國標准信息交換碼)
附錄C MCS-51指令表(A):
附錄D MCS-51指令表(B)
⑶ 求單片機msp430x14x config.h頭文件
config.h 430單片機頭文件代碼最後的復制代碼保存到電腦的方式實現下載:
/********************************************************************
//msp430單片機最小系統板外部資源配置文件Config.h
//包含板載各個資源的硬體配置,如果用戶使用過程中,對應的硬體發生了更改,可利用該頭文件更改使用
//SD/MMC卡初始化硬體配置未包含
//調試環境:EW430 V5.30
//時間:2014.03.01
********************************************************************/
//延時函數,IAR自帶,經常使用到
#define CPU_F ((double)8000000) //外部高頻晶振8MHZ
//#define CPU_F ((double)32768) //外部低頻晶振32.768KHZ
#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))
#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))
//自定義數據結構,方便使用
#define uchar unsigned char
#define uintunsigned int
#define ulong unsigned long
//8個LED燈,連接在P6口,可通過斷開電源停止使用,ADC使用時斷開電源
#define LED8DIR P6DIR
#define LED8 P6OUT //P6口接LED燈,8個
//4個獨立按鍵連接在P10~P13
#define KeyPort P1IN //獨立鍵盤接在P10~P13
//串口波特率計算,當BRCLK=CPU_F時用下面的公式可以計算,否則要根據設置加入分頻系數
#define baud 9600 //設置波特率的大小
#define baud_setting (uint)((ulong)CPU_F/((ulong)baud))//波特率計算公式
#define baud_h (uchar)(baud_setting>>8) //提取高位
#define baud_l (uchar)(baud_setting) //低位
//RS485控制管腳,CTR用於控制RS485處於收或者發狀態
#define RS485_CTR1 P5OUT |= BIT2; //控制線置高,RS485發送狀態
#define RS485_CTR0 P5OUT &= ~BIT2; //控制線置低,RS485接收狀態
//2.8寸TFT彩屏顯示控制相關硬體配置
#define RS_CLR P5OUT &= ~BIT5 //RS置低
#define RS_SET P5OUT |=BIT5 //RS置高
#define RW_CLR P5OUT &= ~BIT6 //RW置低
#define RW_SET P5OUT |=BIT6 //RW置高
#define RD_CLR P5OUT &= ~BIT7 //E置低
#define RD_SET P5OUT |=BIT7 //E置高
#define CS_CLR P5OUT &= ~BIT0 //CS置低
#define CS_SET P5OUT |=BIT0 //CS置高
#define RST_CLR P5OUT &= ~BIT3 //RST置低
#define RST_SET P5OUT |=BIT3 //RST置高
#define LE_CLR P5OUT &= ~BIT1 //LE置低
#define LE_SET P5OUT |=BIT1 //LE置高
//2.8寸TFT彩屏觸摸屏控制相關硬體配置
#define PEN_CLR P2OUT &= ~BIT0 //PEN置低,觸碰觸摸屏時,Penirq引腳由未觸摸時的高電平變為低電平
#define PEN_SET P2OUT |=BIT0 //PEN置高
#define PEN (P2IN & 0x01) //P2.0輸入的值
#define TPDO_CLR P2OUT &= ~BIT1 //TPDO置低
#define TPDO_SET P2OUT |=BIT1 //TPDO置高
#define TPDOUT ((P2IN>>1)&0x01) //P2.1輸入的值
#define BUSY_CLR P2OUT &= ~BIT3 //BUSY置低
#define BUSY_SET P2OUT |=BIT3 //BUSY置高
#define TPDI_CLR P2OUT &= ~BIT4 //TPDI置低
#define TPDI_SET P2OUT |=BIT4 //TPDI置高
#define TPCS_CLR P2OUT &= ~BIT5 //TPCS置低
#define TPCS_SET P2OUT |=BIT5 //TPCS置高
#define TPCLK_CLR P2OUT &= ~BIT6 //TPCLK置低
#define TPCLK_SET P2OUT |=BIT6 //TPCLK置高
//彩屏/12864液晶/1602液晶的數據口,三液晶共用
#define DataDIR P4DIR //數據口方向
#define DataPort P4OUT //P4口為數據口
//12864/1602液晶控制管腳
#define RS_CLR P5OUT &= ~BIT5 //RS置低
#define RS_SET P5OUT |=BIT5 //RS置高
#define RW_CLR P5OUT &= ~BIT6 //RW置低
#define RW_SET P5OUT |=BIT6 //RW置高
#define EN_CLR P5OUT &= ~BIT7 //E置低
#define EN_SET P5OUT |=BIT7 //E置高
#define PSB_CLR P5OUT &= ~BIT0 //PSB置低,串口方式
#define PSB_SET P5OUT |=BIT0 //PSB置高,並口方式
#define RST_CLR P5OUT &= ~BIT1 //RST置低
#define RST_SET P5OUT |= BIT1 //RST置高
//12864應用指令集
#define CLEAR_SCREEN 0x01 //清屏指令:清屏且AC值為00H
#define AC_INIT0x02 //將AC設置為00H。且游標移到原點位置
#define CURSE_ADD 0x06 //設定游標移到方向及圖像整體移動方向(默認游標右移,圖像整體不動)
#define FUN_MODE 0x30 //工作模式:8位基本指令集
#define DISPLAY_ON 0x0c //顯示開,顯示游標,且游標位置反白
#define DISPLAY_OFF 0x08 //顯示關
#define CURSE_DIR 0x14 //游標向右移動:AC=AC+1
#define SET_CG_AC 0x40 //設置AC,范圍為:00H~3FH
#define SET_DD_AC 0x80 //設置DDRAM AC
#define FUN_MODEK 0x36 //工作模式:8位擴展指令集
//顏色代碼,TFT顯示用
#define White 0xFFFF //顯示顏色代碼
#define Black 0x0000
#define Blue 0x001F
#define Blue2 0x051F
#define Red 0xF800
#define Magenta 0xF81F
#define Green 0x07E0
#define Cyan 0x7FFF
#define Yellow 0xFFE0
//NRF2401模塊控制線
#defineRF24L01_CE_0 P1OUT &=~BIT5 //CE在P15
#defineRF24L01_CE_1 P1OUT |= BIT5
#defineRF24L01_CSN_0 P2OUT &=~BIT7 //CS在P27
#defineRF24L01_CSN_1 P2OUT |= BIT7
#defineRF24L01_SCK_0 P3OUT &=~BIT3 //SCK在P33
#defineRF24L01_SCK_1 P3OUT |= BIT3
#defineRF24L01_MISO_0 P3OUT &=~BIT2 //MISO在P32
#defineRF24L01_MISO_1 P3OUT |= BIT2
#defineRF24L01_MOSI_0 P3OUT &=~BIT1 //MOSI在P31
#defineRF24L01_MOSI_1 P3OUT |= BIT1
#defineRF24L01_IRQ_0 P1OUT &=~BIT4 //IRQ在P14
#defineRF24L01_IRQ_1 P1OUT |= BIT4
//DS18B20控制腳,單腳控制
#define DQ_IN P1DIR &= ~BIT7 //設置輸入,DS18B20接單片機P53口
#define DQ_OUT P1DIR |= BIT7 //設置輸出
#define DQ_CLR P1OUT &= ~BIT7 //置低電平
#define DQ_SET P1OUT |= BIT7 //置高電平
#define DQ_R P1IN & BIT7 //讀電平
//紅外接收頭H1838控制腳,單腳控制
#define RED_IN P1DIR &= ~BIT6 //設置輸入,紅外接收頭接單片機PE3口
#define RED_OUT P1DIR |=BIT6 //設置輸出
#define RED_L P1OUT &= ~BIT6 //置低電平
#define RED_H P1OUT |= BIT6 //置高電平
#define RED_R (P1IN & BIT6) //讀電平
//***********************************************************************
// 系統時鍾初始化,外部8M晶振
//***********************************************************************
void Clock_Init()
{
uchar i;
BCSCTL1&=~XT2OFF; //打開XT2振盪器
BCSCTL2|=SELM1+SELS; //MCLK為8MHZ,SMCLK為8MHZ
do{
IFG1&=~OFIFG; //清楚振盪器錯誤標志
for(i=0;i<100;i++)
_NOP();
}
while((IFG1&OFIFG)!=0); //如果標志位1,則繼續循環等待
IFG1&=~OFIFG;
}
//***********************************************************************
// 系統時鍾初始化,內部RC晶振
//***********************************************************************
void Clock_Init_Inc()
{
uchar i;
// DCOCTL = DCO0 + DCO1 + DCO2; // Max DCO
// BCSCTL1 = RSEL0 + RSEL1 + RSEL2; // XT2on, max RSEL
DCOCTL = 0x60 + 0x00; //DCO約3MHZ,3030KHZ
BCSCTL1 = DIVA_0 + 0x07;
BCSCTL2 = SELM_2 + DIVM_0 + SELS + DIVS_0;
}
//***********************************************************************
// 系統時鍾初始化,外部32.768K晶振
//***********************************************************************
void Clock_Init_Ex32768()
{
uchar i;
BCSCTL2|=SELM1 + SELM0 + SELS; //MCLK為32.768KHZ,SMCLK為8MHZ
do{
IFG1&=~OFIFG; //清楚振盪器錯誤標志
for(i=0;i<100;i++)
_NOP();
}
while((IFG1&OFIFG)!=0); //如果標志位1,則繼續循環等待
IFG1&=~OFIFG;
}
//***********************************************************************
// MSP430內部看門狗初始化
//***********************************************************************
void WDT_Init()
{
WDTCTL = WDTPW + WDTHOLD; //關閉看門狗
}