《MCS-51單片機原理及介面技術(第2版)》
《8051單片機原理及介面技術(第2版)》
GITHUB: https://github.com/jash-git/Jash-good-idea-20220101-001/tree/main/HW/8051
內 容 簡 介; 2
前 言; 3
目 錄; 4
第1章 MCS-51系列單片機的組成; 9
1.1 單片機概述; 9
1.1.1 單片機的發展歷史; 9
1.1.2 目前主流單片機; 10
1. MCS-51單片機及其相容產品; 10
2. 其他單片機介紹; 11
1.1.3 單片機的應用領域; 12
1. 工業控制; 13
2. 智慧型儀器器儀錶; 13
3. 資料獲取與處理; 13
4. 家用電器; 13
1.2 MCS-51系列單片機的內部結構; 13
1.2.1 微處理器結構; 13
1.2.2 振盪與時鐘; 15
1.2.3 時鐘週期、狀態週期和機器週期; 15
1. 時鐘週期; 15
2. 狀態週期; 15
3. 機器週期; 15
1.2.4 重定及重定電路; 16
1.重定模式; 16
2.重定電路; 16
1.2.5 MCS-51系列單片機的引腳特性; 17
1.3 MCS-51系列單片機的記憶體組織; 18
1.3.1 程式記憶體; 19
1.3.2 片內資料記憶體; 20
1.工作寄存器區; 20
2.位定址區; 21
3.數據緩衝區; 21
1.3.3 特殊功能寄存器; 22
1.3.4 片外資料記憶體; 23
1.4 MSC-51系列單片機的基本I/O口; 23
1.4.1 P0口的結構與特性; 23
1.4.2 P1口的結構與特性; 24
1.4.3 P2口的結構與特性; 25
1.4.4 P3口的結構與特性; 25
1.5 MCS-51系列單片機的工作方式; 26
1. 待機方式; 27
2. 掉電方式; 27
本 章 小 結; 28
習 題 1; 28
第2章 MCS-51系列單片機的指令 系統及組合語言程式設計; 29
2.1 指令格式與定址方式; 29
2.1.1 指令格式; 29
2.1.2 MCS-51單片機定址方式; 30
1. 即時定位; 31
2. 直接定址; 31
3. 寄存器定址; 31
4. 寄存器間接定址; 31
5. 變址定址; 31
6. 相對定址; 32
7. 位定址; 32
2.2 MCS-51單片機指令系統; 33
2.2.1 資料傳送和交換類指令; 33
1. 內部資料傳送指令; 33
2. 資料指標賦值指令(16bit資料傳送指令); 35
3. 片外資料傳送指令; 35
4. ROM資料訪問指令(查表指令); 36
5. 堆疊操作指令; 36
6. 資料交換指令; 37
2.2.2 算數運算類指令; 38
1. 加法指令; 38
2. 減法指令; 40
3. 乘除指令; 41
4. 十進位元調整指令; 42
2.2.3 邏輯運算指令; 43
1. 邏輯與運算指令; 43
2. 邏輯或運算指令; 44
3. 邏輯異或運算指令; 44
4. 累加器清0和取反指令; 45
5. 累加器移位元元指令; 45
2.2.4 控制轉移指令; 46
1. 無條件轉移指令; 46
2. 條件轉移指令; 47
3. 副程式調用和返回指令; 48
4. 空操作指令; 49
2.2.5 位元元操作類指令; 49
1. 位元元傳送指令; 50
2. 位置位元元和重定指令; 50
3. 位元元運算指令; 50
4. 位元元測試轉移指令; 51
2.3 組合語言程式設計; 51
2.3.1 MCS-51單片機組合語言的虛擬指令; 52
1. ORG(Origin)定位虛擬指令; 52
2. END(End of assembly)結束彙編虛擬指令; 52
3. EQU(Equate)賦值虛擬指令; 52
4. DB(Define Byte)定義位元元組指令; 52
5. DW(Define Word)定義資料字指令; 53
6. DS(Define Storage)定義存儲區指令; 53
7. BIT位元元定義指令; 53
2.3.2 程式結構; 53
1. 順序結構; 53
2. 分支結構; 53
3. 迴圈結構; 55
2.3.3 組合語言程式設計方法; 57
2.4 實用程式設計舉例; 58
2.4.1 數制轉換程式; 58
1. 二進位轉換成BCD碼十進位; 58
2. BCD碼十進位轉換成二進位; 58
2.4.2 資料處理程式設計; 59
1. 多位元組BCD碼十進位數字相加; 59
2. 求平均值; 60
3. 極值查找; 61
4. 關鍵字查找; 61
5. 數據排序; 62
2.4.3 查表程式設計; 63
2.4.4 副程式設計; 65
1. 副程式參數傳遞; 65
2.4.5 延時程式設計; 67
1. 單重迴圈延時程式; 67
2. 多重迴圈延時程式; 67
本 章 小 結; 68
習 題 2; 69
一、填空題; 69
二、程式閱讀題; 70
三、程式設計題; 71
第3章 MCS-51系列單片機中斷系統; 73
3.1 中斷系統概述; 73
3.1.1 中斷系統的概念; 73
1.中斷源; 74
2.中斷優先順序; 74
3.中斷識別方式; 74
4.中斷回應; 75
3.1.2 中斷的作用; 75
1.實現CPU與外部設備的速度配合; 75
2.實現即時處理; 75
3.實現故障處理; 75
3.2 MCS-51系列單片機中斷源與插斷要求; 75
3.2.1 計時器/計數器控制寄存器TCON; 76
3.2.2 串列口控制寄存器SCON; 77
3.3 MCS-51系列單片機中斷控制; 77
3.3.1 中斷允許控制; 77
3.3.2 中斷優先權管理; 78
3.4 中斷回應; 79
3.4.1 中斷回應條件; 79
3.4.2 中斷回應過程; 80
3.4.3 中斷回應的時間; 80
3.5 插斷要求的撤除; 80
3.6 中斷應用舉例; 81
3.6.1 中斷程式設計基礎; 81
1.中斷初始化; 81
2.中斷服務程式; 82
3.6.2 外部中斷應用舉例; 82
3.6.3 外部中斷的擴展; 83
3.7 中斷應用注意事項; 85
本 章 小 結; 86
習 題 3; 86
第4章 MCS-51系列單片機計時器/計數器; 87
4.1 MCS-51系列單片機計時器/計數器的結構; 87
4.2 MCS-51系列單片機計時器/計數器的控制; 88
4.2.1 計時器/計數器工作方式寄存器TMOD; 88
4.2.2 計時器/計數器控制寄存器TCON; 89
4.3 計時器/計數器的工作方式及應用; 89
4.3.1 計時器/計數器方式0及應用; 89
4.3.2 計時器/計數器方式1及應用; 92
4.3.3 計時器/計數器方式2及應用; 94
4.3.4 計時器/計數器方式3及應用; 96
4.3.5 計時器/計數器的其他應用舉例; 97
本 章 小 結; 98
習 題 4; 99
第5章 MCS-51系列單片機的擴展; 100
5.1 單片機三匯流排的形成及編址; 100
5.1.1 單片機三匯流排的形成; 100
1. 位址匯流排(Address Bus,AB); 100
2. 資料匯流排(Data Bus,DB); 100
3. 控制匯流排(Control Bus,CB); 101
5.1.2 編址及解碼; 101
1. 線選法; 102
2. 解碼法; 103
5.2 記憶體的擴展; 104
5.2.1 程式記憶體擴展; 104
1. 常用的程式記憶體; 104
2. 程式記憶體擴展實例; 107
5.2.2 資料記憶體的擴展; 109
1. 常用的資料記憶體; 109
2. 擴展實例; 111
5.3 輸入/輸出口的擴展; 111
5.3.1 簡單介面晶片的擴展; 112
1. 用緩衝器擴展輸入口; 112
2. 用鎖存器擴展輸出口; 113
5.3.2 可程式設計晶片8155的擴展; 114
1. 8155的結構; 114
2. 8155的RAM和I/O口位址編碼; 115
3. 8155的命令字和狀態字; 115
4. 8155的計時器/計數器; 117
5. MCS-51單片機與8155的介面; 118
5.3.3 可程式設計晶片8255A的擴展; 120
1. 8255A的結構; 120
2. 8255A的引腳功能; 121
3. 8255A與單片機連接; 122
4. 8255A的控制字; 123
5. 8255A的工作方式; 124
本 章 小 結; 126
習 題 5; 126
第6章 MCS-51系列單片機的介面技術; 127
6.1 鍵盤介面技術; 127
6.1.1 鍵的特性; 127
6.1.2 獨立鍵盤介面技術; 128
1.獨立鍵盤的結構; 128
2.獨立鍵盤與單片機介面; 128
6.1.3 矩陣鍵盤介面技術; 130
1.矩陣鍵盤的結構; 130
2.矩陣鍵盤工作方式; 130
6.2 數碼顯示介面技術; 135
6.2.1 數碼顯示原理; 135
1.LED顯示器的結構與原理; 135
2.數碼管段選碼; 136
6.2.2 靜態顯示技術; 136
6.2.3 動態顯示技術; 138
6.3 液晶顯示技術; 139
6.3.1 液晶顯示器簡介; 139
6.3.2 液晶顯示器與單片機介面; 139
1.HD44780液晶顯示控制驅動器; 140
2.HD44780與MCS-51單片機介面; 140
6.4 A/D轉換器與單片機的介面技術; 141
6.4.1 A/D轉換器的性能參數與選型; 141
1.A/D轉換器的主要參數和意義; 141
2.A/D轉換器的選取原則; 142
6.4.2 ADC0809與單片機介面; 142
1.ADC0809的結構及引腳特性; 142
2.ADC0809與MCS-51系列單片機介面; 144
6.4.3 AD574A與單片機介面; 146
1.AD574A的結構及引腳特性; 146
2.AD574A與MCS-51系列單片機介面; 148
6.5 D/A轉換器與單片機的介面技術; 150
6.5.1 D/A轉換器的性能參數與選型; 150
1.D/A轉換器的主要參數和意義; 150
2.D/A轉換器的選取原則; 150
6.5.2 DAC0832與單片機介面; 150
1.DAC0832介紹; 150
2.DAC0832與MCS-51系列單片機介面; 151
6.5.3 DAC1210與單片機介面; 152
1. DAC1210介紹; 152
2. DAC1210與MCS-51系列單片機介面; 152
6.5.4 V/I變換電路; 153
6.6 序列介面技術; 154
6.6.1 SPI串列匯流排; 154
6.6.2 SPI A/D、D/A轉換器與MCS-51單片機介面; 155
1. MAX1247簡介; 155
2. MAX525介紹; 157
3. MAX1247、MAX525與MCS-51介面; 158
6.6.3 I2C串列匯流排; 161
1. I2C匯流排簡介; 161
2. I2C匯流排協定; 162
3. I2C匯流排的介面技術; 162
6.6.4 I2C器件與MCS-51介面; 162
1. 24C01簡介; 162
2. 24C01時序; 163
3. 24C01與MCS-51介面; 163
6.7 開關量輸入/輸出介面技術; 167
6.7.1 光電隔離技術和器件; 167
6.7.2 開關量輸入介面; 167
6.6.3 開關量輸出介面; 167
本 章 小 結; 169
習 題 6; 169
第7章 MCS-51系列單片機串列通信; 170
7.1 串列通信的基本概念; 170
7.1.1 資料通信; 170
7.1.2 串列通信的傳輸方式; 170
7.1.3 非同步通信和同步通信; 170
1.非同步通信; 170
2.同步通信; 171
3.串列傳輸速率; 171
7.2 MCS-51系列單片機串列通信介面; 172
7.2.1 串列口的結構與組成; 172
1.串列資料緩衝器(SBUF); 172
2.串列口控制寄存器(SCON); 173
3.電源控制寄存器(PCON); 173
7.2.2 串列口的工作方式; 173
1.方式0; 173
2.方式1; 174
3.方式2和方式3; 175
7.2.3 串列傳輸速率的設置; 175
7.2.4 串列通信介面標準; 177
1.RS-232C通信介面; 177
2.RS-422A通信介面; 177
3.RS-485通信介面; 178
4.RS232C、RS-422A/485通信介面的性能比較; 179
7.3 PC機與單片機通信; 179
7.3.1 PC機串口資源及程式設計使用方法; 179
1.設置串列傳輸速率; 180
2.設置資料格式; 180
3.設置操作方式; 180
4.設置中斷允許寄存器; 180
7.3.2 PC機與單片機雙機通信; 181
1.PC機的通信軟體; 182
2.MCS-51單片機通信軟體; 182
7.3.3 PC機與單片機多機通信; 184
1.PC機軟體設計; 185
2.單片機軟體設計; 186
本 章 小 結; 187
習 題 7; 187
第8章 C51程式設計語言及程式設計; 188
8.1 C51資料類型與運算; 188
8.1.1 C51資料類型; 188
1.char字元類型; 188
2.int整型; 189
3.long長整型; 189
4.float浮點型; 189
5.指針型; 189
6.bit位元變數; 189
7.sfr特殊功能寄存器; 190
8.sfr16 16位特殊功能寄存器; 190
9.sbit 可定址位; 190
8.1.2 C51資料存儲類型; 190
8.1.3 C51定義SFR; 191
8.1.4 C51定義並行口; 192
8.1.5 C51定義位元變數; 193
1.位元變數的定義; 193
2.函數可以有bit類型的參數,也可以有bit類型的返回值; 193
3.對位元變數定義的限制; 193
8.1.6 C51運運算元、運算式及其規則; 193
1.算術運運算元和算術運算式; 193
2.關係運運算元和關聯運算式; 194
3.邏輯運運算元和邏輯運算式; 195
4.位運運算元及其運算式; 195
5.設定運運算元和賦值運算式; 195
6.複合設定運運算元; 196
8.2 C51流程控制語句; 196
8.2.1 選擇語句; 196
1.if語句; 196
2.switch/case語句; 198
8.2.2 迴圈語句; 199
1.if語句和goto語句; 199
2.while語句; 200
3.do-while語句; 200
4.for語句; 201
8.3 C51構造資料類型; 202
8.3.1 陣列; 202
1.一維陣列; 202
2.二維陣列; 202
3.字元陣列; 203
4.查表; 203
8.3.2 指針; 203
8.4 C51函數; 204
8.4.1 函數的定義與分類; 204
1.函數的分類; 204
2.函數的定義; 205
8.4.2 函數的調用; 205
8.4.3 函數的嵌套調用與遞迴呼叫; 206
8.4.4 指向函數的指標變數; 207
8.4.5 C51的庫函數; 208
1.字元函式程式庫ctype.h; 208
2.標準函式程式庫stdlib.h; 209
3.數學函式程式庫math.h; 209
4.絕對位址訪問標頭檔absacc.h; 210
5.內建函式庫intrins.h; 210
6.訪問SFR和SFR_bit位址標頭檔reg××.h; 210
8.5 C51應用程式設計實例; 210
8.5.1 MCS-51系列單片機內部資源程式設計; 210
1.外部中斷服務程式及常式; 210
2.計時器/計數器程式設計; 211
8.5.2 MCS-51系列單片機擴展資源程式設計; 212
8.5.3 MCS-51系列單片機介面技術程式設計; 214
本 章 小 結; 223
習 題 8; 223
第9章 單片機應用系統設計與開發; 224
9.1 單片機應用系統設計的一般步驟和方法; 224
9.1.1 對單片機應用系統的性能要求; 224
9.1.2 設計步驟; 224
1.需求分析; 224
2.總體設計; 225
3.硬體設計; 226
4.軟體設計; 226
5.單片機應用系統的調試; 226
6.產品驗收與維護; 226
7.檔編制與技術歸檔; 226
9.2 單片機應用系統的抗幹擾技術; 227
9.2.1 硬體抗幹擾技術; 227
1.抑制幹擾源常用措施; 227
2.切斷幹擾傳播途徑措施; 228
3.提高敏感器件的抗幹擾性能; 228
9.2.2 軟體抗幹擾技術; 228
1.數位濾波技術; 228
2.指令冗餘技術; 229
3.軟體陷阱技術; 229
4.輸入口信號重複檢測; 230
5.輸出埠資料刷新; 230
6.程式自檢; 230
9.3 簡易電腦時鐘設計; 231
9.3.1 功能要求; 231
9.3.2 總體設計; 231
9.3.3 硬體設計; 231
1.微處理器選擇; 231
2.電路設計; 231
9.3.4 軟體設計; 232
1.操作功能設計; 232
2.程式設計思路; 233
3.程式原始程式碼; 233
9.4 數位電壓表設計; 239
9.4.1 功能要求; 239
9.4.2 總體設計; 239
9.4.3 硬體設計; 239
1.器件選擇; 239
2.原理圖設計; 240
3.Proteus與Keil模擬平臺建立; 240
9.4.4 軟體設計; 240
9.5 電動小車動態平衡系統; 243
9.5.1 功能要求; 243
9.5.2 總體設計; 244
1.車型選擇; 244
2.車體行駛設計; 245
3.系統平衡設計; 245
4.其他功能設計; 245
9.5.3 硬體設計; 245
1.獨立供電模組; 245
2.軌跡檢測模組; 246
3.傾角檢測模組; 247
4.電機驅動電路; 247
5.顯示模組; 249
6.聲光報警模組; 249
7.單片機系統; 249
9.5.2 軟體設計; 249
本 章 小 結; 274
習 題 9; 274
附錄A ASCII碼字元表; 275
附錄B MCS-51單片機指令表; 276
參 考 文 獻; 281