編輯推薦
《PIC技術寶典》是關於PIC微控制器的經典著作,美國Mjcrochip公司推出的PIC系列產品已成為目前套用最廣泛的微控制器。
《PIC技術寶典》還可作為高等院校教材,每節的結尾都配有習題,有利於學生鞏固本節要點;同時在章末附有本章習題,有利於教師對學生進行考察。
《PIC技術寶典》原版配套網站。供實驗手冊、勘誤和程式原始碼等信息Muhammad Ail Mazidi 美國DeVry大學資深教授,著名嵌入式系統專家,具有豐富的教學和實踐經驗他編寫的80x86和8051方面的教材已被全世界眾多高校採用.都是公認的經典李中華博士,現任中山大學信息科學與技術學院講師、碩士生導師主持和參與國家、部省、市級課題若干.發表學術論文40餘篇.其中多數為SCI/EI/LSTP/INSPEC所收錄.出版著作1部計算機軟體著作權2部、申請發明專利2部主要研究興趣為嵌入式系統及自動化、智慧型系統與先進控制張溺濃博士現任中山大學信息科學與技術學院“百人計畫”教授、博士生導師,2007年入選教育部新世紀優秀人才支持計畫 在國際頂級雜誌和會議上發表論文40餘篇 其中lEEE雜誌論文8篇,主持國家自然科學基金2項主要研究領域為冗餘機器人 遞歸神經網路、高斯過程、科學計算和軟硬體開發。
目錄
第0章 計算入門 1
0.1 數制和編碼系統 1
0.1.1 十進制和二進制數制系統 1
0.1.2 十進制數轉換成二進制數 2
0.1.3 二進制數轉換成十進制數 2
0.1.4 十六進制系統 3
0.1.5 二進制和十六進制之間的轉換 3
0.1.6 十進制數轉換成十六進制數 4
0.1.7 十六進制數轉換成十進制數 4
0.1.8 十進制、二進制和十六進制計數 5
0.1.9 二進制數和十六進制數加法 5
0.1.10 補碼 6
0.1.11 十六進制數的加法和減法 6
0.1.12 十六進制數的加法 6
0.1.13 十六進制數的減法 6
0.1.14 ASCII碼 7
0.1.15 複習題 7
0.2 數字入門 8
0.2.1 二進制邏輯 8
0.2.2 邏輯門 8
0.2.3 使用邏輯門設計電路 10
0.2.4 解碼器 11
0.2.5 觸發器 12
0.2.6 複習題 12
0.3 計算機內部 12
0.3.1 一些重要術語 12
0.3.2 計算機的內部組成 13
0.3.3 數據匯流排概述 13
0.3.4 地址匯流排概述 14
0.3.5 CPU及其和RAM、ROM的關係 14
0.3.6 CPU內部 15
0.3.7 計算機的內部工作 16
0.3.8 複習題 17
小結 17
習題 18
複習題答案 19
第1章 PIC微控制器的歷史和特性 21
1.1 微控制器與嵌入式處理器 21
1.1.1 微控制器和通用微處理器21
1.1.2 套用於嵌入式系統的微控制器 22
1.1.3 x86PC嵌入式套用 23
1.1.4 微控制器的選擇 24
1.1.5 微控制器的選擇標準 24
1.1.6 機電學與微控制器 25
1.1.7 複習題 25
1.2 PIC18系列概述 25
1.2.1 PIC微控制器的發展簡史 25
1.2.2 PIC18特性 26
1.2.3 其他微控制器 30
1.2.4 複習題 31
小結 31
習題 32
複習題答案 33
第2章 PIC體系結構與彙編語言編程 34
2.1 PIC的WREG暫存器 34
2.1.1 WREG暫存器 35
2.1.2 MOVLW指令 35
2.1.3 ADDLW指令 35
2.1.4 複習題 37
2.2 PIC檔案暫存器 37
2.2.1 PIC檔案暫存器(數據RAM)空間分配 37
2.2.2 PIC晶片中的GP RAM和EEPROM比較 38
2.2.3 PIC18的檔案暫存器與訪問存儲區 39
2.2.4 複習題 41
2.3 默認訪問存儲區的指令操作 41
2.3.1 MOVWF指令 41
2.3.2 關於WREG和訪問存儲區的更多指令 42
2.3.3 COMF指令 46
2.3.4 DECF指令 47
2.3.5 MOVE指令 47
2.3.6 MOVFF指令 48
2.3.7 複習題 49
2.4 PIC 狀態暫存器 49
2.4.1 PIC18狀態暫存器 49
2.4.2 ADDLW指令和狀態暫存器 50
2.4.3 並非所有指令都會影響標誌位 50
2.4.4 標誌位和判決 52
2.4.5 複習題 52
2.5 PIC數據格式和偽指令 53
2.5.1 PIC數據類型 53
2.5.2 數據格式描述 53
2.5.3 彙編偽指令 54
2.5.4 使用equ做定值分配 55
2.5.5 使用EQU做SFR地址分配 55
2.5.6 使用EQU做RAM地址分配 56
2.5.7 彙編語言的標籤規則 57
2.5.8 複習題 57
2.6 PIC彙編語言編程 58
2.6.1 彙編語言結構 58
2.6.2 複習題 59
2.7 彙編和連線PIC程式 60
2.7.1 關於asm、err和目標檔案的更多信息 61
2.7.2 列表檔案和映像檔案 62
2.7.3 複習題 62
2.8 PIC的程式計數器和程式ROM空間 62
2.8.1 PIC的程式計數器 63
2.8.2 PIC18系列ROM的記憶體分配 63
2.8.3 通電時PIC的啟動 64
2.8.4 在程式ROM里放置代碼 65
2.8.5 程式的逐位元組執行 66
2.8.6 PIC18 ROM數據寬度 66
2.8.7 PIC的哈佛結構 68
2.8.8 PIC18的指令大小 69
2.8.9 MOVLW指令格式 69
2.8.10 ADDLW指令格式 69
2.8.11 MOVWF指令格式 69
2.8.12 MOVFF指令格式 70
2.8.13 GOTO指令格式 70
2.8.14 從其他微處理器過渡到PIC18 70
2.8.15 複習題 71
2.9 PIC的RISC結構 71
2.9.1 RISC結構 72
2.9.2 RISC的特性 72
2.9.3 複習題 74
2.10 使用MPLAB仿真器查看暫存器和存儲器 74
小結 74
習題 76
複習題答案 80
第3章 分支、調用和時延循環 82
3.1 分支指令和循環 82
3.1.1 PIC的循環語句 82
3.1.2 循環嵌套 85
3.1.3 循環100 000次 87
3.1.4 其他的條件轉移指令 87
3.1.5 所有的條件分支指令都是短跳轉 89
3.1.6 短轉移地址的計算 89
3.1.7 無條件分支指令 90
3.1.8 帶有$符號的GOTO指令 91
3.1.9 複習題 92
3.2 CALL(調用)指令和棧 92
3.2.1call指令92
3.2.2 PIC18的棧和棧指針 92
3.2.3 如何訪問PIC18的棧 93
3.2.4 壓棧 93
3.2.5 出棧 93
3.2.6 CALL指令和棧的作用 94
3.2.7 棧的上限 95
3.2.8 在主程式里調用多個子例程95
3.2.9 RCALL指令(相對調用指令) 97
3.2.10 複習題 98
3.3 PIC18的時延與指令流水線98
3.3.1 PIC18的時延計算 98
3.3.2 流水線 98
3.3.3 PIC的指令周期時間 99
3.3.4 分支代價 99
3.3.5 PIC18的時延計算 100
3.3.6 時延的嵌套循環 101
3.3.7 PIC多級執行流水線 103
3.3.8 複習題 104
小結 105
習題 105
複習題答案 107
第4章 PIC I/O連線埠編程 108
4.1 PIC18的I/O連線埠編程 108
4.1.1 I/O連線埠引腳及其功能 108
4.1.2 TRIS暫存器在數據輸出中的作用 110
4.1.3 TRIS暫存器在數據輸入中的作用 111
4.1.4 連線埠A 114
4.1.5 連線埠A用作輸入連線埠 114
4.1.6 連線埠B 114
4.1.7 連線埠B用作輸入連線埠 115
4.1.8 連線埠A和連線埠B的雙重功能 115
4.1.9 連線埠C 115
4.1.10 連線埠C用作輸入連線埠 116
4.1.11 連線埠D 116
4.1.12 連線埠D作為輸入連線埠 116
4.1.13 連線埠C和連線埠D的雙重功能 116
4.1.14 連線埠E 117
4.1.15 訪問8位數據的不同方法 117
4.1.16 讀取後緊接的寫I/O操作 118
4.1.17 復位時的連線埠狀態 119
4.1.18 複習題 119
4.2 I/O位操作編程 120
4.2.1 I/O連線埠與位定址 120
4.2.2BSF(置位fileReg) 121
4.2.3BCF(清零fileReg) 121
4.2.4BTG(位翻轉fileReg) 123
4.2.5 檢測輸入引腳 123
4.2.6 BTFSS(位測試fileReg,若為1則跳過) 123
4.2.7 BTFSC(位測試fileReg,若為0則跳過) 123
4.2.8 監測二進制位 124
4.2.9 讀取二進制位 127
4.2.10 讀輸入引腳與讀LATx連線埠 127
4.2.11 讀連線埠的LATx 128
4.2.12 複習題 129
小結 129
習題 129
複習題答案 130
第5章 算術、邏輯指令和程式示例 132
5.1 算術指令 132
5.1.1 無符號數的加法 132
5.1.2 ADDWF和單位元組的加法 133
5.1.3 ADDWFC和16位數的加法 134
5.1.4 BCD(二進制編碼的十進制數)數字系統 134
5.1.5非壓縮BCD數 134
5.1.6 壓縮BCD數 135
5.1.7 DAW指令 135
5.1.8 無符號數的減法 136
5.1.9 PIC減法的C標誌位 138
5.1.10 無符號數的乘法 138
5.1.11 無符號數的除法 139
5.1.12 除法的套用 139
5.1.13 複習題 140
5.2有符號數的概念及其算術運算 141
5.2.1 計算機中有符號數的概念 141
5.2.2 有符號的8位運算元 141
5.2.3 正數 141
5.2.4 負數 141
5.2.5 有符號數運算中的溢出問題 143
5.2.6 何時設定OV標誌位 143
5.2.7二進制補碼運算指令 144
5.2.8 複習題 145
5.3 邏輯和比較指令 145
5.3.1 AND指令 145
5.3.2 OR指令 145
5.3.3 EX-OR指令 146
5.3.4 COMF指令(將fileReg取反) 147
5.3.5 NEGF指令(將fileReg取補) 147
5.3.6 比較指令 148
5.3.7 CPFSGT指令 148
5.3.8 CPFSEQ指令 148
5.3.9 CPFSLT指令 149
5.3.10 複習題 151
5.4 移位指令和數據串列化 152
5.4.1 檔案暫存器的左移或右移操作 152
5.4.2 帶進位的移位 152
5.4.3 串列化數據 153
5.4.4 位元組數據的串列化 153
5.4.5 SWAPF fileReg, d 155
5.4.6 複習題 155
5.5 BCD和ASCII碼轉換 156
5.5.1 ASCII數 156
5.5.2 從壓縮BCD碼到ASCII碼的轉換 157
5.5.3 從ASCII碼到壓縮BCD碼的轉換 157
5.5.4 複習題 157
小結 158
習題 158
複習題答案 162
第6章 存儲區轉換、表處理、宏和模組 163
6.1 立即定址與直接定址方式164
6.1.1立即定址方式164
6.1.2 直接定址方式 164
6.1.3 指令INCF fileReg,W與INCF fileReg,F的區別 165
6.1.4 DECFSZ指令和DECF指令 165
6.1.5 SFR及其地址 166
6.1.6 複習題 167
6.2暫存器間接定址方式 168
6.2.1 暫存器間接定址方式 168
6.2.2 暫存器間接定址方式的優點 168
6.2.3 FSR的自動增量 170
6.2.4 複習題 173
6.3 查詢表與表處理 173
6.3.1 DB偽指令和程式ROM中的定值數據 173
6.3.2 PIC18的讀表操作 174
6.3.3 TBLPTR的自動增量 175
6.3.4 查表和RETLW指令 177
6.3.5 訪問RAM中的查詢表 179
6.3.6 PIC18的寫表操作 181
6.3.7 複習題 181
6.4 數據RAM的位定址 181
6.4.1 可位定址的檔案暫存器數據RAM 182
6.4.2 檔案暫存器的位定址 182
6.4.3 狀態暫存器的位定址 184
6.4.4 複習題 185
6.5 PIC18的存儲區轉換 185
6.5.1 位A和存儲區轉換 185
6.5.2 BSR暫存器和存儲區轉換 186
6.5.3 存儲區轉換和指令INCF F,D,A 186
6.5.4 MOVFF指令和存儲區 189
6.5.5 用MPLAB仿真器檢查數據RAM空間 190
6.5.6 複習題 192
6.6 校驗和與ASCII碼子例程 192
6.6.1 ROM中的校驗和 192
6.6.2 校驗和程式 192
6.6.3 BCD到ASCII的轉換程式 194
6.6.4 二進制(十六進制)到ASCII的轉換程式 196
6.6.5 用存儲區作為棧 197
6.6.6 複習題 198
6.7 宏和模組 198
6.7.1 什麼是宏以及怎樣聲明宏 198
6.7.2 宏的定義 198
6.7.3 LOCAL偽指令 199
6.7.4 INCLUDE偽指令 201
6.7.5 NOEXPAND/EXPAND偽指令 201
6.7.6 宏與子例程 203
6.7.7 模組 204
6.7.8 編寫模組 204
6.7.9 EXTERN偽指令 204
6.7.10 GLOBAL偽指令 204
6.7.11 連線模組 206
6.7.12 複習題 207
小結 207
習題 207
複習題答案 211
第7章 PIC C語言編程 213
7.1 C語言中的數據類型和時延 214
7.1.1 PIC18的C語言數據類型 214
7.1.2 無符號字元 214
7.1.3 有符號字元 216
7.1.4無符號整型216
7.1.5 有符號整型 216
7.1.6 其他數據類型 216
7.1.7 時延 217
7.1.8 複習題 219
7.2 C語言I/O編程 219
7.2.1 位元組I/O編程 219
7.2.2 位定址I/O編程 221
7.2.3 連線埠位的結構 222
7.2.4 複習題 227
7.3 邏輯操作 227
7.3.1 C語言的位操作符 228
7.3.2 C語言的按位移位操作 228
7.3.3 複習題 231
7.4 C語言的數據轉換程式 231
7.4.1 ASCII數 231
7.4.2 壓縮BCD碼到ASCII碼的轉換 232
7.4.3 ASCII碼到壓縮BCD碼的轉換 232
7.4.4 ROM的校驗和 234
7.4.5 PIC18二進制(十六進制)到十進制和ASCII的轉換 235
7.4.6 複習題 236
7.5 C語言的數據串列化 236
7.6 C18程式存儲區配置 239
7.6.1 RAM數據空間與代碼數據空間 239
7.6.2 為數據分配程式空間 239
7.6.3 用於程式的NEAR與FAR 240
7.6.4 Pragma和數據與程式的固定地址分配 241
7.6.5 在指定的ROM地址放置代碼 242
7.6.6 在指定的ROM地址放置代碼 242
7.6.7 複習題 243
7.7 C18的數據RAM分配 243
7.7.1 C18 C編譯器中RAM數據空間的用法 244
7.7.2 用於數據的near與far 245
7.7.3 在指定記憶體地址存放數據 246
7.7.4 覆蓋存儲類 248
7.7.5 複習題 250
小結 250
習題 251
複習題答案 252
第8章 PIC18F硬體連線與ROM程式載入 254
8.1 PIC18F452/458的引腳連線 254
8.1.1 復位後的程式計數器值 256
8.1.2 連線埠A、B、C、D和E 257
8.1.3 複習題 258
8.2 PIC18配置暫存器 258
8.2.1 CONFIG1H暫存器和振盪器時鐘源 259
8.2.2 CONFIG2L暫存器和復位電壓 262
8.2.3 CONFIG2H暫存器和看門狗定時器 264
8.2.4 CONFIG4L暫存器和背景調試程式 265
8.2.5 LIST偽指令 266
8.2.6 設定所有的配置暫存器 267
8.2.7 在MPLAB C18 C編譯器中設定CONFIG暫存器 268
8.2.8 複習題 269
8.3 解釋PIC18的Intel十六進制檔案 269
8.3.1 分析Intel十六進制(INHX8M)檔案 270
8.3.2 分析Intel十六進制檔案(INHX32) 272
8.3.3 Intel十六進制分段檔案(INHX8S) 275
8.3.4 複習題 275
8.4 PIC18 Trainer的設計和裝載 276
8.4.1 基於PIC18F452/458的Trainer 277
8.4.2 PIC18 Trainer的連線 278
8.4.3 PIC18 Trainer程式下載 278
8.4.4 彙編語言和C語言編寫的PIC18測試程式 278
8.4.5 故障檢修的技巧 281
8.4.6 複習題 281
小結 282
習題 282
複習題答案 284
第9章 PIC18定時器的彙編編程和C編程 285
9.1 定時器0和定時器1編程 285
9.1.1 定時器的基本暫存器 285
9.1.2 定時器0暫存器和編程 285
9.1.3 T0CON(定時器0控制)暫存器 286
9.1.4 TMR0IF標誌位 287
9.1.5 16位定時器編程 288
9.1.6 在16位模式下定時器0的編程步驟 288
9.1.7 計算定時器的載入值 291
9.1.8 使用Windows計算器尋找TH和TL 293
9.1.9 預分頻器和長時延的產生 293
9.1.10 定時器0的8位模式編程 295
9.1.11 定時器0的8位模式編程步驟 296
9.1.12 編譯器和負值 297
9.1.13 定時器1編程 298
9.1.14 複習題 301
9.2 計數器編程 301
9.2.1 T0CON暫存器中的T0CS位 301
9.2.2 使用外部晶振作為定時器1的時鐘 302
9.2.3 複習題 306
9.3 定時器0和定時器1的C編程 306
9.3.1 用C訪問定時器 306
9.3.2 計算使用定時器的時延 306
9.3.3 定時器0和定時器1用作計數器的C編程 311
9.4 定時器2和定時器3的編程 314
9.4.1 定時器2的編程 314
9.4.2 定時器3的編程 317
9.4.3 複習題 322
小結 322
習題 322
複習題答案 324
第10章 PIC18串列連線埠的彙編編程和C編程 326
10.1 串列通信基礎 326
10.1.1 半雙工和全雙工傳輸327
10.1.2 異步串列通信和數據幀 328
10.1.3 起始位和結束位 328
10.1.4 數據傳輸率 329
10.1.5 RS232標準 329
10.1.6 RS232引腳 329
10.1.7 數據通信的分類 330
10.1.8 檢查RS232的握手信號331
10.1.9 IBM PC/兼容 COM 連線埠 332
10.1.10 複習題 332
10.2 PIC18連線到RS232 332
10.2.1 PIC18的RX和TX引腳 332
10.2.2max232333
10.2.3 MAX233 333
10.2.4 複習題 334
10.3 PIC18串列連線埠的彙編語言編程 334
10.3.1 PIC18的SPBRG暫存器和波特率 334
10.3.2 TXREG暫存器 336
10.3.3 RCREG暫存器 336
10.3.4 TXSTA(傳送狀態和控制暫存器) 336
10.3.5 RCSTA(接收狀態和控制暫存器) 337
10.3.6 PIR1(外部中斷請求暫存器1) 338
10.3.7 PIC18串列數據傳送編程 338
10.3.8 TXIF標誌位的重要性 340
10.3.9 PIC18串列數據接收編程 340
10.3.10 RCIF標誌位的重要性 341
10.3.11 PIC18的波特率翻兩番 342
10.3.12 波特率的誤差計算 344
10.3.13 傳送和接收 347
10.3.14 基於中斷的數據傳輸 348
10.3.15 複習題 349
10.4 PIC18串列連線埠的C編程 349
10.4.1 PIC18 C的數據傳送和接收 349
10.4.2 複習題 350
小結 352
習題 352
複習題答案 354
第11章 用彙編和C語言進行中斷編程 356
11.1 PIC18中斷 356
11.1.1 中斷和查詢 356
11.1.2 中斷服務程式 357
11.1.3 中斷執行的步驟 357
11.1.4 PIC18的中斷源 357
11.1.5 中斷的使能和禁用 358
11.1.6 使能中斷的步驟 359
11.1.7 複習題 360
11.2 定時器中斷編程 360
11.2.1 定時器復零標誌位和中斷 360
11.2.2 使用C18編譯器的PIC18中斷C編程 365
11.2.3 複習題 369
11.3 外部硬體中斷編程 369
11.3.1 外部中斷INT0、INT1和INT2 369
11.3.2下降沿觸發中斷 371
11.3.3 邊沿觸發中斷採樣 373
11.3.4 複習題 374
11.4 串列通信中斷編程 374
11.4.1 RCIF和TXIF標誌位與中斷 374
11.4.2 使用PIC18中的串列COM 375
11.4.3 複習題 378
11.5 PORTB變化中斷 378
11.6 PIC18的中斷優先權 382
11.6.1 設定中斷優先權 382
11.6.2 低優先權中斷的C編程 390
11.6.3 中斷嵌套 393
11.6.4 在任務轉換時變數的快速保存 393
11.6.5 中斷延遲 394
11.6.6 軟體觸發中斷 394
11.6.7 複習題 394
小結 394
習題 395
複習題答案 397
第12章 LCD和鍵盤接口 399
12.1 LCD接口 399
12.1.1 LCD操作 399
12.1.2 LCD引腳描述 399
12.1.3 為LCD傳送帶時間延遲的命令和數據 401
12.1.4 使用busy標誌位向LCD傳送命令或數據 403
12.1.5 LCD數據表 405
12.1.6 使用TBLRD指令向LCD傳送信息 408
12.1.7 複習題 412
12.2 鍵盤接口 413
12.2.1 鍵盤和PIC18的接口 413
12.2.2 使用掃描法進行按鍵檢測 418
12.2.3 複習題 420
小結 420
習題 420
複習題答案 421
第13章 ADC、DAC和感測器接口 422
13.1 ADC特性 422
13.1.1 ADC設備 422
13.1.2 複習題 426
13.2 PIC18的ADC編程 426
13.2.1 PIC18F452/458的ADC特性編程 426
13.2.2 ADCON0暫存器 427
13.2.3 ADCON1暫存器 429
13.2.4 計算A/D轉換時間 431
13.2.5 使用查詢法對A/D轉換器編程 432
13.2.6 PIC18F458 ADC的彙編語言編程 432
13.2.7 PIC18F458 A/D的C語言編程 433
13.2.8 使用中斷法對A/D轉換器編程 434
13.2.9 複習題 436
13.3 DAC接口 436
13.3.1 數模轉換器(DAC) 436
13.3.2 MC1408 DAC(或DAC0808) 437
13.3.3 把DAC0808的Iout轉換成電壓 438
13.3.4 產生正弦波 438
13.3.5 DAC的C語言編程 440
13.3.6 複習題 441
13.4 感測器接口和信號調整 441
13.4.1 溫度感測器 441
13.4.2 LM34和lm35溫度感測器 441
13.4.3 信號調整和PIC18的LM35接口 442
13.4.4 溫度的讀取和顯示 443
13.4.5 複習題 445
小結 445
習題 445
複習題答案 447
第14章 用快閃記憶體與EEPROM存儲數據 448
14.1 半導體存儲器 448
14.1.1 存儲容量 448
14.1.2 存儲區組織 448
14.1.3 速度 449
14.1.4 ROM 450
14.1.5 PROM和OTP 450
14.1.6 EPROM與UV-EPROM 450
14.1.7 EEPROM 451
14.1.8 快閃記憶體EPROM 452
14.1.9 掩模ROM 452
14.1.10 RAM(隨機訪問存儲器) 453
14.1.11 SRAM 453
14.1.12 NV-RAM 454
14.1.13 DRAM 454
14.1.14 DRAM的封裝問題 455
14.1.15 DRAM存儲區組織 455
14.1.16 複習題 456
14.2 PIC18F唯讀快閃記憶體的擦寫 457
14.2.1 使用TBLWR向快閃記憶體寫入數據 457
14.2.2 寫快閃記憶體的步驟 459
14.2.3 擦除快閃記憶體的步驟 464
14.2.4 快閃記憶體擦寫操作的C語言編程 467
14.2.5 複習題 470
14.3 PIC18 EEPROM的數據讀取和寫入 470
14.3.1 向EEPROM寫入數據 470
14.3.2 寫EEPROM的步驟 471
14.3.3 讀EEPROM的步驟 472
14.3.4 使用C語言訪問EEPROM 475
14.3.5 複習題 478
小結 478
習題 478
複習題答案 480
第15章 CCP和ECCP編程 481
15.1 標準型和增強型CCP模組 481
15.1.1 CCP和計時器 481
15.1.2 CCP暫存器 482
15.1.3 CCP引腳 483
15.1.4 複習題 483
15.2 比較模式編程 483
15.2.1 比較模式編程的步驟 485
15.2.2 複習題 488
15.3 捕捉模式編程 489
15.3.1 捕捉模式編程的步驟 489
15.3.2 測量脈衝周期489
15.3.3 測量脈寬 491
15.3.4 複習題 494
15.4 PWM編程 494
15.4.1 PWM周期 495
15.4.2 PWM的占空比 496
15.4.3 PWM編程的步驟 496
15.4.4 占空比與Fosc 499
15.4.5 複習題 499
15.5 ECCP編程 499
15.5.1 ECCP比較模式的編程步驟 501
15.5.2 ECCP捕捉模式的編程步驟 503
15.5.3 ECCP的PWM特徵 504
15.5.4 ECCP的PWM編程步驟 504
15.5.5 複習題 505
小結 505
習題 505
複習題答案 507
第16章 SPI協定和DS1306RTC接口 508
16.1 SPI匯流排協定 508
16.1.1 SPI匯流排 508
16.1.2 SPI讀寫協定 509
16.1.3 將數據寫入SPI設備的步驟 509
16.1.4 從SPI設備讀數據的步驟 510
16.1.5 複習題 511
16.2 DS1306 RTC接口和編程 511
16.2.1 控制暫存器中WP位的重要性 514
16.2.2 DS1306的地址映射 514
16.2.3 時間和日期地址的位置和模式 515
16.2.4 使用MSSP模組來連線PIC18和DS1306 516
16.2.5 使用彙編設定時間 518
16.2.6 使用彙編設定日期 518
16.2.7 RTC設定、讀取和顯示時間和日期 519
16.2.8 複習題 522
16.3 DS1306 RTC的C編程 522
16.3.1 使用C語言設定時間和日期 522
16.3.2 使用C語言讀取和顯示時間和日期 523
16.3.3 複習題 524
16.4 DS1306的警報和中斷特徵 525
小結 533
習題 533
複習題答案 535
第17章 電機控制:繼電器、PWM、DC電機和步進電機 536
17.1 繼電器和光隔離器536
17.1.1 機電繼電器 536
17.1.2 繼電器驅動 538
17.1.3 固態繼電器 539
17.1.4 簧片開關 540
17.1.5 光隔離器 540
17.1.6 光隔離器的連線 540
17.1.7 複習題 541
17.2 步進電機的接口 542
17.2.1 步進電機 542
17.2.2 步進角 543
17.2.3 每秒的步數和rpm的關係 545
17.2.4 四步順序和電機轉子的齒數 545
17.2.5 電機速度 545
17.2.6 保持轉矩 546
17.2.7 波驅動四步順序 546
17.2.8 單極性與雙極性步進電機的接口 546
17.2.9 使用電晶體作為驅動器 547
17.2.10 通過光隔離器來控制步進電機 548
17.2.11 用PIC18 C語言來控制步進電機 549
17.2.12 複習題 550
17.3 DC電機的接口和PWM 550
17.3.1 DC電機 550
17.3.2 單方向控制 551
17.3.3 雙方向控制 551
17.3.4脈衝寬度調製(PWM) 555
17.3.5 使用光隔離器控制DC電機 556
17.3.6 DC電機的控制和PWM的C編程 558
17.3.7 複習題 560
17.4 使用CCP來控制PWM電機 561
17.4.1 使用CCP來控制DC電機 561
17.4.2 複習題 561
17.5 使用ECCP來控制DC電機 563
17.5.1 使用ECCP來雙向控制DC電機 563
17.5.2 複習題 566
小結 566
習題 567
複習題答案 568
附錄A 569
附錄B 608
附錄C 610
附錄D 626
附錄E 630
附錄F 632
附錄G 634
附錄H 636
索引 690
……
序言
微控制器是一種無處不在的內嵌型控制晶片,廣泛用於工業控制、消費類電子產品、汽車、金融、軍事、能源等領域。在強大的市場需求和日新月異的科技進步驅動下,微控制器產品不斷推陳出新。PIC系列微控制器是全球領先的微控制器和模擬半導體供應商--美國微芯公司推出的嵌入式微控制器,具有運行速度快、工作電壓低、功耗低、驅動能力強、體積小、價格低廉、指令簡單易學易用等優點。PICl8系列微控制器就是其中的傑出產品之一。
本書涵蓋學習微控制器所需的基礎知識、PICl8微控制器的內部結構、彙編指令系統、C語言編程、接口技術及其套用實例,具有以下鮮明特點。
口本書採用計算機基礎知識--P1C18微控制器內部結構--彙編指令--C編,程--外圍接口--套用實例的授課思路,知識體系清晰、內容豐富,適應當今信息社會對寬口徑計算機類專業學生的培養需求。口每章的開篇都簡明地給出了本章的學習目標以及主要內容的結構分布,在每章末尾還給出了小結,有助於讀者進一步理解和思考所學知識,形成完整的知識體系。口本書在介紹PIcl8微控制器原理及套用設計的同時,還配以豐富的設計實例,讓讀者能充分體會到每一個設計細節,有利於快速培養讀者的細緻分析與設計系統的能力。口對於主要的設計實例,本書分別給出了其彙編語言編程和C語言編程,通過對比學習兩類不同的編程思想和風格,使得學生很容易發現二者的聯繫、區別和優缺點,克服了將彙編語言編程和C語言編程單獨講述的弊端。口章後習題以及每節後的複習題進一步充實了全書的內容,有利於幫助讀者更好地理解相關基本理論。本書配有的附錄,內容全面詳盡,對讀者而言是一本非常難得的技術手冊。
簡而言之,本書結構清晰、內容豐富、通俗易懂,是一本不可多得的學習寶典。
本書由李中華、陳卓怡主譯,李中華負責統稿,張雨濃負責審校。參加本書翻譯和初校T作的還有楊波、孫宇佳、張董華、伍沛然等。在此,謹對所有為本書的出版提供了幫助的人們表示誠摯的謝意。
由於譯審者不平所限,加之時間倉促,譯文中難免有不妥乃至錯誤之處,敬請廣大讀者批評指正。