《51單片機開發與應用技術詳解》
《8051單片機開發與應用技術詳解》
GITHUB: https://github.com/jash-git/Jash-good-idea-20220101-001/tree/main/HW/8051
封面 ; 1
內 容 簡 介 ; 3
前 言 Introduction ; 4
第一篇 51系列單片機基礎 ; 36
第1章 51系列單片機概述 ; 36
1.1 單片機的產生與發展 ; 36
1.2 51系列單片機介紹 ; 37
1.2.1 51系列單片機簡介 ; 37
1.2.2 51系列單片機的應用領域 ; 37
1.3 最新51內核單片機介紹 ; 38
1.3.1 Atmel單片機介紹 ; 38
1.3.2 Cypress單片機介紹 ; 38
1.3.3 Infineon單片機介紹 ; 39
1.3.4 Silicon單片機介紹 ; 39
1.3.5 Maxim單片機介紹 ; 40
1.3.6 NXP單片機介紹 ; 40
1.3.7 Winbond單片機介紹 ; 40
1.3.8 Analog Devices單片機介紹 ; 40
1.3.9 TI單片機介紹 ; 41
1.3.10 其他單片機介紹 ; 41
1.4 51系列單片機開發概述 ; 41
1.4.1 分析測控系統 ; 42
1.4.2 單片機選型 ; 42
1.4.3 硬體資源配置 ; 42
1.4.4 程式設計 ; 43
1.4.5 模擬測試 ; 43
1.4.6 實際硬體測試 ; 43
1.5 小結 ; 43
第2 章 51系列單片機基本結構 ; 44
2.1 51系列單片機的內部結構 ; 44
2.1.1 內部結構的主要組成部分 ; 44
2.1.2 單片機結構的類型 ; 45
2.2 51系列單片機的引腳功能 ; 46
2.2.1 51系列單片機的引腳封裝 ; 46
2.2.2 51系列單片機引腳功能 ; 46
2.3 中央處理器(CPU) ; 48
2.3.1 算術邏輯部件(ALU) ; 48
2.3.2 控制器 ; 48
2.3.3 通用寄存器 ; 49
2.3.4 專用寄存器 ; 49
2.4 記憶體結構 ; 51
2.4.1 程式記憶體及其擴展 ; 51
2.4.2 資料記憶體及其擴展 ; 52
2.5 51系列單片機的重定 ; 56
2.5.1 單片機的重定模式 ; 56
2.5.2 單片機的重定電路 ; 56
2.6 51系列單片機的時鐘和時序 ; 58
2.6.1 振盪器和時鐘電路 ; 58
2.6.2 CPU的時序 ; 59
2.6.3 指令執行的時序 ; 59
2.6.4 訪問外部ROM/RAM的操作時序 ; 61
2.7 51系列單片機的並行I/O口 ; 62
2.7.1 並行I/O口 ; 62
2.7.2 並行I/O口的應用 ; 65
2.7.3 並行I/O口的擴展 ; 65
2.8 系統掉電保護和低功耗設計 ; 67
2.8.1 掉電保護 ; 67
2.8.2 低功耗設計 ; 68
2.9 51系列單片機的最小系統 ; 69
2.10 小結 ; 70
第3章Keil C51開發工具簡介 ; 71
3.1 KeilμVision3簡介 ; 71
3.2 μVision3安裝 ; 71
3.3 μVision3整合式開發環境 ; 72
3.3.1 μVision3專案管理視窗 ; 73
3.3.2 μVision3的功能表列 ; 73
3.3.3 μVision3的工具列 ; 78
3.3.4 μVision3的管理配置 ; 80
3.3.5 μVision3的各種常用窗口 ; 82
3.4 小結 ; 85
第二篇 程式設計篇——組合語言 ; 86
第4 章 組合語言程式設計 ; 86
4.1 組合語言程式概述 ; 86
4.1.1 組合語言簡介 ; 86
4.1.2 組合語言程式設計步驟 ; 87
4.1.3 組合語言程式實例 ; 87
4.2 虛擬指令 ; 88
4.2.1 組合語言程式起始虛擬指令ORG ; 88
4.2.2 組合語言程式結束虛擬指令END ; 88
4.2.3 等值虛擬指令EQU(或=) ; 88
4.2.4 資料位址賦值虛擬指令DATA ; 89
4.2.5 定義位元組虛擬指令DB ; 89
4.2.6 定義字虛擬指令DW ; 89
4.2.7 定義空間虛擬指令DS ; 90
4.2.8 位元位址符號虛擬指令BIT ; 90
4.3 組合語言程式的格式 ; 90
4.4 來源程式的彙編 ; 91
4.5 KeilμVision3中運行組合語言實例 ; 91
4.5.1 創建項目 ; 91
4.5.2 創建原始檔案 ; 92
4.5.3 編譯項目 ; 93
4.5.4 模擬調試 ; 94
4.6 小結 ; 94
第5 章 組合語言程式結構 ; 95
5.1 順序結構程式 ; 95
5.2 分支結構程式 ; 96
5.2.1 雙分支結構 ; 96
5.2.2 多分支結構 ; 98
5.3 迴圈結構程式 ; 98
5.3.1 迴圈程式的結構和組成 ; 98
5.3.2 迴圈程式示例 ; 99
5.3.3 多重迴圈程式結構 ; 101
5.4 副程式結構 ; 101
5.4.1 副程式的結構 ; 101
5.4.2 副程式的調用與返回 ; 102
5.4.3 副程式設計實例 ; 102
5.5 查表結構程式 ; 103
5.6 運算類程式 ; 105
5.6.1 8位元帶符號整數的乘法副程式 ; 105
5.6.2 8位元帶符號整數的除法副程式 ; 106
5.7 小結 ; 107
第三篇 程式設計篇——C51 ; 108
第6 章 單片機C語言程式設計基礎 ; 108
6.1 單片機C語言概述 ; 108
6.1.1 單片機C語言和組合語言對比 ; 108
6.1.2 C51語言的主要特點 ; 108
6.2 單片機C語言在KeilμVision3中應用實例 ; 109
6.2.1 創建項目 ; 109
6.2.2 創建原始檔案 ; 110
6.2.3 編譯項目 ; 110
6.2.4 模擬調試 ; 111
6.3 C51的識別字與關鍵字 ; 112
6.3.1 識別字 ; 112
6.3.2 關鍵字 ; 112
6.4 C51的資料類型 ; 113
6.4.1 常量與變數 ; 114
6.4.2 整型數據 ; 115
6.4.3 浮點型數據 ; 116
6.4.4 字元型資料 ; 117
6.4.5 指標型數據 ; 120
6.4.6 無值型數據 ; 120
6.5 C51的變數作用域 ; 120
6.5.1 基本規則 ; 120
6.5.2 自動變數 ; 121
6.5.3 外部變數 ; 122
6.5.4 靜態變數 ; 123
6.5.5 寄存器變數 ; 124
6.6 分隔符號與const修飾符 ; 124
6.6.1 C51分隔符號 ; 124
6.6.2 const修飾符 ; 124
6.7 運算子 ; 125
6.7.1 算術運算子 ; 125
6.7.2 邏輯運算子和關係運算子 ; 127
6.7.3 位運算子 ; 129
6.7.4 特殊運算子 ; 131
6.7.5 運算子優先順序和結合性 ; 134
6.8 運算式 ; 135
6.8.1 算術運算式 ; 135
6.8.2 賦值運算式 ; 135
6.8.3 逗號運算式 ; 137
6.8.4 關係和邏輯運算式 ; 137
6.9 小結 ; 139
第7 章 陣列 ; 140
7.1 陣列類型說明 ; 140
7.2 陣列元素的表示 ; 141
7.3 陣列元素的初始化賦值 ; 142
7.4 一維陣列 ; 143
7.4.1 一維陣列聲明 ; 143
7.4.2 向函數傳遞一維陣列 ; 143
7.4.3 一維字串陣列 ; 144
7.5 二維陣列 ; 145
7.5.1 二維陣列聲明 ; 145
7.5.2 二維陣列初始化 ; 146
7.5.3 二維字串陣列 ; 147
7.6 多維陣列 ; 148
7.7 小結 ; 148
第8 章 指針 ; 149
8.1 位址、指標和指標變數的概念 ; 149
8.2 指標變數的聲明 ; 149
8.3 指標變數的賦值 ; 150
8.3.1 初始化賦值 ; 150
8.3.2 取地址賦值 ; 150
8.3.3 指針之間賦值 ; 150
8.3.4 陣列賦值 ; 151
8.3.5 字串賦值 ; 151
8.3.6 函數入口賦值 ; 151
8.4 指標變數的引用 ; 151
8.4.1 取地址運算子“&” ; 151
8.4.2 取內容運算子“*” ; 152
8.5 指標變數的運算 ; 153
8.5.1 關係運算 ; 153
8.5.2 算數運算 ; 153
8.6 陣列指標 ; 154
8.6.1 指向一維陣列的指標 ; 154
8.6.2 指向二維陣列的指標 ; 155
8.6.3 指向一個由n個元素所組成的陣列指標 ; 157
8.6.4 指標和陣列的關係 ; 157
8.7 字元指標 ; 158
8.8 指標陣列 ; 159
8.9 小結 ; 160
第9 章 結構 ; 161
9.1 結構的定義 ; 161
9.2 結構變數的定義 ; 162
9.2.1 先定義結構,再定義結構變數 ; 162
9.2.2 在定義結構的同時,定義結構變數 ; 162
9.2.3 直接說明結構變數 ; 163
9.3 結構變數的使用 ; 163
9.4 多重結構變數的賦值 ; 164
9.5 結構變數的初始化 ; 164
9.6 結構陣列 ; 165
9.6.1 結構陣列的定義 ; 166
9.6.2 結構陣列的初始化賦值 ; 166
9.7 結構指標 ; 167
9.8 特殊結構 ; 170
9.8.1 嵌套結構 ; 170
9.8.2 位元結構 ; 170
9.9 小結 ; 171
第10 章 聯合、枚舉、類型說明和位域 ; 172
10.1 聯合類型 ; 172
10.1.1 聯合和聯合變數的定義 ; 172
10.1.2 聯合變數成員的引用 ; 173
10.2 結構和聯合的區別 ; 175
10.3 枚舉類型 ; 176
10.3.1 枚舉的定義 ; 176
10.3.2 枚舉變數的聲明 ; 177
10.3.3 枚舉類型變數的賦值 ; 178
10.4 類型說明 ; 179
10.5 位域 ; 180
10.5.1 位元域的定義和位元域變數的聲明 ; 180
10.5.2 位元域變數的使用 ; 181
10.6 小結 ; 182
第11 章 C51語言的函數 ; 183
11.1 函數的概念和分類 ; 183
11.1.1 從函式定義角度 ; 183
11.1.2 從有無返回值角度 ; 184
11.1.3 從資料傳送角度 ; 184
11.2 函數的定義 ; 184
11.3 函數的參數 ; 186
11.3.1 形參和實參 ; 186
11.3.2 陣列作為函數參數 ; 187
11.3.3 多維陣列作為函數參數 ; 189
11.3.4 指標作為函數參數 ; 189
11.4 函數的返回值 ; 190
11.5 函式呼叫 ; 190
11.5.1 賦值調用與引用調用 ; 191
11.5.2 遞迴呼叫 ; 191
11.5.3 嵌套調用 ; 193
11.6 函數及其變數的作用域 ; 194
11.6.1 函數的作用域 ; 194
11.6.2 函數的變數作用域 ; 194
11.7 main函數 ; 195
11.8 小結 ; 195
第12 章 C51語言的常用庫函數詳解 ; 196
12.1 字元函數 ; 196
12.1.1 檢查英文字母函數 ; 196
12.1.2 檢查字母數位函數 ; 197
12.1.3 檢查控制字元函數 ; 197
12.1.4 十進位數字字檢查函數 ; 198
12.1.5 可列印字元檢查函數 ; 198
12.1.6 包含空格的可列印字元檢查函數 ; 199
12.1.7 格式字元檢查函數 ; 200
12.1.8 小寫英文字母檢查函數 ; 200
12.1.9 大寫英文字母檢查函數 ; 201
12.1.10 控制字元檢查函數 ; 201
12.1.11 十六進位數位檢查函數 ; 202
12.1.12 十六進位數位轉換函數 ; 203
12.1.13 大寫字元轉換函數 ; 203
12.1.14 小寫字元轉換函數 ; 204
12.1.15 ASCII字元轉換函數 ; 205
12.1.16 大寫字元巨集轉換函數 ; 205
12.1.17 小寫字元巨集轉換函數 ; 206
12.2 字串函數 ; 207
12.2.1 字元查找函數 ; 207
12.2.2 指定長度的字串比較函數 ; 207
12.2.3 字串複製函數 ; 208
12.2.4 帶終止字元的字串複製函數 ; 209
12.2.5 字串移動函數 ; 209
12.2.6 字串填充函數 ; 210
12.2.7 字串追加函數 ; 211
12.2.8 指定長度的字串追加函數 ; 211
12.2.9 字串比較函數 ; 212
12.2.10 包含結束符的字串比較函數 ; 213
12.2.11 字串覆蓋函數 ; 213
12.2.12 指定長度的字串覆蓋函數 ; 214
12.2.13 獲取字串個數函數 ; 215
12.2.14 搜索字串函數 ; 215
12.2.15 搜索字元函數 ; 216
12.2.16 返回位置值的字元搜索函數 ; 217
12.2.17 字元包含函數 ; 217
12.2.18 返回位置值的字元包含函數 ; 218
12.2.19 在指定字元集中查找不包含字元函數 ; 219
12.2.20 在指定字元集中查找包含字元函數 ; 219
12.2.21 查找第一個包含字元函數 ; 220
12.2.22 查找最後一個包含字元函數 ; 221
12.3 I/O函數 ; 221
12.3.1 字元讀入函數 ; 222
12.3.2 字元讀入輸出函數 ; 222
12.3.3 字串讀入函數 ; 223
12.3.4 字元回送函數 ; 223
12.3.5 字元輸出函數 ; 224
12.3.6 格式化輸出函數 ; 225
12.3.7 格式化記憶體緩衝區輸出函數 ; 226
12.3.8 字串輸出函數 ; 227
12.3.9 格式化輸入函數 ; 228
12.3.10 格式化記憶體緩衝區輸入函數 ; 229
12.3.11 字串記憶體輸出函數 ; 230
12.3.12 指向緩衝區的輸出函數 ; 231
12.4 數學函數 ; 232
12.4.1 絕對值函數 ; 232
12.4.2 指數及對數函數 ; 233
12.4.3 三角函數 ; 233
12.4.4 取整函數 ; 235
12.4.5 浮點型分離函數 ; 235
12.4.6 冪函數 ; 236
12.5 標準函數 ; 236
12.5.1 字串轉換函數 ; 237
12.5.2 帶返回指標的字串轉換函數 ; 238
12.5.3 隨機函數 ; 239
12.5.4 陣列記憶體分配函數 ; 239
12.5.5 釋放記憶體函數 ; 240
12.5.6 初始化記憶體函數 ; 241
12.5.7 記憶體分配函數 ; 242
12.5.8 調整記憶體大小函數 ; 242
12.6 內建函式 ; 243
12.6.1 迴圈左移函數 ; 243
12.6.2 迴圈右移函數 ; 244
12.6.3 延時函數 ; 245
12.6.4 位元測試函數 ; 245
12.7 絕對位址訪問函數 ; 246
12.7.1 BYTE型存儲空間訪問函數 ; 246
12.7.2 WORD型存儲空間訪問函數 ; 247
12.7.3 far存儲區訪問函數 ; 247
12.7.4 far存儲區陣列訪問函數 ; 248
12.8 變數參數表函數 ; 248
12.9 全程跳轉函數 ; 249
12.10 計算結構體成員的偏移量函數 ; 250
12.11 小結 ; 251
第13 章 C51語句和流程 ; 252
13.1 說明語句 ; 252
13.2 運算式語句 ; 252
13.3 複合陳述式 ; 253
13.4 迴圈語句 ; 254
13.4.1 while語句 ; 254
13.4.2 do-while語句 ; 255
13.4.3 for語句 ; 255
13.5 條件陳述式 ; 256
13.5.1 單分支結構 ; 256
13.5.2 雙分支結構 ; 257
13.5.3 階梯式if-else-if結構 ; 257
13.6 開關語句 ; 259
13.7 跳躍陳述式 ; 260
13.7.1 goto語句 ; 260
13.7.2 break語句 ; 261
13.7.3 continue 語句 ; 262
13.8 函式呼叫語句 ; 262
13.9 空語句 ; 263
13.10 返回語句 ; 263
13.11 C51語言的流程控制結構 ; 264
13.12 小結 ; 265
第14 章 預處理及使用者設定檔 ; 266
14.1 預處理命令概述 ; 266
14.2 巨集定義指令 ; 266
14.2.1 \#define命令 ; 267
14.2.2 \#undef命令 ; 268
14.3 檔包含指令 ; 269
14.4 條件編譯指令 ; 270
14.4.1 \#if、\#else、\#endif命令 ; 270
14.4.2 \#elif命令 ; 271
14.4.3 \#ifdef、\#ifndef命令 ; 272
14.5 其他編譯指令 ; 272
14.5.1 \#line命令 ; 273
14.5.2 \#error ; 273
14.5.3 \#pragma ; 274
14.6 C51語言編譯器的控制指令 ; 274
14.6.1 原始檔案控制類 ; 274
14.6.2 目的檔案(Object)控制類 ; 275
14.6.3 列表文件(Listing)控制類 ; 275
14.7 C51語言的使用者設定檔 ; 275
14.7.1 C51語言啟動代碼檔 ; 275
14.7.2 C51語言啟動代碼分析 ; 279
14.7.3 變數初始設定檔案 ; 280
14.7.4 基本I/O函數檔 ; 281
14.7.5 分組設定檔 ; 281
14.8 小結 ; 281
第15 章 C51語言的存儲結構 ; 283
15.1 記憶體結構 ; 283
15.1.1 51系列單片機的存儲區域 ; 283
15.1.2 片內資料記憶體(RAM)的結構 ; 283
15.2 存儲類型 ; 284
15.2.1 data存儲類型 ; 284
15.2.2 bdata存儲類型 ; 284
15.2.3 idata存儲類型 ; 285
15.2.4 pdata存儲類型 ; 285
15.2.5 xdata存儲類型 ; 285
15.2.6 code存儲類型 ; 285
15.3 擴展資料類型 ; 286
15.3.1 sfr和sfr16 ; 286
15.3.2 sbit ; 287
15.3.3 bit型變數 ; 287
15.4 存儲模式 ; 287
15.4.1 Small模式 ; 287
15.4.2 Compact模式 ; 288
15.4.3 Large模式 ; 288
15.4.4 存儲模式的選擇 ; 288
15.5 C51語言的記憶體指標 ; 288
15.5.1 一般指針 ; 288
15.5.2 記憶體指針 ; 289
15.5.3 指標存儲類型與指標所指向的資料的存儲類型的關係 ; 290
15.6 動態記憶體分配 ; 290
15.6.1 C51語言的動態分配函數 ; 291
15.6.2 malloc和calloc函數 ; 291
15.7 小結 ; 291
第四篇 51系列單片機程式設計指南篇 ; 292
第16 章 51系列單片機的指令系統 ; 292
16.1 指令系統簡介 ; 292
16.1.1 指令格式 ; 292
16.1.2 指令符號 ; 293
16.2 定址方式 ; 294
16.2.1 即時定位 ; 294
16.2.2 直接定址 ; 295
16.2.3 寄存器定址 ; 296
16.2.4 寄存器間接定址 ; 297
16.2.5 變址定址 ; 299
16.2.6 相對定址 ; 300
16.2.7 位定址 ; 301
16.3 資料傳送指令 ; 302
16.3.1 內部RAM資料傳送指令 ; 302
16.3.2 外部RAM資料傳送指令 ; 306
16.3.3 程式記憶體資料傳送指令 ; 307
16.3.4 資料交換指令 ; 308
16.3.5 堆疊操作指令 ; 310
16.4 算數運算指令 ; 311
16.4.1 加法指令 ; 311
16.4.2 帶進位元的加法指令 ; 313
16.4.3 帶借位的減法指令 ; 314
16.4.4 加1指令 ; 316
16.4.5 減1指令 ; 317
16.4.6 乘除法指令 ; 318
16.4.7 十進位調整指令 ; 319
16.5 邏輯運算及移位元指令 ; 321
16.5.1 邏輯與指令 ; 321
16.5.2 邏輯或指令 ; 322
16.5.3 邏輯異或指令 ; 323
16.5.4 累加器清零指令 ; 325
16.5.5 累加器取反指令 ; 325
16.5.6 組合邏輯電路的實現 ; 326
16.5.7 迴圈移位元指令 ; 327
16.6 控制轉移指令 ; 328
16.6.1 無條件轉移指令 ; 329
16.6.2 條件轉移指令 ; 333
16.6.3 副程式調用及返回指令 ; 336
16.7 位元操作指令 ; 339
16.7.1 位元變數傳送指令 ; 340
16.7.2 置位元與清零指令 ; 341
16.7.3 位元邏輯運算指令 ; 341
16.7.4 位元控制轉移指令 ; 343
16.8 空操作指令 ; 344
16.9 51系列單片機指令匯總 ; 345
16.10 小結 ; 349
第17 章 51系列單片機的計時器/計數器 ; 350
17.1 計時器/計數器0和1 ; 350
17.1.1 計時器/計數器的結構 ; 350
17.1.2 計時器/計數器的功能 ; 351
17.1.3 T0和T1的控制寄存器 ; 351
17.2 計時器/計數器0和1的工作模式 ; 354
17.2.1 工作模式0及其程式設計 ; 354
17.2.2 工作模式1及其程式設計 ; 356
17.2.3 工作模式2及其程式設計 ; 358
17.2.4 工作模式3及其程式設計 ; 360
17.3 計時器/計數器2 ; 363
17.3.1 T2的控制寄存器T2CON和T2MOD及其程式訪問 ; 363
17.3.2 計時器/計數器2的工作模式 ; 365
17.4 小結 ; 369
第18 章 51系列單片機中斷系統及其程式設計 ; 370
18.1 中斷系統概述 ; 370
18.1.1 什麼是中斷 ; 370
18.1.2 中斷的用途 ; 370
18.1.3 中斷需要解決的問題 ; 371
18.2 51系列單片機的中斷類型 ; 372
18.2.1 外部中斷源 ; 373
18.2.2 定時中斷源 ; 373
18.2.3 串列中斷源 ; 373
18.3 51系列單片機的中斷系統 ; 373
18.3.1 插斷要求標誌及其訪問 ; 374
18.3.2 中斷允許標誌及其訪問 ; 375
18.3.3 中斷優先順序標誌及其訪問 ; 376
18.4 中斷的處理過程 ; 377
18.4.1 中斷回應 ; 377
18.4.2 中斷處理 ; 378
18.4.3 中斷返回 ; 380
18.4.4 插斷要求的撤離 ; 380
18.5 中斷源的程式設計 ; 380
18.5.1 外部中斷源的程式設計 ; 380
18.5.2 定時中斷源的程式設計 ; 381
18.5.3 串列中斷源的程式設計 ; 383
18.6 外部中斷源的擴展 ; 384
18.6.1 計時器/計數器擴展外部中斷源 ; 384
18.6.2 查詢方式擴展外部中斷源 ; 386
18.7 小結 ; 388
第19章 51系列單片機的序列介面 ; 389
19.1 串列通信概述 ; 389
19.1.1 串列通信簡介 ; 389
19.1.2 串列通信的資料傳送方式 ; 391
19.2 51系列單片機的序列介面 ; 392
19.2.1 單片機序列介面的內部結構 ; 392
19.2.2 單片機序列介面的程式控制 ; 393
19.2.3 串列傳輸速率的程式設計 ; 395
19.3 串列口的工作模式0 ; 398
19.3.1 模式0的發送及擴展輸出埠 ; 398
19.3.2 模式0的接收及擴展輸入埠 ; 399
19.4 串列口的工作模式1 ; 401
19.4.1 模式1的發送 ; 401
19.4.2 模式1的接收 ; 403
19.5 串列口的工作模式2 ; 404
19.5.1 模式2的發送 ; 404
19.5.2 模式2的接收 ; 405
19.6 串列口的工作模式3 ; 407
19.6.1 模式3的發送 ; 407
19.6.2 模式3的接收 ; 408
19.7 雙機通信程式設計 ; 409
19.7.1 查詢方式 ; 409
19.7.2 中斷方式 ; 410
19.8 多機通信程式設計 ; 412
19.8.1 多機通信原理 ; 413
19.8.2 多機通信協議約定 ; 413
19.8.3 多機通信程式設計 ; 413
19.9 小結 ; 418
第20 章 C51下的RTX-51即時多工作業系統 ; 419
20.1 RTX-51即時多工作業系統簡介 ; 419
20.1.1 RTX-51種類 ; 419
20.1.2 RTX-51與單任務程式的比較 ; 420
20.2 RTX-51的任務調度 ; 422
20.2.1 RTX-51迴圈任務調度 ; 422
20.2.2 RTX-51事件任務調度 ; 422
20.2.3 RTX-51信號任務調度 ; 423
20.2.4 優先順序及搶先任務切換 ; 423
20.2.5 RTX-51的其他特性 ; 424
20.3 RTX-51 Tiny的系統函數 ; 425
20.3.1 發送信號函數isr_send_signal ; 425
20.3.2 清除信號標誌函數os_clear_signal ; 426
20.3.3 啟動任務函數os_create_task ; 426
20.3.4 刪除任務函數os_delete_task ; 426
20.3.5 當前任務號函數os_running_task_id ; 427
20.3.6 發送信號函數os_send_signal ; 427
20.3.7 等待函數os_wait ; 428
20.3.8 等待函數os_wait1 ; 429
20.3.9 等待函數os_wait2 ; 429
20.4 RTX-51 Tiny的任務管理 ; 430
20.4.1 RTX-51 Tiny的任務狀態 ; 430
20.4.2 RTX-51 Tiny的事件 ; 430
20.4.3 RTX-51 Tiny的任務切換 ; 431
20.5 RTX-51 Tiny的設定檔 ; 431
20.6 RTX-51 Tiny的要求及限定 ; 434
20.6.1使用RTX-51 Tiny的要求 ; 434
20.6.2 RTX-51 Tiny的注意事項 ; 434
20.7 RTX-51 FULL的系統函數及技術參數 ; 435
20.7.1 RTX-51 FULL函數一覽 ; 435
20.7.2 RTX-51的技術參數 ; 437
20.8 小結 ; 437
第21 章 Keil μVision3中的單片機硬體資源模擬 ; 438
21.1 模擬概述 ; 438
21.2 並行I/O埠的模擬 ; 438
21.3 計時器/計數器的模擬 ; 440
21.3.1 計時器/計數器T0和T1的模擬介面 ; 440
21.3.2 計時器/計數器T2的模擬介面 ; 441
21.3.3 計時器/計數器的模擬操作 ; 441
21.4 序列介面的模擬 ; 444
21.4.1 序列介面的模擬介面 ; 444
21.4.2 序列介面的模擬操作 ; 445
21.4.3 字串輸入輸出的模擬操作 ; 446
21.5 中斷模擬 ; 448
21.5.1 中斷系統的模擬介面 ; 448
21.5.2 中斷系統的模擬操作 ; 448
21.6 看門狗計時器的模擬 ; 450
21.6.1 看門狗計時器的模擬介面 ; 450
21.6.2 看門狗計時器的模擬操作 ; 450
21.7 A/D模擬 ; 451
21.7.1 A/D轉換器的模擬介面 ; 451
21.7.2 A/D轉換器的模擬操作 ; 452
21.8 D/A模擬 ; 454
21.8.1 D/A轉換器的模擬介面 ; 454
21.8.2 D/A轉換器的模擬操作 ; 455
21.9 寄存器模擬 ; 456
21.9.1 寄存器的模擬介面 ; 457
21.9.2 寄存器的模擬操作 ; 457
21.10 低功耗模擬 ; 458
21.11 小結 ; 459
第22 章 Keil μVision3中的程式調試 ; 460
22.1 KeilμVision3的程式調試器概述 ; 460
22.2 性能分析器 ; 460
22.3 代碼覆蓋分析器 ; 461
22.4 中斷點 ; 462
22.5 KeilμVision3調試命令 ; 463
22.5.1 通用命令 ; 463
22.5.2 程式命令 ; 467
22.5.3 中斷點命令 ; 469
22.5.4 記憶體命令 ; 471
22.6 小結 ; 473
第五篇 典型案例篇 ; 474
第23 章 鍵盤程式設計 ; 474
23.1 鍵盤介面概述 ; 474
23.1.1 按鍵編碼 ; 474
23.1.2 輸入的可靠性 ; 474
23.1.3 程式檢測及回應 ; 475
23.2 獨立式按鍵及其程式設計介面 ; 475
23.2.1 獨立式按鍵結構 ; 475
23.2.2 獨立式按鍵程式設計 ; 476
23.3 4×4矩陣式鍵盤及其程式設計介面 ; 477
23.3.1 掃描法及其程式設計 ; 477
23.3.2 線反轉法及其程式設計 ; 479
23.3.3 中斷法及其程式設計 ; 481
23.4 矩陣式鍵盤的介面實例 ; 482
23.4.1 電路圖 ; 482
23.4.2 程式設計 ; 483
23.4.3 程式模擬 ; 485
23.5 小結 ; 487
第24 章 LED數碼管顯示 ; 488
24.1 LED數碼管概述 ; 488
24.1.1 7段共陽極LED結構及顯示段碼 ; 488
24.1.2 7段共陰極LED結構及顯示段碼 ; 489
24.2 單個LED驅動實例 ; 490
24.2.1 電路圖 ; 490
24.2.2 程式設計 ; 492
24.3 多個LED驅動方式 ; 494
24.3.1 靜態驅動顯示 ; 495
24.3.2 動態驅動顯示 ; 499
24.3.3 LED驅動器 ; 501
24.4 多個LED驅動實例 ; 505
24.4.1 LED驅動器電路圖 ; 505
24.4.2 程式設計 ; 506
24.5 小結 ; 510
第25 章 LCD液晶顯示模組 ; 511
25.1 LCD液晶顯示概述 ; 511
25.1.1 液晶的來源 ; 511
25.1.2 LCD液晶顯示器結構及原理 ; 511
25.1.3 液晶顯示模組的種類 ; 512
25.1.4 液晶顯示模組的優點 ; 513
25.2 液晶顯示模組控制介面 ; 513
25.2.1 LCD控制驅動器ST7920概述 ; 513
25.2.2 ST7920功能說明 ; 514
25.2.3 ST7920基本指令集 ; 518
25.2.4 ST7920擴充指令集 ; 520
25.2.5 ST7920的操作方式 ; 521
25.2.6 圖形點陣式液晶顯示模組 ; 523
25.2.7 圖形點陣式液晶讀寫子函數 ; 524
25.3 漢字及圖形顯示實例 ; 526
25.3.1 電路設計 ; 527
25.3.2 建立專案 ; 527
25.3.3 漢字顯示實例 ; 528
25.3.4 圖形顯示實例 ; 530
25.3.5 任意位置圖形顯示實例 ; 532
25.4 小結 ; 534
第26 章 D/A轉換實例 ; 535
26.1 D/A轉換概述 ; 535
26.1.1 D/A轉換原理 ; 535
26.1.2 D/A轉換器的類型 ; 536
26.1.3 D/A轉換器的技術參數 ; 537
26.2 高速D/A轉換晶片AD558 ; 538
26.2.1 AD558簡介 ; 538
26.2.2 AD558電壓輸出模式 ; 539
26.2.3 AD558的數據鎖存 ; 540
26.3 光通信電壓調製電路實例——電路部分 ; 541
26.3.1 相位調製的原理 ; 541
26.3.2 電壓調製系統 ; 542
26.3.3 電路圖 ; 543
26.4 光通信電壓調製電路實例——程式部分 ; 546
26.4.1 系統狀態編碼 ; 546
26.4.2 建立專案 ; 546
26.4.3 主程序 ; 546
26.4.4 無調製模式函數 ; 548
26.4.5 調製模式1函數 ; 548
26.4.6 調製模式2函數 ; 549
26.4.7 調製模式3函數 ; 549
26.4.8 調製模式4函數 ; 549
26.5 光通信電壓調製電路實例——模擬部分 ; 549
26.5.1 程式模擬 ; 550
26.5.2 運行效果 ; 550
26.6 小結 ; 550
第27 章 可程式設計邏輯器件CPLD ; 551
27.1 可程式設計邏輯器件概述 ; 551
27.1.1 可程式設計邏輯器件的發展 ; 551
27.1.2 CPLD的結構及其邏輯實現 ; 551
27.1.3 FPGA的結構及其邏輯實現 ; 553
27.2 硬體描述語言簡述 ; 554
27.2.1 硬體描述語言VHDL概述 ; 555
27.2.2 VHDL程式結構 ; 555
27.3 Altera常用CPLD晶片介紹 ; 557
27.4 使用CPLD擴展51單片機I/O介面 ; 559
27.4.1 CPLD擴展單片機I/O介面原理 ; 559
27.4.2 電路圖 ; 560
27.5 單片機程式設計 ; 561
27.5.1 專案建立 ; 561
27.5.2 主程序 ; 562
27.6 VHDL程式設計 ; 562
27.6.1 專案建立 ; 562
27.6.2 程式設計 ; 563
27.7 程式模擬 ; 565
27.7.1 設計CPLD引腳 ; 565
27.7.2 模擬操作 ; 566
27.8 程式下載 ; 567
27.9 小結 ; 569
第28 章 51系列單片機讀寫I2C匯流排 ; 570
28.1 I2C匯流排概述 ; 570
28.1.1 I2C匯流排工作原理 ; 570
28.1.2 I2C匯流排的電氣結構和負載能力 ; 571
28.1.3 I2C匯流排器件的定址方式 ; 571
28.2 I2C匯流排資料傳輸協定及其程式詳解 ; 571
28.2.1 起始信號 ; 572
28.2.2 終止信號 ; 573
28.2.3 應答信號 ; 573
28.2.4 非應答信號 ; 574
28.2.5 應答位檢查 ; 575
28.2.6 匯流排資料位元 ; 575
28.2.7 寫數據 ; 575
28.2.8 讀數據 ; 578
28.3 51單片機讀寫EEPROM ; 581
28.3.1 串列EEPROM記憶體簡介 ; 581
28.3.2 電路設計 ; 582
28.3.3 程式設計 ; 583
28.3.4 模擬分析 ; 584
28.4 小結 ; 585
第29 章 單片機音樂播放 ; 586
29.1 單片機發音概述 ; 586
29.1.1 音調 ; 586
29.1.2 節拍 ; 588
29.1.3 單片機音樂播放的方法及音樂示例 ; 588
29.2 單片機音樂播放實例——電路圖 ; 591
29.3 單片機音樂播放實例——程式設計 ; 592
29.3.1 建立專案 ; 592
29.3.2 程式設計 ; 593
29.4 小結 ; 595
第30 章 即時時鐘晶片應用 ; 596
30.1 即時時鐘晶片DS1302概述 ; 596
30.1.1 即時時鐘晶片DS1302概述 ; 596
30.1.2 即時時鐘晶片DS1302命令字節 ; 597
30.1.3 即時時鐘晶片DS1302資料格式 ; 597
30.1.4 即時時鐘晶片DS1302資料傳輸方式 ; 599
30.2 單片機讀寫實時時鐘晶片實例 ; 600
30.2.1 電路圖 ; 600
30.2.2 建立專案 ; 601
30.2.3 主程序 ; 601
30.2.4 重定函數 ; 604
30.2.5 位元組讀取函數 ; 604
30.2.6 位元組寫入函數 ; 604
30.2.7 初始化函數 ; 604
30.2.8 時鐘位元組寫入函數 ; 605
30.2.9 RAM位元組寫入函數 ; 606
30.2.10 時鐘寄存器內容顯示函數 ; 606
30.2.11 多位元組突發方式讀取RAM函數 ; 607
30.2.12 多位元組突發方式寫入RAM函數 ; 608
30.3 小結 ; 608
第31 章 靜態RAM記憶體應用 ; 609
31.1 靜態RAM記憶體概述 ; 609
31.1.1 RAM記憶體概述 ; 609
31.1.2 靜態RAM晶片HM628128 ; 610
31.1.3 靜態RAM晶片HM628128的讀寫 ; 610
31.2 靜態RAM記憶體讀寫實例 ; 611
31.2.1 系統原理 ; 612
31.2.2 串列通信介面概述 ; 612
31.2.3 單片機與RS-232C的介面 ; 617
31.2.4 系統電路原理圖 ; 618
31.2.5 建立專案 ; 620
31.2.6 主程序設計 ; 620
31.2.7 系統運行 ; 623
31.3 小結 ; 624
第32 章 道路交通燈控制系統 ; 625
32.1 交通燈控制系統概述 ; 625
32.1.1 道路交通燈概述 ; 625
32.1.2 交通燈控制系統 ; 625
32.2 交通燈控制系統原理圖 ; 626
32.3 多工交通燈控制系統程式 ; 627
32.3.1 建立專案 ; 627
32.3.2 多工劃分及程式設計 ; 628
32.3.3 串列通信函數 ; 634
32.3.4 獲取命令函數 ; 637
32.4 小結 ; 638
第33 章 單匯流排溫度感測器DS18S20 ; 640
33.1 單匯流排概述 ; 640
33.2 單匯流排溫度感測器DS18S20 ; 641
33.2.1 溫度感測器DS18S20概述 ; 641
33.2.2 DS18S20的供電方式 ; 642
33.2.3 DS18S20的資料操作 ; 642
33.3 單片機讀寫溫度感測器DS18S20實例 ; 645
33.3.1 電路圖 ; 645
33.3.2 建立專案 ; 646
33.3.3 DS18S20讀寫子函數 ; 646
33.3.4 主函數 ; 652
33.3.5 程式模擬 ; 654
33.4 小結 ; 654
第34 章 Microware串列匯流排EEPROM的應用 ; 656
34.1 三線制Microware串列匯流排概述 ; 656
34.2 Microware串列匯流排界面的EEPROM ; 657
34.2.1 Microware串列匯流排界面EEPROM概述 ; 657
34.2.2 Microware串列匯流排界面EEPROM的指令 ; 657
34.2.3 Microware串列匯流排界面EEPROM的指令時序 ; 658
34.3 51系列單片機讀寫三線制EEPROM實例 ; 660
34.3.1 電路圖 ; 661
34.3.2 建立專案 ; 661
34.3.3 三線制Microware串列匯流排讀寫子函數 ; 662
34.3.4 主程序 ; 664
34.3.5 Microware串列匯流排模擬 ; 666
34.4 小結 ; 667
第35 章 單片機控制印表機實例 ; 668
35.1 印表機概述 ; 668
35.1.1 LASER PP40印表機概述 ; 668
35.1.2 LASER PP40的文字模式 ; 669
35.1.3 LASER PP40的圖形模式 ; 670
35.2 51系列單片機控制印表機實例 ; 671
35.2.1 電路圖 ; 671
35.2.2 建立專案 ; 671
35.2.3 程式設計 ; 672
35.3 小結 ; 673
第36 章 A/D轉換實例 ; 674
36.1 A/D轉換概述 ; 674
36.1.1 A/D轉換原理 ; 674
36.1.2 A/D轉換器的技術參數 ; 676
36.1.3 A/D轉換器的選擇原則 ; 677
36.2 8通道A/D轉換器MAX197 ; 677
36.2.1 MAX197的特性及引腳功能 ; 677
36.2.2 MAX197的介面、控制字及時序 ; 679
36.3 單片機讀寫A/D轉換器實例 ; 681
36.3.1 電路圖 ; 681
36.3.2 建立專案 ; 683
36.3.3 程式設計 ; 683
36.3.4 程式模擬 ; 686
36.4 小結 ; 686
第37 章 單片機讀寫智能IC卡 ; 687
37.1 智能IC卡概述 ; 687
37.1.1 智能IC卡分類 ; 687
37.1.2 接觸式IC卡 ; 687
37.1.3 非接觸式IC卡 ; 688
37.2 智慧IC卡晶片 ; 688
37.2.1 IC卡晶片AT45DB041簡介 ; 688
37.2.2 AT45DB041D的記憶體空間及其讀寫 ; 689
37.2.3 AT45DB041D的指令 ; 690
37.3 單片機讀寫智慧IC卡實例 ; 691
37.3.1 電路圖 ; 691
37.3.2 SPI介面單片機AT89S8253簡介 ; 692
37.3.3 建立專案 ; 693
37.3.4 IC卡晶片AT45DB041D讀寫子函數 ; 694
37.3.5 主程序 ; 696
37.4 小結 ; 698
第38 章 單片機智慧鋰電池充電管理 ; 700
38.1 鋰電池及其充電概述 ; 700
38.1.1 鋰電池概述 ; 700
38.1.2 鋰電池充電概述 ; 701
38.2 智慧充電管理晶片MAX1898 ; 701
38.2.1 智慧充電管理晶片MAX1898概述 ; 701
38.2.2 MAX1898充電工作原理 ; 702
38.3 單片機智慧控制鋰電池充電實例 ; 703
38.3.1 電路圖 ; 704
38.3.2 智慧充電器的功能 ; 705
38.3.3 建立專案 ; 705
38.3.4 程式設計 ; 706
38.4 小結 ; 707
《51單片機開發與應用技術詳解》讀者交流區 ; 709
反侵權盜版聲明 ; 711