1. 程式人生 > >(一):微控制器最小系統組成與I/O輸出控制

(一):微控制器最小系統組成與I/O輸出控制

 微控制器是一門實踐性較強的技術,很多初學者在學習微控制器技術開發的時候往往一頭霧水,不知何從下手。為此,筆者結合自己使用微控制器多年的經驗,特意設計了微控制器開發所需的Study-c 整機和硬體套件,並結合套件精心編寫了微控制器從入門到精通系列教程。通過講述微控制器原理、電路設計、應用開發軟體工具、編寫實驗例項讓讀者全面接觸微控制器技術。教程編排上由淺入深,循序漸進,內容力求完整、實用、趣味並存,使讀者在輕鬆愉快的學習過程中逐步提高微控制器軟硬體綜合設計水平。

  一、內容提要

  本講主要向大家介紹51 系列微控制器的最小系統的實現並通過編寫程式來實現對微控制器IO 口的輸出控制。以點亮外部連線的LED(發光二極體)為例,簡要的介紹微控制器的原理、最小系統的組成,並通過簡單的C51 程式設計來講述編譯軟體Keil的使用並下載Hex 檔案燒寫微控制器。

  二、原理簡介

  在瞭解原理之前, 首先讓我們思考一個問題,什麼是微控制器, 微控制器有什麼用? 這是一個有意思的問題,因為任何人都不能給出一個被大家都認可的概念,那到底什麼是微控制器呢? 普遍來說, 微控制器又稱單片微控制器, 是在一塊晶片中集成了CPU( 中央處理器)、RAM( 資料儲存器)、ROM( 程式儲存器)、定時器/ 計數器和多種功能的I/O( 輸入/ 輸出) 介面等一臺計算機所需要的基本功能部件,從而可以完成複雜的運算、邏輯控制、通訊等功能。在這裡,我們沒必要去找到明確的概念來解析什麼是微控制器,特別在使用C 語言編寫程式的時,不用太多的去了解微控制器的內部結構以及執行原理等。從應用的角度來說,通過從簡單的程式入手,慢慢的熟悉然後逐步深入精通微控制器。

  在簡單瞭解了什麼是微控制器之後,然後我們來構建微控制器的最小系統,微控制器的最小系統就是讓微控制器能正常工作併發揮其功能時所必須的組成部分,也可理解為是用最少的元件組成的微控制器可以工作的系統。對51 系列微控制器來說, 最小系統一般應該包括: 微控制器、時鐘電路、復位電路、輸入/ 輸出裝置等(見圖1)。

圖1 微控制器最小系統框圖

圖1 微控制器最小系統框圖

  三、電路詳解

  依據上文的內容,設計51 系列微控制器最小系統見圖2。

圖2 51系列微控制器最小系統

圖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位結構

圖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的接法

圖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 程式流程圖

圖5 程式流程圖

圖6 硬體電路板圖

圖6 硬體電路板圖

  五、總結

  本講主要介紹了51 微控制器最小系統的設計以及編寫第一個簡單的程式。從過該實驗,可以掌握微控制器的開發流程,從而快速入門。在該講中應該注意幾個問題:

  1. 本講座中採用C 語言編寫程式,因為C 語言的可讀性和可移植性強。若讀者沒有學過C 語言,則應去了解和掌握相應的C 語言知識。C 語言易學易用,相信很快就能熟練。

  2. 程式編譯軟體採用的是Keil。限於篇幅的原因,在這裡就不對其進行講述,如果讀者有對其不明白的地方,可以到本刊論壇的微控制器版面,作者製作了一個詳細的Keil 入門教程。我們通過Keil編譯程式,最終生成燒寫微控制器的Hex 程式碼檔案。

  Keil 軟體介面如圖7 所示, 中間空白區域為程式碼區,左側為專案列表,最下面為訊息視窗。

圖7 Keil軟體開發介面

圖7 Keil軟體開發介面

  3. 本實驗板上所用的STC 微控制器通過串列埠下載程式。其上位機軟體介面如圖8 所示(推薦使用V3.1 版本,最新版本可以到STC 主頁上下載:http://www.mcu-memory.com/), 燒寫操作很簡單,點選“Open File”按鈕瀏覽找到所生成要燒寫的Hex 檔案後,微控制器斷電,點選“下載”按鈕,微控制器上電,程式就可下載到微控制器中了。

圖8 STC燒寫軟體介面

圖8 STC燒寫軟體介面

  4. 產品元件

  讀者如果按照該講內容進行理解並實踐的話,可以說微控制器就算入門了。下一講將進一步深入,將要介紹微控制器內部定時器和中斷系統,敬請期待。

相關推薦

微控制器系統組成I/O輸出控制

 微控制器是一門實踐性較強的技術,很多初學者在學習微控制器技術開發的時候往往一頭霧水,不知何從下手。為此,筆者結合自己使用微控制器多年的經驗,特意設計了微控制器開發所需的Study-c 整機和硬體套件,並結合套件精心編寫了微控制器從入門到精通系列教程。通過講述微控制器原理

微信程式微信程式伺服器的簡單鏈接

生活無趣且不易,一起找點樂子吧。歡迎評論,和文章無關的東西也沒關係。 最近在寫小程式,有些問題,搜尋不到太有價值的東西(可能是我對關鍵字的理解不好),這裡總結下我遇到各種問題,可能看來會比較可笑,但對新手來說也許會有些幫助,我會盡量去注重具體的實現。  這篇文章來

斯坦福CS231n專案實戰k近鄰kNN分類演算法

k最近鄰分類(kNN,K Nearest neighbor)分類演算法是一種最簡單的分類器之一。在kNN演算法訓練過程中,它將所有訓練樣本的輸入和輸出label都儲存起來。測試過程中,計算測試樣本與每個訓練樣本的L1或L2距離,選取與測試樣本距離最近的前k個

推薦系統實踐讀書筆記好的推薦系統

設計一個推薦系統之前,一定要了解什麼樣的推薦系統才是好的推薦系統至關重要。那麼一個優秀的推薦系統具有哪些特徵呢?(量化或者概念性的特徵) 通過以下三個步驟回答一個優秀的推薦系統是什麼樣的 1)什麼是推薦系統、推薦系統的主要任務、推薦系統和分類目錄以及搜尋引擎的區別 2)不同領域分門別類的介紹

音訊噪聲抑制4普通均方誤差LMS演算法

引言前面講了基於Weiner濾波器的噪聲抑制方法。維納濾波器有一些假設條件,比如訊號平穩(這就導致解方程算濾波器係數的時候,自相關矩陣與絕對時間無關)、噪聲和有用訊號不相關…其實,這些條件在實際中並不是那麼容易滿足的。因此,用維納濾波器來實現訊號去噪,效果不是特別理想。於是就

Linux\Unix IPC程序通訊例項分析共享記憶體通訊---系統V

前些天看到有個博主寫部落格採用問答式的敘述方法:把很多知識點通過一問一答的形式把文章串起來,我覺得這種形式不錯,便於突出重點。後面我也做下嘗試,一邊寫寫部落格,一邊回顧一下自己對IPC程序通訊的認識。 Q:這些例子來自哪? Q:IBM原文都寫過了,為什麼還要在這裡再寫一

微信程式微信程式申請註冊開發流程

本文主要用於介紹微信小程式開發過程中的注意點,查閱過程請結合微信的開發者文件一同觀看。 本文基於微信小程式公測版,IDE:微信開發者工具 0.10.102800 本文件用於幫助公司內部初學者,如有感覺拖沓請見諒 AppID申請 A

XV6操作系統代碼閱讀心得啟動加載、中斷系統調用

tel 包括 sched main函數 結構 依次 bss comm 啟動 XV6操作系統是MIT 6.828課程中使用的教學操作系統,是在現代硬件上對Unix V6系統的重寫。XV6總共只有一萬多行,非常適合初學者用於學習和實踐操作系統相關知識。 MIT 6.828的課程

從0開發3D引擎實現的3D程式-“繪製三角形”

目錄 上一篇博文 執行測試截圖 需求分析 目標 特性 頭腦風暴 確定需求 總體設計 具體實現

小試牛刀家用級組網規劃設計配置實戰

撥號 掃描 光纖 自動化運維 課程 哪些 大數 -a 概述 從家庭網絡談起 家庭網絡應該是最簡單的網絡,但很多中小型企業/園區網網絡架構與家庭網絡類似,麻雀雖小五臟俱全。下面就為大家分享一下,我家網絡的部署。 大多家庭網絡可能只有一臺無線路由器,集路由器、交換機、AP功能與

MongoDBPython-windows下mongodb安裝使用整理

序言: 本部落格通過六大方面介紹如下內容: 前言介紹:介紹了包含MongoDB、NoSQL、關係型資料庫和非關係型資料的優缺點等內容。 Windows 平臺安裝MongoDB:介紹瞭如何在Windows下安裝MongoDB,學習python時可能會遇到安裝MongoDB,對於習慣

Spring Cloud使用Eureka進行服務註冊發現

作為分散式架構開發的一種選擇,Spring Cloud利用Spring Boot的開發便利性巧妙地簡化了分散式系統基礎設施的開發,如服務發現註冊、配置中心、訊息匯流排、負載均衡、斷路器、資料監控等,都可以用Spring Boot的開發風格做到一鍵啟動和部署。Spring Cl

Python學習筆記Python代碼的打包發布

新建 raw 就是 程序 文件 distrib pac lib site 在python程序中,一個.py文件被當作一個模塊,在各個模塊中定義了不同的函數。當我們要使用某一個模塊中的某一個函數時,首先須將這個模塊導入,否則就會出現函數未定義的情況. 下面記錄的是打包及安裝包

Java8函數式編程Lambda表達式類型常用函數接口

led ebe 前言 eve 分享 3.1 integer water 代碼 [TOC] 1 前言 最近在看一些開源項目的源碼,函數式編程風格的代碼無處不在,所以得要好好學一下了。 2 Lambda表達式類型 無參數: Runnable noArguments = ()

機器學習筆記二乘法和梯度下降

一、最小二乘法 1.一元線性擬合的最小二乘法 先選取最為簡單的一元線性函式擬合助於我們理解最小二乘法的原理。 要讓一條直接最好的擬合紅色的資料點,那麼我們希望每個點到直線的殘差都最小。 設擬合直線為

輕量級流程圖控制元件GoJS示例連載

GoJS是一款功能強大,快速且輕量級的流程圖控制元件,可幫助你在JavaScript 和 HTML5 Canvas程式中建立流程圖,且極大地簡化你的JavaScript / Canvas 程式。 慧都網小編為大家準備了一套完整的GoJS的示例,將以連載的形式展開,供大家學習和交流討論。 這不是GoJS

白學安卓Android系統架構和應用開發特色

一、Android架構 Android大致可以分為四層架構: Linux核心層 系統執行庫層 應用框架層 應用層 Linux核心層 Android系統是基於Linux核心的,這一層為Android裝置的各種硬體提供了底層的驅動,如顯示驅動

手把手講解51微控制器系統焊接、流水燈跑馬燈編寫以及燒錄

(1)首先當然是要購買“51微控制器最小系統的散件”,淘寶上面賣的比較多,散件的話一般二、三十元左右,其次還需要購買一個電烙鐵,一般30瓦的就足夠了,這裡我就講一講51微控制器散件的焊接方法和注意事

PCB製作微控制器系統為例

參考連結: 第一步:安裝Altium Designer Summer 09並破解(詳情見軟體安裝) 第二步:建立工程,建立PCB工程,建立原理圖並儲存在同一目錄下 右擊工程名,儲存所有檔案在同一目錄下 第三步:放置元器件,繪製原理圖 開啟右下角system-&g

從入門到放棄,.net構建博客系統系統構建篇

.net 通過 tro 周期 放棄 操作 images 容器 業務 demo:http://tonyblogs.top/ Git源碼:https://github.com/Halifa/TonyBlogs 項目采用的技術有:asp.net mvc4 + autofac +