- 零基礎(chǔ)學(xué)單片機(jī)C語言程序設(shè)計(jì)
- 趙建領(lǐng) 薛園園等編著
- 3199字
- 2018-12-31 21:41:24
1.1 單片機(jī)介紹
1946年,由美國賓夕法尼亞大學(xué)研制成功世界上第一臺(tái)電子數(shù)字計(jì)算機(jī)ENIAC。隨后,便引發(fā)了20世紀(jì)的電子工業(yè)革命。如今,計(jì)算機(jī)特別是單片微型計(jì)算機(jī)(簡稱單片機(jī))得到了迅猛發(fā)展。市場上的單片機(jī)種類繁多,為應(yīng)用設(shè)計(jì)者提供了多種選擇。
1.1.1 單片機(jī)簡介
單片機(jī)是將中央處理器(Central Processing Unit,CPU)、只讀存儲(chǔ)器(Read Only Memory,ROM)、隨機(jī)存取存儲(chǔ)器(Random Access Memory,RAM)、定時(shí)器/計(jì)數(shù)器以及I/O(Input/Output)接口等部件集成在一起的微芯片。單片機(jī)從產(chǎn)生至今,經(jīng)過30多年的發(fā)展,從4位單片機(jī)發(fā)展到8位、16位乃至32位單片機(jī),其性能越來越強(qiáng),價(jià)格越來越低。其中,應(yīng)用最為廣泛的便是51系列單片機(jī)。
51系列單片機(jī)是指由Intel公司發(fā)展起來的MCS-51系列以及和其具有兼容內(nèi)核的單片機(jī)。MCS-51系列單片機(jī)是最早、最基本的單片機(jī),功能也最簡單,包括8031、8051、8032、8052等。隨后,各大芯片公司均推出了51內(nèi)核的單片機(jī),和MCS-51系列單片機(jī)完全兼容,同時(shí)提高了性能并增加了更多功能。如Atmel公司的AT89C系列、AT89S系列和AT89LP系列,Philips公司的8XC552系列,Silicon Laboratories公司的C8051F系列等。
1.1.2 單片機(jī)的主要組成部分
單片機(jī)所特有的結(jié)構(gòu)和資源反映了單片機(jī)的性能,這些是單片機(jī)程序設(shè)計(jì)的基礎(chǔ)。下面首先介紹一下8051單片機(jī)基本結(jié)構(gòu)的主要組成部分。
1. 中央處理器
中央處理器(CPU)是整個(gè)單片機(jī)的核心部件。CPU主要由算術(shù)邏輯部件、控制器和專用寄存器3部分電路組成。它負(fù)責(zé)控制、指揮和調(diào)度整個(gè)單元系統(tǒng)協(xié)調(diào)的工作,完成運(yùn)算和控制輸入/輸出功能等操作。
2. 程序存儲(chǔ)器
程序存儲(chǔ)器(ROM)用于存放用戶程序、原始數(shù)據(jù)或表格等。8051單片機(jī)共有4096個(gè)8位ROM,有些增強(qiáng)型的單片機(jī)提供了更大的程序存儲(chǔ)器,有些甚至還采用的是Flash程序存儲(chǔ)器。
3. 數(shù)據(jù)存儲(chǔ)器
數(shù)據(jù)存儲(chǔ)器(RAM)可存放讀寫的數(shù)據(jù)、CPU運(yùn)算的中間結(jié)果或用戶定義的字型表等。8051單片機(jī)內(nèi)部有128個(gè)8位用戶數(shù)據(jù)存儲(chǔ)單元和128個(gè)專用寄存器單元。專用寄存器只能用于存放控制指令數(shù)據(jù),只能訪問而不能用于存放用戶數(shù)據(jù)。對(duì)于一些新推出的單片機(jī),其內(nèi)部RAM單元可能更多,例如AT89S52單片機(jī)內(nèi)部有256個(gè)RAM數(shù)據(jù)存儲(chǔ)單元。
4. 定時(shí)器/計(jì)數(shù)器
定時(shí)器/計(jì)數(shù)器用于單片機(jī)硬件的定時(shí)或者計(jì)數(shù)。一般包含兩個(gè)16位的可編程定時(shí)器/計(jì)數(shù)器,以實(shí)現(xiàn)定時(shí)或計(jì)數(shù)功能。它也可以產(chǎn)生中斷,從而在程序中控制程序轉(zhuǎn)向。部分新推出的單片機(jī)可能擁有更多的定時(shí)器/計(jì)數(shù)器。
5. 并行I/O口
單片機(jī)的并行I/O口主要用于和外部設(shè)備進(jìn)行并行的輸入和輸出通信,以便于處理外部的輸入和將運(yùn)算結(jié)果反饋到外部設(shè)備。
6. 全雙工串行口UART
全雙工串行通信口UART主要用于與其他設(shè)備間的串行數(shù)據(jù)傳送。一般均內(nèi)置一個(gè)全雙工串行通信口,該串行口既可以用作異步通信收發(fā)器,也可以當(dāng)同步移位器使用。部分新推出的單片機(jī)可能擁有更多的全雙工串行口。
7. 中斷系統(tǒng)
8051單片機(jī)具備較完善的中斷功能,包含兩個(gè)外部中斷、兩個(gè)定時(shí)器/計(jì)數(shù)器中斷和一個(gè)串行中斷。8051單片機(jī)的中斷系統(tǒng)具有兩級(jí)的優(yōu)先級(jí)別選擇。部分新推出的單片機(jī)可能擁有更多的中斷源。
8. 時(shí)鐘振蕩電路
時(shí)鐘振蕩電路主要用于為單片機(jī)提供CPU時(shí)鐘源。單片機(jī)可以采用內(nèi)部時(shí)鐘振蕩電路或者由外部提供時(shí)鐘源。其最大工作頻率根據(jù)單片機(jī)型號(hào)的不同而有所差別,例如AT89S52單片機(jī)的時(shí)鐘振蕩頻率為0~33MHz。
1.1.3 單片機(jī)引腳及功能
51系列單片機(jī)有各種封裝形式,這里以40引腳雙列直插DIP形式的封裝來進(jìn)行介紹,如圖1.1所示。其中正電源和地線兩根,外置石英振蕩器的時(shí)鐘線兩根,4組8位共32個(gè)I/O口,中斷口線與P3口線復(fù)用。

圖1-18051雙列直插式的引腳配置
有些新型的單片機(jī)在引腳數(shù)量以及功能上都略有區(qū)別,但都是基于51內(nèi)核。這里介紹的內(nèi)容同樣適用于新型的單片機(jī)。下面介紹51系列單片機(jī)的引腳功能,這些是學(xué)習(xí)單片機(jī)程序設(shè)計(jì)必須要了解和掌握的基礎(chǔ)知識(shí)。
? 電源引腳:主要負(fù)責(zé)單片機(jī)的供電,有兩根引腳。VCC(Pin40)為正電源端,接5.0V電壓;GND(Pin20)為接地端。
? 外接晶振或外部振蕩器引腳:主要負(fù)責(zé)為單片機(jī)的運(yùn)行提供時(shí)鐘振蕩器,主要有兩根引腳。其中,XTAL1(Pin19)為時(shí)鐘XTAL1腳,片內(nèi)振蕩電路的輸入端;XTAL2(Pin18)為時(shí)鐘XTAL2腳,片內(nèi)振蕩電路的輸出端。
8051單片機(jī)的時(shí)鐘振蕩器有兩種工作方式。一種是片內(nèi)時(shí)鐘振蕩方式,在18和19腳外接石英晶體和振蕩電容,振蕩電容的值一般取10~30pF。另外一種是外部時(shí)鐘方式,由外部直接提供時(shí)鐘源。
? P0口:即P0.0~P0.7(Pin39~Pin32),輸入輸出腳,可用于8位并行I/O口或分時(shí)復(fù)用為地址和數(shù)據(jù)總線。
P0定義為I/O口時(shí),為準(zhǔn)雙向I/O口,需外接上拉電阻,在程序中向該端口寫入1后,成為高阻抗輸入口。P0口作為輸出口時(shí),每個(gè)引腳可以負(fù)載8個(gè)TTL。在外擴(kuò)存儲(chǔ)器時(shí),可定義為低8位地址/數(shù)據(jù)線。
? P1口:即P1.0~P1.7(Pin1~Pin8),輸入輸出腳,8位準(zhǔn)雙向并行I/O口。P1口內(nèi)部已經(jīng)具有上拉電阻,為8位準(zhǔn)雙向I/O口,能負(fù)載4個(gè)TTL;在Flash編程和校驗(yàn)時(shí),定義為低8位地址線。
? P2口:即P2.0~P2.7(Pin21~Pin28),輸入輸出腳,8位準(zhǔn)雙向并行I/O口。P2口內(nèi)部已經(jīng)具有上拉電阻,為8位準(zhǔn)雙向I/O口,能負(fù)載4個(gè)TTL;當(dāng)訪問外部存儲(chǔ)器時(shí),定義為高8位地址線。
? P3口:即P3.0~P3.7(Pin10~Pin17),輸入輸出腳,8位準(zhǔn)雙向并行I/O口。P3口內(nèi)部已經(jīng)具有上拉電阻,為8位準(zhǔn)雙向I/O口,能負(fù)載4個(gè)TTL。
P3口每個(gè)引腳都具有第二功能。引腳P3.0(RXD)和引腳P3.1(TXD)分別為串行數(shù)據(jù)的接收和發(fā)送端口,用于串行數(shù)據(jù)傳輸;引腳P3.2和引腳P3.3為外部中斷請(qǐng)求,分別用于I和
的中斷輸入;引腳P3.4(T0)和引腳P3.5(T1),分別為定時(shí)器/計(jì)數(shù)器T0和T1的外部計(jì)數(shù)輸入端;引腳
和引腳P3.7(RD)用于讀寫單片機(jī)片外RAM存儲(chǔ)器,分別是外部數(shù)據(jù)寫選通信號(hào)和讀選通信號(hào)。
? RST(Pin9):單片機(jī)內(nèi)部CPU的復(fù)位信號(hào)輸入端。在單片機(jī)的振蕩器啟動(dòng)后,該引腳置兩個(gè)機(jī)器周期以上高電平,便可以實(shí)現(xiàn)復(fù)位。
? ALE/PROG(Pin30):地址鎖存使能端和編程脈沖輸入端。
當(dāng)訪問外部程序存儲(chǔ)器時(shí),ALE引腳的負(fù)跳變將低8位地址打入鎖存;而非訪問內(nèi)部程序存儲(chǔ)器時(shí),ALE引腳將有一個(gè)1/6振蕩頻率的正脈沖信號(hào),該信號(hào)可以用于外部計(jì)數(shù)或時(shí)鐘信號(hào)。當(dāng)訪問外部數(shù)據(jù)存儲(chǔ)器(執(zhí)行MOVX類指令)時(shí),ALE引腳會(huì)跳過一個(gè)脈沖。另外,對(duì)8EH單元的特殊功能寄存器的D0位置1,可禁止ALE輸出,只有在執(zhí)行MOVX或MOVC類指令時(shí),ALE才被激活,仍輸出鎖存有效。在執(zhí)行片外程序代碼時(shí),該設(shè)定禁止ALE位無效。
? :訪問外部程序存儲(chǔ)器的讀選通信號(hào)。
當(dāng)單片機(jī)訪問外部程序存儲(chǔ)器,讀取指令碼時(shí),每個(gè)機(jī)器周期產(chǎn)生2次有效信號(hào),即此腳輸出2個(gè)負(fù)脈沖選通信號(hào);在執(zhí)行片內(nèi)程序存儲(chǔ)器以及讀寫外部數(shù)據(jù)時(shí),不產(chǎn)生脈沖信號(hào)。
? :
為訪問內(nèi)部或外部程序存儲(chǔ)器選擇信號(hào)。
當(dāng)8051 CPU訪問外部程序存儲(chǔ)器時(shí),則EA必須保持低電平;當(dāng)EA保持高電平時(shí),則8051 CPU先從片內(nèi)0000H單元開始,執(zhí)行內(nèi)部程序存儲(chǔ)器程序;如果外部還有擴(kuò)展程序存儲(chǔ)器,則8051 CPU在執(zhí)行完內(nèi)部程序存儲(chǔ)器程序后,自動(dòng)轉(zhuǎn)向執(zhí)行外部程序存儲(chǔ)器中的程序。
1.1.4 單片機(jī)的應(yīng)用領(lǐng)域
單片機(jī)以其高性價(jià)比、高速度、小體積、可重復(fù)編程和方便功能擴(kuò)展等優(yōu)點(diǎn),而得到廣泛的應(yīng)用。特別是51系列單片機(jī)更是達(dá)到百花齊放、百家爭鳴的程度。單片機(jī)主要應(yīng)用于如下幾個(gè)領(lǐng)域。
? 家電產(chǎn)品。例如在電視、空調(diào)、冰箱、洗衣機(jī)、家用防盜報(bào)警器等產(chǎn)品中實(shí)現(xiàn)智能控制。
? 智能玩具。由于單片機(jī)的價(jià)格低廉、功能強(qiáng)大,被廣泛應(yīng)用于智能型玩具的控制,例如發(fā)聲玩具、玩具機(jī)器人、遙控電動(dòng)車等。
? 機(jī)電一體化設(shè)備。機(jī)電一體化設(shè)備是指將機(jī)械技術(shù)、微電子技術(shù)和計(jì)算機(jī)技術(shù)結(jié)合在一起,從而實(shí)現(xiàn)人性化智能控制的設(shè)備。單片機(jī)作為機(jī)電一體化設(shè)備的控制器,可以簡化機(jī)械產(chǎn)品的結(jié)構(gòu)設(shè)計(jì),并擴(kuò)展其功能。
? 計(jì)算機(jī)控制及通信。由于單片機(jī)均集成有串行通信接口,計(jì)算機(jī)可以通過該接口和單片機(jī)進(jìn)行通信,實(shí)現(xiàn)計(jì)算機(jī)的程序控制和數(shù)據(jù)傳輸?shù)取?/p>
? 智能測量設(shè)備。使用單片機(jī)強(qiáng)大的可編程和可擴(kuò)展能力,可以設(shè)計(jì)新一代的智能化儀表,如各種數(shù)字萬用表、示波器等。
? 自動(dòng)測控系統(tǒng)。在自動(dòng)控制和測量領(lǐng)域,可以采用單片機(jī)設(shè)計(jì)各種數(shù)據(jù)采集系統(tǒng)、自適應(yīng)控制系統(tǒng)等。例如溫度的自動(dòng)控制、壓力的自動(dòng)感應(yīng)、電壓電流的數(shù)據(jù)采集和分析等。
總之,單片機(jī)因其豐富的功能和強(qiáng)大的可擴(kuò)展性,可適用于一切需要智能控制的場合。
- Java程序設(shè)計(jì)實(shí)戰(zhàn)教程
- Arduino by Example
- Python入門很簡單
- Web Scraping with Python
- Visual Basic程序設(shè)計(jì)(第3版):學(xué)習(xí)指導(dǎo)與練習(xí)
- PHP 編程從入門到實(shí)踐
- TypeScript圖形渲染實(shí)戰(zhàn):基于WebGL的3D架構(gòu)與實(shí)現(xiàn)
- CouchDB and PHP Web Development Beginner’s Guide
- concrete5 Cookbook
- Babylon.js Essentials
- C++寶典
- 小程序,巧應(yīng)用:微信小程序開發(fā)實(shí)戰(zhàn)(第2版)
- RESTful Web Clients:基于超媒體的可復(fù)用客戶端
- Python程序設(shè)計(jì)開發(fā)寶典
- 零基礎(chǔ)看圖學(xué)ScratchJr:少兒趣味編程(全彩大字版)