本書(shū)針對(duì)目前通用的MCS-51系列單片機(jī),在匯編語(yǔ)言的基礎(chǔ)上,增加了目前流行的C51程序設(shè)計(jì)語(yǔ)言,介紹了單片機(jī)的基本原理和應(yīng)用,包括單片機(jī)的硬件原理和結(jié)構(gòu)、匯編語(yǔ)言指令系統(tǒng)及其編程、C51程序設(shè)計(jì)、單片機(jī)內(nèi)部資源及編程(包括中斷、定時(shí)器/計(jì)數(shù)器、串行口)、單片機(jī)的功能擴(kuò)展(包括鍵盤(pán)、顯示器、D/A及A/D轉(zhuǎn)換器)、單片機(jī)系統(tǒng)的擴(kuò)展(包括存儲(chǔ)器的擴(kuò)展、I/O的擴(kuò)展及串行口的擴(kuò)展)、Keil C集成調(diào)試軟件及Proteus仿真軟件的使用介紹等。本書(shū)的特點(diǎn)是用匯編語(yǔ)言和C語(yǔ)言穿插進(jìn)行講述,實(shí)例較多,且很多例子分別用匯編語(yǔ)言和C語(yǔ)言對(duì)照給出了程序,也給出了教材中重點(diǎn)例題的程序調(diào)試和仿真的視頻。使讀者可以同時(shí)學(xué)習(xí)匯編語(yǔ)言和C語(yǔ)言,原先熟悉匯編語(yǔ)言的讀者也能更快地學(xué)好單片機(jī)C51程序設(shè)計(jì)。
前 言
單片機(jī)從出現(xiàn)至今已經(jīng)有四十多年的歷史了,單片機(jī)技術(shù)也歷經(jīng)了幾個(gè)發(fā)展階段。目前單片機(jī)已滲透到我們生活的各個(gè)領(lǐng)域,很難找到?jīng)]有單片機(jī)滲入的領(lǐng)域。導(dǎo)彈的導(dǎo)航裝置,飛機(jī)上各種儀表的控制,計(jì)算機(jī)的網(wǎng)絡(luò)通信與數(shù)據(jù)傳輸,工業(yè)自動(dòng)化過(guò)程的實(shí)時(shí)控制和數(shù)據(jù)處理,廣泛使用的各種智能IC卡,民用轎車(chē)的安全保障系統(tǒng),錄像機(jī)、攝像機(jī)、全自動(dòng)洗衣機(jī)的控制,以及程控玩具、電子寵物等都離不開(kāi)單片機(jī),更不用說(shuō)全自動(dòng)控制領(lǐng)域的機(jī)器人、智能儀表、醫(yī)療器械了。因此,單片機(jī)的學(xué)習(xí)、開(kāi)發(fā)與應(yīng)用將造就一批計(jì)算機(jī)應(yīng)用與智能化控制的科技人才?萍荚桨l(fā)達(dá),智能化的東西就越多。
目前,單片機(jī)方面的教材有的采用匯編語(yǔ)言講解輔以設(shè)計(jì)程序?qū)嵗,但匯編語(yǔ)言學(xué)習(xí)起來(lái)較難。在實(shí)際應(yīng)用系統(tǒng)開(kāi)發(fā)調(diào)試中,特別是開(kāi)發(fā)比較復(fù)雜的應(yīng)用系統(tǒng)時(shí),為了提高開(kāi)發(fā)效率和使程序便于移植,很多采用C語(yǔ)言。C語(yǔ)言不僅學(xué)習(xí)方便,而且也同匯編語(yǔ)言一樣能夠?qū)纹瑱C(jī)資源進(jìn)行訪(fǎng)問(wèn),因而目前大多數(shù)院校在開(kāi)設(shè)單片機(jī)課程時(shí)都引入了C語(yǔ)言。但引入C語(yǔ)言后在選教材時(shí)就發(fā)現(xiàn)存在兩個(gè)方面的問(wèn)題:有些教材注重單片機(jī)原理,只使用匯編語(yǔ)言;而另一些教材著重于C語(yǔ)言,一般面向開(kāi)發(fā),不講原理或原理性的內(nèi)容很少,屬于高級(jí)教程,不適合初學(xué)者。能兼顧匯編語(yǔ)言和C語(yǔ)言的教材非常少,而實(shí)際使用中需要一本在學(xué)習(xí)單片機(jī)基本原理的同時(shí)能兼顧匯編語(yǔ)言和C語(yǔ)言?xún)蓚(gè)方面的教材。在大學(xué)階段多數(shù)學(xué)生所學(xué)習(xí)的課程中,只有單片機(jī)這門(mén)課能接觸到匯編語(yǔ)言,所以本門(mén)課旨在使學(xué)生在了解匯編語(yǔ)言概念的基礎(chǔ)上學(xué)會(huì)單片機(jī)的編程。編寫(xiě)本書(shū)的目的是想在講述單片機(jī)基本原理的同時(shí)能兼顧匯編語(yǔ)言和C語(yǔ)言?xún)蓚(gè)方面,因此在大多數(shù)實(shí)例中,相同的功能分別用匯編語(yǔ)言和C語(yǔ)言編程實(shí)現(xiàn),使學(xué)生能夠有選擇地掌握一種并認(rèn)識(shí)另一種。同時(shí),為了提高學(xué)生的應(yīng)用設(shè)計(jì)能力,還介紹了目前單片機(jī)接口常用的接口芯片,列舉了幾個(gè)簡(jiǎn)單的單片機(jī)應(yīng)用系統(tǒng)開(kāi)發(fā)實(shí)例。
本書(shū)分為9章,第1章主要介紹單片機(jī)的發(fā)展和應(yīng)用領(lǐng)域;第2章介紹單片機(jī)的結(jié)構(gòu)和原理;第3章介紹Keil與Proteus軟件的使用;第4章介紹MCS-51單片機(jī)的匯編語(yǔ)言指令系統(tǒng)及其編程;第5章介紹單片機(jī)C51程序設(shè)計(jì)基礎(chǔ);第6章介紹單片機(jī)的內(nèi)部資源及編程,包括中斷、定時(shí)器/計(jì)數(shù)器及串行口;第7章介紹單片機(jī)的功能擴(kuò)展,包括顯示器、鍵盤(pán)、D/A轉(zhuǎn)換器、A/D轉(zhuǎn)換器等;第8章介紹單片機(jī)系統(tǒng)的擴(kuò)展,包括存儲(chǔ)器的擴(kuò)展、I/O的擴(kuò)展及串行口的擴(kuò)展;第9章介紹單片機(jī)應(yīng)用系統(tǒng)的開(kāi)發(fā)與設(shè)計(jì)。
本書(shū)的第2章、第4章前3節(jié)、第6章由高惠芳編寫(xiě);第4章的第4節(jié)、第8章由張海峰編寫(xiě);第1章、第9章和第5章的后3節(jié)由胡冀編寫(xiě);第7章由崔佳冬編寫(xiě);第3章、第5章的前4節(jié)由曾毓編寫(xiě);學(xué)院的很多老師給本書(shū)的編寫(xiě)提出了許多寶貴意見(jiàn),研究生們也為本書(shū)插圖的繪制付出很多辛勞,在這里向各位表示感謝!
雖然我們?nèi)w參編人員已盡心盡力,但限于自身水平,書(shū)中不妥之處在所難免,希望各位專(zhuān)家和廣大讀者不吝指正。另外,書(shū)中有些資料來(lái)源于網(wǎng)絡(luò),使用時(shí)間已久,已無(wú)法查證作者,如果本書(shū)引用了您的觀點(diǎn),請(qǐng)與編者聯(lián)系,編者將盡快更正參考文獻(xiàn),并對(duì)您表示誠(chéng)摯的感謝。
編 者
2020年5月
目 錄
第1章 單片機(jī)概述 1
1.1 單片機(jī)的基本概念 1
1.1.1 什么是單片機(jī) 1
1.1.2 微控制器(MCU) 2
1.1.3 如何使用單片機(jī) 2
1.2 單片機(jī)的發(fā)展概況 3
1.2.1 單片機(jī)的發(fā)展歷史 3
1.2.2 MCS-51系列單片機(jī)的發(fā)展 4
1.2.3 現(xiàn)階段主流單片機(jī)系列簡(jiǎn)介 5
1.3 單片機(jī)的應(yīng)用特點(diǎn)與應(yīng)用領(lǐng)域 6
1.3.1 單片機(jī)的應(yīng)用特點(diǎn) 6
1.3.2 單片機(jī)的應(yīng)用領(lǐng)域 6
1.4 單片機(jī)的發(fā)展趨勢(shì) 7
1.5 如何學(xué)好MCS-51系列單片機(jī) 9
1.5.1 為什么要學(xué)51單片機(jī) 9
1.5.2 怎么學(xué)51單片機(jī) 9
習(xí)題 9
第2章 MCS-51單片機(jī)的結(jié)構(gòu)和原理 10
2.1 MCS-51單片機(jī)的基本組成 10
2.1.1 MCS-51單片機(jī)的基本結(jié)構(gòu) 10
2.1.2 MCS-51單片機(jī)的封裝與信號(hào)
引腳 13
2.2 MCS-51單片機(jī)的并行I/O端口
結(jié)構(gòu) 15
2.3 MCS-51系列單片機(jī)的存儲(chǔ)器
結(jié)構(gòu) 18
2.3.1 程序存儲(chǔ)器 18
2.3.2 數(shù)據(jù)存儲(chǔ)器 19
2.4 單片機(jī)的時(shí)鐘電路與時(shí)序 25
2.4.1 時(shí)鐘電路 25
2.4.2 時(shí)序 26
2.5 MCS-51單片機(jī)的工作方式 28
2.5.1 復(fù)位 28
2.5.2 程序執(zhí)行方式 30
2.5.3 單步執(zhí)行方式 31
2.5.4 低功耗方式 31
2.5.5 EPROM編程和校驗(yàn)方式 33
習(xí)題 33
第3章 Keil與Proteus軟件的使用 35
3.1 Keil C51軟件的介紹及應(yīng)用示例 35
3.1.1 Keil C51軟件的安裝及環(huán)境
介紹 35
3.1.2 建立Keil C51工程 36
3.1.3 程序輸入 39
3.1.4 編譯程序 40
3.1.5 程序調(diào)試 42
3.2 Proteus介紹及使用示例 49
3.2.1 Proteus 8原理圖編輯環(huán)境介紹 49
3.2.2 Proteus 8原理圖設(shè)計(jì)方法及
示例 51
3.2.3 Proteus 8程序仿真示例 58
習(xí)題 64
第4章 MCS-51單片機(jī)匯編語(yǔ)言指令系統(tǒng)
及其編程 65
4.1 指令格式及其符號(hào)說(shuō)明 65
4.1.1 指令格式 65
4.1.2 常用符號(hào)說(shuō)明 66
4.1.3 指令的字節(jié) 66
4.2 尋址方式 68
4.2.1 立即尋址 68
4.2.2 直接尋址 68
4.2.3 寄存器尋址 69
4.2.4 寄存器間接尋址 69
4.2.5 變址尋址 70
4.2.6 相對(duì)尋址 70
4.2.7 位尋址 71
4.3 MCS-51系列單片機(jī)指令系統(tǒng) 71
4.3.1 數(shù)據(jù)傳送類(lèi)指令 71
4.3.2 算術(shù)運(yùn)算類(lèi)指令 75
4.3.3 邏輯運(yùn)算及移位類(lèi)指令 79
4.3.4 控制轉(zhuǎn)移類(lèi)指令 82
4.3.5 位操作類(lèi)指令 87
4.4 MCS-51單片機(jī)匯編語(yǔ)言程序
設(shè)計(jì) 89
4.4.1 匯編語(yǔ)言的偽指令 89
4.4.2 匯編語(yǔ)言程序設(shè)計(jì) 92
習(xí)題 111
第5章 單片機(jī)C51程序設(shè)計(jì)基礎(chǔ) 114
5.1 C51數(shù)據(jù)與運(yùn)算 114
5.1.1 C51的數(shù)據(jù)類(lèi)型 114
5.1.2 C51數(shù)據(jù)的存儲(chǔ)類(lèi)型 115
5.1.3 8051特殊功能寄存器的C51
定義 116
5.1.4 8051并行接口及位變量的C51
定義 117
5.2 C51運(yùn)算符、表達(dá)式及其規(guī)則 118
5.2.1 (復(fù)合)賦值運(yùn)算符 118
5.2.2 算術(shù)運(yùn)算符 119
5.2.3 自增和自減運(yùn)算符 120
5.2.4 關(guān)系運(yùn)算符 121
5.2.5 邏輯運(yùn)算符 121
5.2.6 位運(yùn)算符 121
5.2.7 條件運(yùn)算符 123
5.2.8 指針和地址運(yùn)算符 123
5.2.9 優(yōu)先級(jí)和結(jié)合性 123
5.3 C51流程控制語(yǔ)句 124
5.3.1 C51程序的基本結(jié)構(gòu)及
流程圖 124
5.3.2 選擇語(yǔ)句 126
5.3.3 循環(huán)語(yǔ)句 128
5.4 C51構(gòu)造數(shù)據(jù)類(lèi)型 131
5.4.1 數(shù)組 131
5.4.2 指針 133
5.4.3 結(jié)構(gòu)體 135
5.4.4 共用體 138
5.4.5 枚舉 140
5.5 函數(shù) 141
5.5.1 函數(shù)的定義 142
5.5.2 函數(shù)的調(diào)用 143
5.5.3 函數(shù)的嵌套調(diào)用與遞歸調(diào)用 144
5.5.4 中斷服務(wù)函數(shù) 145
5.5.5 指向函數(shù)的指針變量 146
5.5.6 局部變量和全局變量 147
5.6 C51的庫(kù)函數(shù) 149
5.6.1 輸入/輸出流函數(shù)庫(kù)STDIO.H 150
5.6.2 字符串函數(shù)庫(kù)STRING.H 150
5.6.3 標(biāo)準(zhǔn)函數(shù)庫(kù)STDLIB.H及其他
頭文件 151
5.7 C51模塊化程序設(shè)計(jì) 152
5.7.1 基本概念 152
5.7.2 模塊化程序開(kāi)發(fā)過(guò)程 153
習(xí)題 153
第6章 單片機(jī)內(nèi)部資源及編程 155
6.1 中斷系統(tǒng) 155
6.1.1 中斷概述 155
6.1.2 中斷源 156
6.1.3 中斷控制 157
6.1.4 中斷響應(yīng)過(guò)程 160
6.1.5 中斷請(qǐng)求的撤除 162
6.1.6 中斷程序設(shè)計(jì) 162
6.1.7 外部中斷源的擴(kuò)展 165
6.2 定時(shí)器/計(jì)數(shù)器 167
6.2.1 定時(shí)器/計(jì)數(shù)器的結(jié)構(gòu)及工作
原理 168
6.2.2 定時(shí)器/計(jì)數(shù)器的控制 169
6.2.3 定時(shí)器/計(jì)數(shù)器的工作方式 170
6.2.4 定時(shí)器/計(jì)數(shù)器的初始化 173
6.2.5 定時(shí)器/計(jì)數(shù)器應(yīng)用舉例 174
6.3 串行通信口 182
6.3.1 數(shù)據(jù)通信概述 182
6.3.2 單片機(jī)的串行通信接口 188
6.3.3 串行通信的工作方式及波特率
設(shè)置 190
6.3.4 串行口應(yīng)用舉例 193
習(xí)題 203
第7章 單片機(jī)的功能擴(kuò)展 205
7.1 顯示器及其接口 205
7.1.1 LED顯示器 205
7.1.2 液晶顯示器 209
7.2 鍵盤(pán)的輸入及接口 211
7.2.1 鍵盤(pán)概要 211
7.2.2 鍵盤(pán)程序設(shè)計(jì) 212
7.3 D/A轉(zhuǎn)換器的接口與應(yīng)用 218
7.3.1 DAC的轉(zhuǎn)換原理及分類(lèi) 218
7.3.2 并行接口DAC 220
7.3.3 串行接口DAC 225
7.4 A/D轉(zhuǎn)換器的接口與應(yīng)用 227
7.4.1 ADC的轉(zhuǎn)換原理及分類(lèi) 227
7.4.2 并行接口ADC 228
7.4.3 串行接口ADC 231
習(xí)題 234
第8章 單片機(jī)系統(tǒng)的擴(kuò)展 235
8.1 MCS-51單片機(jī)最小應(yīng)用系統(tǒng) 235
8.1.1 MCS-51單片機(jī)最小應(yīng)用系統(tǒng)的
構(gòu)成 235
8.1.2 系統(tǒng)擴(kuò)展的內(nèi)容與方法 236
8.2 存儲(chǔ)器的擴(kuò)展 237
8.2.1 程序存儲(chǔ)器的擴(kuò)展 237
8.2.2 數(shù)據(jù)存儲(chǔ)器的擴(kuò)展 238
8.2.3 存儲(chǔ)器綜合擴(kuò)展 239
8.2.4 閃速存儲(chǔ)器及其擴(kuò)展 240
8.3 輸入與輸出口的擴(kuò)展 241
8.3.1 簡(jiǎn)單的并行I/O接口擴(kuò)展 242
8.3.2 用8255擴(kuò)展并行I/O接口 243
8.4 串行口的擴(kuò)展 248
8.4.1 I2C總線(xiàn)及其接口芯片 248
8.4.2 SPI及其芯片 250
8.4.3 單總線(xiàn)及其接口芯片 252
8.4.4 Microwire串行總線(xiàn)及其接口
芯片 256
習(xí)題 258
第9章 單片機(jī)應(yīng)用系統(tǒng)的開(kāi)發(fā)與設(shè)計(jì) 259
9.1 單片機(jī)應(yīng)用系統(tǒng)的設(shè)計(jì) 259
9.1.1 總體設(shè)計(jì) 259
9.1.2 硬件設(shè)計(jì) 259
9.1.3 軟件設(shè)計(jì) 259
9.1.4 下載調(diào)試 260
9.2 單片機(jī)應(yīng)用系統(tǒng)舉例 260
9.2.1 步進(jìn)電動(dòng)機(jī)的驅(qū)動(dòng) 260
9.2.2 超聲波測(cè)距 263
9.2.3 LED點(diǎn)陣屏顯示系統(tǒng) 268
習(xí)題 274
參考文獻(xiàn) 275