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