單片機是一門實踐性較強的技術,很多初學者在學習單片機技術開發的時候往往一頭霧水,不知何從下手。為此,筆者結合自己使用單片機多年的經驗,特意設計了單片機開發所需的Study-c 整機和硬件套件,并結合套件精心編寫了單片機從入門到精通系列教程。通過講述單片機原理、電路設計、應用開發軟件工具、編寫實驗實例讓讀者全面接觸單片機技術。教程編排上由淺入深,循序漸進,內容力求完整、實用、趣味并存,使讀者在輕松愉快的學習過程中逐步提高單片機軟硬件綜合設計水平。
一、內容提要
本講主要向大家介紹51 系列單片機的最小系統的實現并通過編寫程序來實現對單片機IO 口的輸出控制。以點亮外部連接的LED(發光二極管)為例,簡要的介紹單片機的原理、最小系統的組成,并通過簡單的C51 程序設計來講述編譯軟件Keil的使用并下載Hex 文件燒寫單片機。
二、原理簡介
在了解原理之前, 首先讓我們思考一個問題,什么是單片機, 單片機有什么用? 這是一個有意思的問題,因為任何人都不能給出一個被大家都認可的概念,那到底什么是單片機呢? 普遍來說, 單片機又稱單片微控制器, 是在一塊芯片中集成了CPU( 中央處理器)、RAM( 數據存儲器)、ROM( 程序存儲器)、定時器/ 計數器和多種功能的I/O( 輸入/ 輸出) 接口等一臺計算機所需要的基本功能部件,從而可以完成復雜的運算、邏輯控制、通信等功能。在這里,我們沒必要去找到明確的概念來解析什么是單片機,特別在使用C 語言編寫程序的時,不用太多的去了解單片機的內部結構以及運行原理等。從應用的角度來說,通過從簡單的程序入手,慢慢的熟悉然后逐步深入精通單片機。
在簡單了解了什么是單片機之后,然后我們來構建單片機的最小系統,單片機的最小系統就是讓單片機能正常工作并發揮其功能時所必須的組成部分,也可理解為是用最少的元件組成的單片機可以工作的系統。對51 系列單片機來說, 最小系統一般應該包括: 單片機、時鐘電路、復位電路、輸入/ 輸出設備等(見圖1)。
圖1 單片機最小系統框圖
三、電路詳解
依據上文的內容,設計51 系列單片機最小系統見圖2。
圖2 51系列單片機最小系統
下面就圖2 所示的單片機最小系統各部分電路進行詳細說明。
1. 時鐘電路
在設計時鐘電路之前,讓我們先了解下51 單片機上的時鐘管腳:
XTAL1(19 腳) :芯片內部振蕩電路輸入端。
XTAL2(18 腳) :芯片內部振蕩電路輸出端。
XTAL1 和XTAL2 是獨立的輸入和輸出反相放大器,它們可以被配置為使用石英晶振的片內振蕩器,或者是器件直接由外部時鐘驅動。圖2 中采用的是內時鐘模式,即采用利用芯片內部的振蕩電路,在XTAL1、XTAL2 的引腳上外接定時元件(一個石英晶體和兩個電容),內部振蕩器便能產生自激振蕩。一般來說晶振可以在1.2 ~ 12MHz 之間任選,甚至可以達到24MHz 或者更高,但是頻率越高功耗也就越大。在本實驗套件中采用的11.0592M 的石英晶振。和晶振并聯的兩個電容的大小對振蕩頻率有微小影響,可以起到頻率微調作用。當采用石英晶振時,電容可以在20 ~ 40pF 之間選擇(本實驗套件使用30pF);當采用陶瓷諧振器件時,電容要適當地增大一些,在30 ~ 50pF 之間。通常選取33pF 的陶瓷電容就可以了。
另外值得一提的是如果讀者自己在設計單片機系統的印刷電路板(PCB) 時,晶體和電容應盡可能與單片機芯片靠近,以減少引線的寄生電容,保證振蕩器可靠工作。檢測晶振是否起振的方法可以用示波器可以觀察到XTAL2 輸出的十分漂亮的正弦波,也可以使用萬用表測量( 把擋位打到直流擋,這個時候測得的是有效值)XTAL2 和地之間的電壓時,可以看到2V 左右一點的電壓。
2. 復位電路
在單片機系統中,復位電路是非常關鍵的,當程序跑飛(運行不正常)或死機(停止運行)時,就需要進行復位。
MCS-5l 系列單片機的復位引腳RST( 第9 管腳) 出現2個機器周期以上的高電平時,單片機就執行復位操作。如果RST 持續為高電平,單片機就處于循環復位狀態。
復位操作通常有兩種基本形式:上電自動復位和開關復位。圖2 中所示的復位電路就包括了這兩種復位方式。上電瞬間,電容兩端電壓不能突變,此時電容的負極和RESET 相連,電壓全部加在了電阻上,RESET 的輸入為高,芯片被復位。隨之+5V電源給電容充電,電阻上的電壓逐漸減小,最后約等于0,芯片正常工作。并聯在電容的兩端為復位按鍵,當復位按鍵沒有被按下的時候電路實現上電復位,在芯片正常工作后,通過按下按鍵使RST管腳出現高電平達到手動復位的效果。一般來說,只要RST 管腳上保持10ms 以上的高電平,就能使單片機有效的復位。圖中所示的復位電阻和電容為經典值,實際制作是可以用同一數量級的電阻和電容代替,讀者也可自行計算RC 充電時間或在工作環境實際測量,以確保單片機的復位電路可靠。
3. EA/VPP(31 腳) 的功能和接法
51 單片機的EA/VPP(31 腳) 是內部和外部程序存儲器的選擇管腳。當EA 保持高電平時,單片機訪問內部程序存儲器;當EA 保持低電平時,則不管是否有內部程序存儲器,只訪問外部存儲器。
對于現今的絕大部分單片機來說,其內部的程序存儲器(一般為flash)容量都很大,因此基本上不需要外接程序存儲器,而是直接使用內部的存儲器。
在本實驗套件中,EA 管腳接到了VCC 上,只使用內部的程序存儲器。這一點一定要注意,很多初學者常常將EA 管腳懸空,從而導致程序執行不正常。
4. P0 口外接上拉電阻
51 單片機的P0 端口為開漏輸出,內部無上拉電阻(見圖3)。所以在當做普通I/O 輸出數據時,由于V2 截止,輸出級是漏極開路電路,要使“1”信號(即高電平)正常輸出,必須外接上拉電阻。
圖3 P0端口的1位結構
另外,避免輸入時讀取數據出錯,也需外接上拉電阻。在這里簡要的說下其原因:在輸入狀態下,從鎖存器和從引腳上讀來的信號一般是一致的,但也有例外。例如,當從內部總線輸出低電平后,鎖存器Q = 0, Q = 1,場效應管V1 開通,端口線呈低電平狀態。此時無論端口線上外接的信號是低電平還是高電平,從引腳讀入單片機的信號都是低電平,因而不能正確地讀入端口引腳上的信號。又如,當從內部總線輸出高電平后,鎖存器Q = 1, Q = 0,場效應管V1 截止。如外接引腳信號為低電平, 從引腳上讀入的信號就與從鎖存器讀入的信號不同。所以當P0 口作為通用I/O 接口輸入使用時,在輸入數據前,應先向P0 口寫“1”,此時鎖存器的Q 端為“0”,使輸出級的兩個場效應管V1、V2 均截止,引腳處于懸浮狀態,才可作高阻輸入。
總結來說:為了能使P0 口在輸出時能驅動NMOS 電路和避免輸入時讀取數據出錯,需外接上拉電阻。在本實驗套件中采用的是外加一個10K 排阻。此外,51 單片機在對端口P0—P3 的輸入操作上,為避免讀錯,應先向電路中的鎖存器寫入“1”,使場效應管截止,以避免鎖存器為“0”狀態時對引腳讀入的干擾。
5. LED 驅動電路
細心的讀者可能已經發現,在最小系統中,發光二極管(LED)的接法是采取了電源接到二極管正極再經過1K 電阻接到單片機I/O 口上的(見圖4 中的接法1)。為什么這么接呢?首先我們要知道LED 的發光工作條件,不同的LED 其額定電壓和額定電流不同,一般而言,紅或綠顏色的LED 的工作電壓為1.7V~2.4V,藍或白顏色的LED 工作電壓為2.7~4.2V, 直徑為3mm LED 的工作電流2mA~10mA。在這里采用紅色的3mm 的LED。其次,51 單片機(如本實驗板中所使用的STC89C52單片機)的I/O 口作為輸出口時,拉電流(向外輸出電流)的能力是μA 級別,是不足以點亮一個發光二極管的。而灌電流(往內輸入電流)的方式可高達20mA,故采用灌電流的方式驅動發光二極管。當然,現今的一些增強型單片機,是采用拉電流輸出(接法2)的,只要單片機的輸出電流能力足夠強即可。另外,圖4 中的電阻為1K 阻值,是為了限制電流,讓發光二極管的工作電流限定在2mA~10mA。
圖4 LED的接法
四、程序設計
在單片機編程語言上,有C 語言和匯編兩種選擇。本系列教程采用C 語言編寫程序,在此對C語言和匯編語言在進行單片機開發時進行下簡單比較,匯編語言面向硬件,要求對硬件的特性如寄存器之類的比較熟悉,執行效率高,但可讀性和移植性差,不同的單片機之間的程序不能通用,例如學會了51 單片機的匯編指令,卻沒法用到AVR 單片機上。C語言面向過程,可讀性和移植性很好,效率要比匯編低一些。對于剛接觸單片機的人來說,學習這兩種語言是一樣的,但在以后的開發效率上,C 語言的優勢就體現出來了,其可以幾乎完全不改動的情況下移植,大大提高了開發速度。
控制發光二極管D1 閃爍的C 語言源程序:
1. 程序詳細說明
(1)頭文件包含。程序接下來調用的P0_0 就是該頭文件中定義好的一個寄存器地址。在對單片機內部的寄存器操作之前,應申明其來處,有興趣的讀者可以看看AT89X52.h 文件中的內容。
(2)宏定義led, 便于直觀理解也便于程序修改,將P0_0 口命名為led, 這樣在程序中就可以用led代替P0_0 口進行操作。
(3)延時函數聲明。函數在調用之前必須進行聲明,由于函數定義放在主函數之后,所以在主函數之前對延時函數進行了聲明。
(4)主函數入口。主函數不傳遞參數也不返回值。
(5)死循環。
(6)輸出高電平,led 不亮。
(7)延時一段時間,以便人眼能夠直觀看到。
(8)輸出低電平,led 點亮。
(9)延時一段時間。
(10)延時函數定義。
(11)for 語句循環延時。
2. 程序流程圖與實驗現象
程序流程如圖5 所示。經編譯軟件(keil)編譯,生成單片機燒寫文件,然后就可下載到單片機內部運行了,硬件電路板如圖6 所示,本實驗板上用的是STC89C52RC,可以用通過板載USB 轉串口燒寫程序。故將USB 線(本實驗套件中有)連接電腦和實驗板。供電電源可以從USB 取,也可以從外部電源取電。冷啟動,即先點擊下載,然后再上電。下載程序到單片機內運行后,可以看到實驗板上P0_0 口外接的LED 燈(D1) 一亮一滅的閃爍。
圖5 程序流程圖
圖6 硬件電路板圖
五、總結
本講主要介紹了51 單片機最小系統的設計以及編寫第一個簡單的程序。從過該實驗,可以掌握單片機的開發流程,從而快速入門。在該講中應該注意幾個問題:
1. 本講座中采用C 語言編寫程序,因為C 語言的可讀性和可移植性強。若讀者沒有學過C 語言,則應去了解和掌握相應的C 語言知識。C 語言易學易用,相信很快就能熟練。
2. 程序編譯軟件采用的是Keil。限于篇幅的原因,在這里就不對其進行講述,如果讀者有對其不明白的地方,可以到本刊論壇的單片機版面,作者制作了一個詳細的Keil 入門教程。我們通過Keil編譯程序,最終生成燒寫單片機的Hex 代碼文件。
Keil 軟件界面如圖7 所示, 中間空白區域為代碼區,左側為項目列表,最下面為消息窗口。
圖7 Keil軟件開發界面
3. 本實驗板上所用的STC 單片機通過串口下載程序。其上位機軟件界面如圖8 所示, 燒寫操作很簡單,點擊“Open File”按鈕瀏覽找到所生成要燒寫的Hex 文件后,單片機斷電,點擊“下載”按鈕,單片機上電,程序就可下載到單片機中了。
圖8 STC燒寫軟件界面
4. 產品組件
讀者如果按照該講內容進行理解并實踐的話,可以說單片機就算入門了。
-
單片機
+關注
關注
6032文章
44525瀏覽量
633260 -
最小系統
+關注
關注
9文章
250瀏覽量
29056 -
時鐘電路
+關注
關注
10文章
236瀏覽量
50701
原文標題:跟我學51單片機(一):單片機最小系統組成與I/O輸出控制
文章出處:【微信號:mcu168,微信公眾號:硬件攻城獅】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論