本書詳細介紹美國ATMEL公司的AT89S51/52單片機片內硬體資源及工作原理,重點介紹了單片機套用的各種技術實現以及相應的C51語言編程,如信息的顯示與輸入,中斷,定時/計數,串列通信,模/數與數/模轉換以及系統的並行與串列擴展的接口設計等。
第1章 單片機概述 1
1.1 什麼是單片機 1
1.2 單片機的發展歷史 2
1.3 單片機的特點 2
1.4 單片機的套用 3
1.5 單片機的發展趨勢 4
1.6 MCS-51系列與AT89S5x系列單片機 5
1.6.1 MCS-51系列單片機 5
1.6.2 AT89S5x系列單片機 6
1.7 各種衍生品種的8051單片機 8
1.7.1 STC系列單片機 8
1.7.2 C8051F×××單片機 9
1.7.3 ADμC812單片機 9
1.7.4 華邦W77系列、W78系列單片機 9
1.8 PIC系列單片機與AVR系列單片機 10
1.8.1 PIC系列單片機 10
1.8.2 AVR系列單片機 11
1.9 其他的嵌入式處理器簡介 11
1.9.1 嵌入式DSP處理器 12
1.9.2 嵌入式微處理器 12
思考題及習題 13
第2章 AT89S51單片機片內
硬體結構 15
2.1 AT89S51單片機的片內硬體結構 15
2.2 AT89S51的引腳功能 17
2.2.1 電源及時鐘引腳 17
2.2.2 控制引腳 17
2.2.3 並行I/O口引腳 18
2.3 AT89S51的CPU 19
2.3.1 運算器 19
2.3.2 控制器 21
2.4 AT89S51單片機存儲器的結構 21
2.4.1 程式存儲器空間 22
2.4.2 數據存儲器空間 22
2.4.3 特殊功能暫存器 23
2.4.4 位地址空間 26
2.5 AT89S51單片機的並行I/O連線埠 27
2.5.1 P0口 27
2.5.2 P1口 28
2.5.3 P2口 29
2.5.4 P3口 30
2.6 時鐘電路與時序 30
2.6.1 時鐘電路設計 31
2.6.2 機器周期、指令周期與指令時序 32
2.7 復位操作和復位電路 32
2.7.1 復位操作 32
2.7.2 復位電路設計 33
2.8 看門狗定時器(WDT)的使用 33
2.9 低功耗節電模式 35
2.9.1 空閒模式 35
2.9.2 掉電運行模式 36
2.10 AT89S52單片機與AT89S51單片機的
差異 36
2.10.1 AT89S52單片機與AT89S51
單片機片內硬體資源的差別 37
2.10.2 AT89S52的引腳 37
2.10.3 AT89S52單片機的存儲器結構 37
思考題及習題 40
第3章 C51程式語言基礎 43
3.1 C51程式語言簡介 43
3.1.1 C51語言與8051彙編語言的比較 43
3.1.2 C51語言與標準C語言的比較 44
3.2 C51語言程式設計基礎 44
3.2.1 C51語言中的數據類型與
存儲類型 45
3.2.2 C51語言的特殊功能暫存器及
位變數定義 49
3.2.3 C51語言的絕對地址訪問 51
3.2.4 C51的基本運算 52
3.2.5 C51的分支與循環程式結構 54
3.2.6 C51的數組 60
3.2.7 C51的指針 62
3.3 C51語言的函式 63
3.3.1 函式的分類 63
3.3.2 函式的參數與返回值 64
3.3.3 函式的調用 65
3.3.4 中斷服務函式 66
3.3.5 變數及存儲方式 66
3.3.6 宏定義與檔案包含 66
3.3.7 庫函式 67
思考題及習題 68
第4章 開發與仿真工具 69
4.1 Keil C51的使用 69
4.1.1 Keil C51簡介 69
4.1.2 基本操作 69
4.1.3 添加用戶源程式檔案 71
4.1.4 程式的編譯與調試 73
4.1.5 項目的設定 75
4.2 Proteus虛擬仿真工具介紹 77
4.2.1 Proteus功能簡介 77
4.2.2 Proteus ISIS的虛擬仿真 78
4.2.3 Proteus的各種虛擬仿真調試工具 84
4.2.4 虛擬設計仿真舉例 87
思考題及習題 93
第5章 單片機與開關、鍵盤以及
顯示器件的接口設計 94
5.1 單片機控制發光二極體顯示 94
5.1.1 單片機與發光二極體的連線 94
5.1.2 I/O連線埠的編程控制 95
5.2 開關狀態檢測 98
5.2.1 開關檢測案例1 98
5.2.2 開關檢測案例2 99
5.3 單片機控制LED數碼管的顯示 100
5.3.1 LED數碼管的顯示原理 100
5.3.2 LED數碼管的靜態顯示與
動態顯示 103
5.4 單片機控制LED點陣顯示器顯示 106
5.4.1 LED點陣顯示器的結構與
顯示原理 106
5.4.2 控制16×16 LED點陣顯示屏的
案例 107
5.5 單片機控制LCD 1602液晶顯示器的
顯示 109
5.5.1 LCD 1602液晶顯示模組簡介 110
5.5.2 單片機控制字元型LCD 1602顯示
案例 116
5.6 鍵盤接口設計 119
5.6.1 鍵盤接口設計應解決的問題 119
5.6.2 獨立式鍵盤接口設計案例 120
5.6.3 矩陣式鍵盤的接口設計案例 127
5.6.4 非編碼鍵盤掃描方式的選擇 129
5.6.5 單片機與專用鍵盤/顯示器晶片
HD7279的接口設計 130
思考題及習題 140
第6章 中斷系統的工作原理及
套用 142
6.1 AT89S51中斷技術概述 142
6.2 AT89S51中斷系統結構 142
6.2.1 中斷請求源 143
6.2.2 中斷請求標誌暫存器 143
6.3 中斷允許與中斷優先權的控制 144
6.3.1 中斷允許暫存器IE 145
6.3.2 中斷優先權暫存器IP 145
6.4 回響中斷請求的條件 146
6.5 外部中斷的回響時間 147
6.6 外部中斷的觸發方式選擇 148
6.6.1 電平觸發方式 148
6.6.2 跳沿觸發方式 148
6.7 中斷請求的撤銷 148
6.8 中斷函式 149
6.9 中斷系統套用舉例 150
6.9.1 單一外中斷的套用 151
6.9.2 兩個外中斷的套用 152
6.9.3 中斷嵌套的套用 153
思考題及習題 155
第7章 定時器/計數器的工作原理及
套用 157
7.1 定時器/計數器的結構 157
7.1.1 定時器/計數器工作方式
暫存器TMOD 158
7.1.2 定時器/計數器控制暫存器
TCON 158
7.2 定時器/計數器的4種工作方式 159
7.2.1 方式0 159
7.2.2 方式1 160
7.2.3 方式2 160
7.2.4 方式3 161
7.3 計數器對外部輸入的計數信號的
要求 162
7.4 定時器/計數器T0、T1的編程套用 163
7.4.1 P1口控制8隻LED每0.5s
閃亮一次 163
7.4.2 計數器的套用 164
7.4.3 控制P1.0產生周期為2ms的
方波 166
7.4.4 利用T1控制發出1kHz的
音頻信號 167
7.4.5 LED數碼管秒表的製作 169
7.4.6 測量脈衝寬度——門控位GATEx的
套用 171
7.4.7 LCD時鐘的設計 173
7.5 AT89S52新增定時器/計數器T2
簡介 175
7.5.1 T2的特殊功能暫存器T2CON
和T2MOD 175
7.5.2 T2的16位自動重裝載方式 177
7.5.3 T2的捕捉方式 179
7.5.4 T2的波特率發生器方式及
可程式時鐘輸出 179
思考題及習題 182
第8章 串列口的工作原理及
套用 184
8.1 串列通信基礎 184
8.1.1 並行通信與串列通信 184
8.1.2 同步通信與異步通信 185
8.1.3 串列通信的傳輸模式 186
8.1.4 串列通信的錯誤校驗 186
8.2 串列口的結構 187
8.2.1 串列口控制暫存器SCON 187
8.2.2 特殊功能暫存器PCON 188
8.3 串列口的4種工作方式 189
8.3.1 方式0 189
8.3.2 方式1 193
8.3.3 方式2 194
8.3.4 方式3 195
8.4 多機通信 196
8.5 波特率的制定方法 197
8.5.1 波特率的定義 197
8.5.2 定時器T1產生波特率的計算 197
8.6 串列口套用設計案例 198
8.6.1 串列通信標準接口RS232、RS422
與RS485簡介 199
8.6.2 方式1的套用設計 201
8.6.3 方式2和方式3的套用設計 208
8.6.4 多機通信的套用設計 210
8.6.5 單片機與PC串列通信的設計 216
8.6.6 PC與單片機或與多個單片機的
串列通信 220
思考題及習題 221
第9章 單片機系統的並行擴展 223
9.1 系統並行擴展技術 223
9.1.1 系統並行擴展結構 223
9.1.2 地址空間分配 225
9.1.3 外部地址鎖存器 227
9.2 外部數據存儲器的並行擴展 228
9.2.1 常用的靜態RAM(SRAM)晶片 228
9.2.2 讀寫片外RAM的操作時序 229
9.2.3 並行擴展數據存儲器的設計 230
9.2.4 單片機外擴數據存儲器RAM6264的
案例設計 232
9.3 片內Flash存儲器的編程 233
9.3.1 使用通用編程器的程式寫入 234
9.3.2 使用下載線的ISP編程 234
9.4 E2PROM的並行擴展 235
9.4.1 並行E2PROM晶片簡介 235
9.4.2 AT89S51單片機擴展E2PROM
AT2864的設計 236
9.5 AT89S51擴展並行I/O晶片82C55的
設計 237
9.5.1 I/O接口擴展概述 237
9.5.2 並行I/O晶片82C55簡介 238
9.5.3 82C55的3種工作方式 241
9.5.4 AT89S51單片機與82C55的接口
設計 245
9.6 利用74LSTTL電路擴展並行I/O口 247
9.7 用AT89S51單片機的串列口 擴展並行
輸入/輸出口 248
9.7.1 用74LS165擴展並行輸入口 248
9.7.2 用74LS164擴展並行輸出口 249
思考題及習題 250
第10章 AT89S51單片機系統的串列
擴展 252
10.1 單匯流排串列擴展 252
10.1.1 單匯流排擴展的典型套用——
DS18B20的溫度測量系統 252
10.1.2 設計案例:單匯流排DS18B20
溫度測量系統 255
10.2 SPI匯流排串列擴展 258
10.3 I2C匯流排的串列擴展 259
10.3.1 I2C串列匯流排系統的基本結構 259
10.3.2 I2C匯流排的數據傳送規定 260
10.3.3 AT89S51的I2C匯流排擴展系統 263
10.3.4 I2C匯流排數據傳送的模擬 264
10.3.5 利用I2C匯流排擴展E2PROM
AT24C02的IC卡設計 267
思考題及習題 273
第11章 AT89S51單片機與DAC、
ADC的接口 274
11.1 單片機擴展DAC概述 274
11.2 單片機擴展並行8位DAC0832的
設計 275
11.2.1 DAC0832簡介 275
11.2.2 案例設計:單片機擴展DAC0832的
程控電源 276
11.2.3 案例設計:波形發生器的
製作 278
11.3 單片機擴展串列10位
DAC——TLC5615 282
11.3.1 串列DAC——TLC5615簡介 282
11.3.2 案例設計:單片機擴展串列
DAC——TLC5615的設計 284
11.4 單片機擴展ADC概述 286
11.5 單片機並行擴展8位A/D轉換器
ADC0809 287
11.5.1 案例設計:單片機控制ADC0809
進行A/D轉換 288
11.5.2 案例設計:兩路輸入的數字電壓表的設計 290
11.6 單片機擴展串列8位A/D轉換器
TLC549 293
11.6.1 TLC549的特性及工作原理 293
11.6.2 案例設計:單片機擴展TLC549的
設計 294
11.7 單片機擴展串列12位
ADC——TLC2543的設計 296
11.7.1 TLC2543的特性及工作原理 296
11.7.2 案例設計:單片機擴展TLC2543的
設計 298
思考題及習題 300
第12章 單片機各種套用設計 302
12.1 單片機控制步進電機的設計 302
12.2 單片機控制直流電機 304
12.3 頻率計的製作 306
12.4 電話機撥號的模擬 309
12.5 8位競賽搶答器設計 314
12.6 基於時鐘/日曆晶片DS1302的
電子鐘設計 318
思考題及習題 324
第13章 功率接口設計 325
13.1 單片機與外圍集成數字驅動電路的
接口 325
13.2 單片機與光電耦合器的接口 327
13.2.1 電晶體輸出型光電耦合器驅動
接口 327
13.2.2 晶閘管輸出型光電耦合器驅動
接口 329
13.3 單片機與繼電器的接口 330
13.3.1 單片機與直流電磁式繼電器功率
接口 330
13.3.2 單片機與交流電磁式接觸器的
接口 331
13.4 單片機與晶閘管的接口 332
13.4.1 單向晶閘管 332
13.4.2 雙向晶閘管 332
13.4.3 光耦合雙向晶閘管驅動器 332
13.5 單片機與集成功率電子開關輸出
接口 334
13.5.1 集成功率電子開關TWH8751
簡介 334
13.5.2 集成功率電子開關TWH8751的
典型套用 335
13.6 單片機與固態繼電器的接口 336
13.6.1 固態繼電器的特性與分類 336
13.6.2 固態繼電器的套用 337
13.7 低壓開關量信號輸出技術 339
思考題及習題 340
第14章 單片機套用系統抗干擾與可靠
性設計 341
14.1 干擾的來源 341
14.2 供電系統干擾及其抗干擾措施 342
14.2.1 電源噪聲來源、種類及危害 342
14.2.2 供電系統的抗干擾設計 342
14.3 過程通道干擾的抑制措施——隔離 343
14.3.1 光電隔離的基本配置 343
14.3.2 光電隔離的實現 344
14.4 空間干擾及抗干擾措施 345
14.4.1 接地技術 345
14.4.2 禁止技術 347
14.5 反電勢干擾的抑制 348
14.6 印製電路板的抗干擾設計 349
14.6.1 地線及電源線設計 349
14.6.2 去耦電容的配置 349
14.6.3 印製電路板的布線的
抗干擾設計 350
14.7 軟體抗干擾措施 350
14.7.1 軟體抗干擾的一般方法 350
14.7.2 軟體濾波 351
14.7.3 開關量輸入/輸出軟體抗
干擾設計 352
14.8 看門狗定時器的使用 352
思考題及習題 353
第15章 單片機套用系統的設計與
調試 355
15.1 單片機套用系統的設計步驟 355
15.2 單片機套用系統設計 356
15.2.1 硬體設計應考慮的問題 356
15.2.2 典型的單片機套用系統 357
15.2.3 系統設計中的匯流排驅動 358
15.2.4 軟體設計考慮的問題 360
15.3 單片機套用系統的仿真開發與調試 360
思考題及習題 365
附錄A 基礎實驗題目 366
實驗1 單片機I/O口實驗——
LED流水燈 366
實驗2 單個外部中斷實驗 366
實驗3 中斷嵌套實驗 367
實驗4 定時器/計數器的定時實驗 367
實驗5 定時器/計數器的計數器實驗 367
實驗6 串口方式0擴展並行輸出口
實驗 367
實驗7 串列口方式0擴展並行輸入口
實驗 368
實驗8 雙單片機串列通信 368
實驗9 擴展82C55並行I/O實驗 369
實驗10 獨立式鍵盤實驗 369
實驗11 矩陣式鍵盤掃描實驗 369
實驗12 單片機控制1602液晶顯示器
顯示字元 369
實驗13 DAC0832的D/A轉換實驗 370
實驗14 ADC0809的A/D轉換實驗 370
實驗15 I2C匯流排串列擴展——AT24C02
存儲器讀寫 370
附錄B 課程設計題目 372
題目1 節日彩燈控制器的設計 372
題目2 單一外中斷的套用 372
題目3 LED數碼管秒表的製作 373
題目4 音樂音符發生器的製作 373
題目5 用定時器設計的門鈴 373
題目6 控制數碼管循環顯示單個數字 374
題目7 基於DS18B20的數字溫度計設計 374
題目8 利用定時器在P1.0 上產生周期為
2ms的方波 374
題目9 電話鍵盤及撥號的模擬 375
題目10 雙機串列口方式1單工通信 375
題目11 數碼管顯示4×4 矩陣鍵盤的
鍵號 375
題目12 波形發生器的製作 376
題目13 頻率計的製作 376
題目14 數字電壓表設計 376
題目15 單片機控制串列DAC—— TLC5615
的調壓器 377
題目16 單片機控制16×16 陣列LED的
顯示 377
題目17 直流電機控制實驗 378
題目18 步進電機控制實驗 378
附錄C 頭檔案"LCD1602.h"清單 379
附錄D 頭檔案"DS1302.h"清單 381
參考文獻 385
作者簡介
張毅剛 哈爾濱工業大學教授,國家精品課程“單片機原理”負責人,並獲國家精品資源共享課“單片機原理”建設立項。教育部全國高校網路培訓中心“單片機原理”骨幹教師高級研修班特聘主講教師和黑龍江省教學名師獲得者。主持並獲得省高等教育教學成果一等獎2項,二等獎2項。獲國家教學成果一等獎1項。普通高等教育“十五”、“十一五”和“十二五”國家級規劃教材主編。主要科研方向為自動化測試技術、嵌入式控制器套用等。參加並完成多項科研項目,獲國家科技進步二等獎1項,航天部科技進步獎5項。