扯會兒單片機開發(fā):開始

前言

正在寫作這篇文章的筆者是一名大四的軟件工程學(xué)生,因為實習(xí)工作的需要,奉命研究單片機開發(fā),所以我所扯的內(nèi)容可能更適合跟我的情況比較相同的人。
如果你懂一些計算機原理和C語言開發(fā),讀下面的文章就不會很費勁。但如果不懂也沒關(guān)系,那就交叉學(xué)習(xí)吧。


什么是單片機

從CPU說起。

CPU(Central Processing Unit, 中央處理器)

CPU由運算器、緩存器及總線構(gòu)成。其中,運算器是指ALU(Arithmetic logic unit,算術(shù)邏輯單元),是CPU的核心;緩存器(Cache)可分為一級緩存、二級緩存和三級緩存,容量逐步遞增,讀寫速度速度遞減,成本遞減;總線(Bus)分為數(shù)據(jù)、控制和狀態(tài)三種。典型代表:8086

  • 物理結(jié)構(gòu)
    從物理結(jié)構(gòu)上看,CPU可分為邏輯部件、寄存器部件和控制部件。邏輯部件主要用于定點或浮點算術(shù)運算操作、移位操作和邏輯操作;寄存器部件可分為通用、專用和控制。每一種寄存器都有它自己的用處;控制部件主要用于指令譯碼和發(fā)出控制信號。
  • 性能參數(shù)
    作為數(shù)據(jù)處理的中心,最主要的參數(shù)可以說是主頻和外頻了。先說外頻,外頻是基準(zhǔn)頻率,它決定了主板的運行速度,人們所說的超頻,超的就是外頻。
    主頻=外頻倍頻*
    主頻,又叫時鐘頻率。由上述公式可以看出主頻由外頻決定。主頻表示CPU內(nèi)數(shù)字脈沖信號震蕩的速度,它可以說明CPU的運算和處理數(shù)據(jù)的速度。簡而言之,主頻越高,CPU越快。CPU每做一個動作,處理數(shù)據(jù)或發(fā)布命令,都要隨著主頻的節(jié)奏來。所以這是個很有節(jié)奏感的東西。

計算機(Computer)

依照馮諾依曼體系,計算機的五大組成部件為運算器、控制器、存儲器、輸入設(shè)備和輸出設(shè)備。其中運算器和控制器合起來就是CPU;存儲器又可以拆分為內(nèi)存和外存;輸入和輸出設(shè)備就是鍵盤、鼠標(biāo)、顯示器等。

  • 處理器
    運算器和控制器可以合稱為處理器,CPU主要就是這兩個部件。前者負(fù)責(zé)數(shù)據(jù)處理,后者發(fā)布命令。
  • 存儲器
    存儲器主要是指內(nèi)存(RAM,Random Access Memory,隨機存取存儲器),靠電容的充放電存儲電容信號進而可在邏輯上表示數(shù)字信號。由于電容充放電速度很快,所以內(nèi)存的讀寫速度僅次于CPU中的緩存。但又因為是電容,所以無法在不通電的情況下存儲這些信息。這樣就催生了ROM,為了保存數(shù)據(jù)但只能寫入一次的只讀存儲器。再后來為了能擦了重寫就出現(xiàn)了EPROMEEPROM等可擦寫ROM。硬盤、U盤等都是前者的衍生物,他們都統(tǒng)稱為外存(external storage),其主要作用就是在斷電的時候能夠保存數(shù)據(jù)。因為涉及到物理動作(掰硬盤里面的小磁針、在光盤上燙洞),所以相對于內(nèi)存的速度要慢上要幾個檔次。
  • I/O
    I/O就是與之交互的基礎(chǔ)了,通過輸入設(shè)備來告訴它,通過輸出設(shè)備來告訴你。就是機器交互的耳朵和嘴了。

單片機(MCU, Microcontroller Unit)

是一種集成電路(IC, Integrated Circuit),其實應(yīng)該叫微控制器,單片機這個名字主要是指之前的SCM(Single Chip Micyoco, 嗯… Micyoco是個神奇的單詞)。而現(xiàn)在MCU是由SCM發(fā)展而來的,在高級點就可以說是SoC(System on Chip)。但后面的我所提到的單片機就是說MCU啦(因為我主要玩了下51單片機,這個是什么鬼我后面會說)。

說正事兒,單片機可以說是“濃縮的計算機”而不是“濃縮的CPU”,首先維基百科對他的解釋是:

a small computer on a integrated circuit。

其次是因為它內(nèi)部不僅僅有運算器、控制器和寄存器這種CPU三件套,他還常封裝有RAM、ROM這種存儲器部件,還有I/O口供人們編程及操作。所以總結(jié)來說,他有處理器、存儲器和I/O,也算是符合馮諾依曼體系的“濃縮計算機”

  • 應(yīng)用領(lǐng)域
    說到這種“濃縮計算機”的應(yīng)用,可以說是廣到?jīng)]朋友。智能儀表、實時工控、通訊設(shè)備、導(dǎo)航系統(tǒng)、家用電器等等。隨著物聯(lián)網(wǎng)(IoT)時代的到來,單片機可謂再一次大展神威,我們手中的控制端可能是手機這種高級玩意兒,但是用來控制設(shè)備電路的接收端就是單片機要做的事情了。讓家用電器接入網(wǎng)絡(luò),就是在其內(nèi)部放一塊帶Wifi模塊的單片機即可。
  • 封裝類型
    剛才說到它算一個計算機,他的那些部件都是怎么放在一起的?這就涉及到封裝問題了。以下列出主要的單片機封裝形式。
封裝 全稱 中文名稱
DIP Dual In-Line Package 雙列直插式封裝
PLCC Plastic Leaded Chip Carrier 帶引線的塑料芯片封裝
QFP Quad Flat Package 塑料方形扁平式封裝
PGA Pin Grid Array Package 插針網(wǎng)絡(luò)陣列封裝
BGA Ball Grid Array Package 球柵陣列封裝

這里不做詳細(xì)描述,具體資料可點擊封裝名稱進入查閱。


51單片機

你若是初學(xué)單片機,并且直接上網(wǎng)去查“單片機入門”之類的關(guān)鍵詞,你絕對會看到“51單片機什么什么的”。誰知道51單片機是啥玩意,一開始我還以為51是個牌子,然后就開始吐槽滿世界的廣告啊,能不能安安靜靜的學(xué)個單片機啊。

什么是51單片機

百度百科的摘要是這樣說的:

51單片機是對所有兼容Intel 8031指令系統(tǒng)的單片機的統(tǒng)稱。該系列單片機的始祖是Intel的8004單片機,后來隨著Flash rom技術(shù)的發(fā)展,8004單片機取得了長足的進展,成為應(yīng)用最廣泛的8位單片機之一,其代表型號是ATMEL公司的AT89系列,它廣泛應(yīng)用于工業(yè)測控系統(tǒng)之中。很多公司都有51系列的兼容機型推出,今后很長的一段時間內(nèi)將占有大量市場。51單片機是基礎(chǔ)入門的一個單片機,還是應(yīng)用最廣泛的一種。需要注意的是51系列的單片機一般不具備自編程能力。

維基百科是這樣說的:

The page "51-MCU" does not exist. You can ask for it to be created, but consider checking the search results below to see whether the topic is already covered.

嗯,看來這個詞是國內(nèi)出來的。根據(jù)百度百科上的內(nèi)容我們可以了解到如下信息

Key Value
指令集 8031
始祖 Intel 8004 單片機
處理器 8位
I/O線 32條
  • 這跟“51”有個蛋的關(guān)系啊?!
    后來了解到,這款單片機的起點是Intel的MCS51系列單片機,此系列包括:8031,8051,8751,8032,8052,8752等,后來Intel普度眾生,將技術(shù)傳了下去。人們將后來的那些單片機都統(tǒng)稱為51單片機。

  • 那為毛我入個門就給我個51單片機啊?!
    因為此款單片機應(yīng)用非常廣,而且支持在線編程(ISP, In-System Programmability),用它可以搭建比較為復(fù)雜的系統(tǒng),相較于其他8位單片機(AVR、PIC)而言,他出現(xiàn)較早,可以獲取大量學(xué)習(xí)資料。所以…

引腳

單片機的操作向來靠引腳,51系列也不除外。常見的是40腳DIP封裝,以此為例說說以下幾類引腳。

  • 電源
引腳 說明
Vcc 電源,用于引入正電平
GND 地線,引入負(fù)電平

關(guān)于電平的資料請參考:邏輯電平

  • 時鐘
引腳 說明
XTAL2 片內(nèi)震蕩電路輸出端
XTAL1 片內(nèi)震蕩電路輸入端
  • 編程控制
引腳 說明
RST 用于復(fù)位
PSEN 當(dāng)有擴展ROM時用,在讀外部ROM時,低電平有效
ALE/PROG 當(dāng)有擴展RAM時用
EA/Vpp 當(dāng)有擴展ROM時用,高電平讀取內(nèi)部ROM,低電平讀取外部ROM
  • I/O
引腳 說明
P0 雙向,8位,三態(tài)
P1 準(zhǔn)雙向,8位
P2 準(zhǔn)雙向,8位
P3 準(zhǔn)雙向,8位,擁有第二功能

P3第二功能定義:

標(biāo)號 第二功能 說明
P3.0 RXD 串行輸入口
P3.1 TXD 串行輸出口
P3.2 INT0 外部中斷0
P3.3 INT1 外部中斷1
P3.4 T0 定時器/計數(shù)器0外部輸入端
P3.5 T1 定時器/計數(shù)器1外部輸入端
P3.6 WR 外部數(shù)據(jù)存儲器寫脈沖
P3.7 RD 外部數(shù)據(jù)存儲器讀脈沖

擴展的關(guān)鍵字

單片機編程支持匯編和C,其他的我沒用過也不太清楚。如果入門的話最好的選擇就是C啦,首先你很有可能學(xué)過C,就算沒學(xué)過也很好上手,去買本譚浩強的《C程序設(shè)計》吧。

除了標(biāo)準(zhǔn)的ANSI C關(guān)鍵字外,單片機編程還擴展了如下幾個類型的關(guān)鍵字:

  • 位標(biāo)量說明
關(guān)鍵字 說明
bit 聲明一個位標(biāo)量或位類型函數(shù)
sbit 聲明一個可位尋址變量,必須定義為外部變量
  • 特殊功能寄存器聲明
關(guān)鍵字 說明
sfr 聲明一個特殊功能寄存器,必須定義為外部變量
sfr16 聲明一個16位的特殊功能寄存器,必須定義為外部變量
  • 存儲器類型說明
關(guān)鍵字 說明
data 直接尋址的內(nèi)部數(shù)據(jù)存儲器
bdata 可位尋址的內(nèi)部數(shù)據(jù)存儲器
idata 間接尋址的內(nèi)部數(shù)據(jù)存儲器
pdata 分頁尋址的外部數(shù)據(jù)存儲器
xdata 外部數(shù)據(jù)存儲器
code 程序存儲器
  • 其他
關(guān)鍵字 說明
interrupt 定義一個中斷函數(shù)
reentrant 定義一個再入函數(shù)
using 定義芯片的工作寄存器

STC89C52

我的第一個實體單片機開發(fā),就是這款了,STC89C52,可以說是增強型8051單片機。來,先看一下它的配置:

  • 處理器
Key Value
核心 MCS-51
最高運作頻率 35MHz
  • 物理參數(shù)
關(guān)鍵字 說明
I/O 39
工作溫度 商業(yè)級:0°C75°C;工業(yè)級:-40°C85°C
封裝 DIP
  • 存儲器
關(guān)鍵字 說明
RAM 512B
ROM 8KB
EEPROM 4KB
  • 功能
關(guān)鍵字 說明
定時器 3個
串口 1個,全雙工
外部中斷 4個
看門狗 支持
內(nèi)置復(fù)位 支持
ISP/IAP 支持
  • 可選模式
關(guān)鍵字 說明
掉電模式 支持
空閑模式 支持

我的這款的具體型號為:STC89C52_35I_PDIP40_1550HHT352.C90C
關(guān)于標(biāo)識命名規(guī)則請參閱:STC全系列芯片命名規(guī)則說明


軟件準(zhǔn)備

既然要編程,我們就需要開發(fā)環(huán)境,你可以選擇Keil,也可以選擇加載Keil插件的Eclipse。
代碼寫好后,通過編譯器編譯成單片機可以識別的機器碼。機器碼通常會保存為.hex文件,這個文件可以用那些十六進制文件查看器查看。這個文件的數(shù)據(jù)要寫入到單片機的程序存儲器中,通常為一個ROM。通常買的開發(fā)板都會集成串口及其芯片,還有配套的下載軟件。你只需要安裝好它的串口芯片的驅(qū)動程序,然后用下載器直接下載就好。如果是自己焊的板子就會麻煩一些了。這里不做說明,因為筆者還沒干過。
還有一種就是通過Proteus模擬,在沒有實體板的情況下可以考慮這種方式。Proteus可以模擬單片機的邏輯線路和演示效果。向里面的邏輯單片機下載程序的話,更是十分方便,在Proteus內(nèi)可以很方便的操作完成。若是要模擬單片機與PC通信,那你就需要一個模擬串口連接的程序了---VSPD(Virtual Serial Port Driver)。

  • 列個清單
程序 說明
Keil 單片機開發(fā)的IDE,支持編譯c、asm、c++。
單片機串口驅(qū)動 用于讓計算機識別單片機
Proteus 模擬集成電路,可以演示效果
VSPD 模擬串口連接
程序下載程序 用于將編譯好hex文件下載到單片機

一個軟工狗的總結(jié)

作為一個軟工狗,我對我們專業(yè)的理解是更專注于一個軟件的工程項目的始終而不是技術(shù)實現(xiàn),偏向于“工”。而單片機開發(fā)是更加貼近計算機底層的一種開發(fā),更偏向于“理”,而且也不會采用面向?qū)ο蟮乃枷搿K裕绕鹬八龅木W(wǎng)頁開發(fā)也好,客戶端開發(fā)也罷,都顯得更加不友好。

  • 內(nèi)存可能不夠用
    在開發(fā)過程中會開始考慮內(nèi)存夠不夠用這種問題,這個是現(xiàn)代IT學(xué)子幾乎不會考慮的問題,不說電腦,手機的內(nèi)存都大的一腿,但是來到單片機的地盤,你就得考慮了,考慮好不要動不動就上個double(我目前用的最長的變量類型也就是unsigned int),而且為了拓展范圍長度還要考慮是不是要把變量聲明稱無符號類型,更嚴(yán)重的情況可能還要掰指頭數(shù)清楚你的變量有沒有聲明的太多。
  • 一切從優(yōu)
    也是因為硬件資源的限制,所以在做一些實現(xiàn)的時候你不能只考慮如何實現(xiàn),還要考慮單片機吃不吃得起你的代碼。所以在這個領(lǐng)域,面向?qū)ο筮@種思想是基本棄用的(面向?qū)ο蟮乃枷胂騺硎菍Τ绦騿T友好,對機器不太友好的)。考慮好你程序的時間及空間復(fù)雜度,因為單片機不僅內(nèi)存小,主頻一般也特別低。
  • 二進制是爸爸
    好好的鞏固一下之前所學(xué)的C語言吧,還有二進制操作才是爸爸級別的操作。說到這一點其實還是因為硬件資源的限制。各種且或非、異或、移位會讓代碼變得高效,雖然我們之前并不習(xí)慣這樣做。其實很多牛逼的程序員都會很擅長使用二進制操作,因為這樣很對機器的口味(1024吧,湊個整)。
  • 很好玩!
    不像客戶端或web開發(fā),我們只是在調(diào)用,很少有思維上的突破。我覺得單片機開發(fā)會更靈活,你可以去網(wǎng)上花十塊錢不到買各種小部件添加上去調(diào)用著玩。自己設(shè)計小型自動電路是我覺得再有趣不過的事情了。
  • 怎么個開始
    要是沒學(xué)過C語言,先去把C學(xué)了。若是學(xué)好了,那就了解基礎(chǔ)知識后直接實戰(zhàn)。關(guān)于實戰(zhàn),我的建議是,先在Proteus上模擬,等稍微熟練再往實體開發(fā)板里寫。一個是因為Proteus模擬,能簡單實踐一下畫板子,可以學(xué)習(xí)簡單的線路,但又不像真正畫板子那樣麻煩。另一個是因為單片機的程序存儲器的擦寫次數(shù)是有限的,雖然這個次數(shù)也不用特別在意,但是能少一次就少一次嘛。到了實體開發(fā)板階段,就不是為了驗證你的程序邏輯了,而是解決實際問題,因為Proteus并不會完美模擬出實際情況,這也是由模擬到實踐的真正過度。最后,可以自己買各種工具(洞洞板、錫絲、松香、烙鐵、吸錫器、烙鐵架)來焊個板子,在自己焊的板子上編程。這樣就完成了從焊到編再到實現(xiàn)的一條龍DIY。

我很推薦軟工狗們嘗試單片機開發(fā),因為這可以讓你對計算機原理和底層有更深的認(rèn)識,還可以體會到設(shè)計并實現(xiàn)各種DIY小器件的樂趣。望各位就著汗水盡情釋放創(chuàng)造力吧!

玩的開心~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 漫談可編程芯片 - 單片機DIY制作 單片機論壇 寫在前面:很多朋友都問我做的是什么東西,我說單片機,但是大部分人...
    augustar閱讀 2,768評論 0 5
  • 單片機概念 單片機是指一個集成在一塊芯片上的完整計算機系統(tǒng)。盡管它的大部分功能集成在一塊小芯片上,但是它具有一...
    稻香_閱讀 973評論 1 0
  • 同事小朱最近一臉愁容: “我媽退休了,說要來北京陪我?guī)讉€月” “我媽一來,我連自由都沒了!” “關(guān)鍵我我跟她沒話說...
    槽值閱讀 22,361評論 174 720
  • 新海實驗中學(xué)第二屆校園文化藝術(shù)節(jié)征文選《五月花更紅》第116頁,原名《風(fēng)之春》,指導(dǎo)老師:許小云 微風(fēng),吹拂著頭發(fā)...
    長島冰淚Willin閱讀 208評論 0 0
  • 女人參政臨朝,方式有很多種,武則天直接堂而皇之地稱帝,曠古絕今;呂雉,慈禧之流則把皇帝玩弄于股掌之中,耍弄陰謀權(quán)術(shù)...
    加油明天_f923閱讀 811評論 1 4