適合人群
本書適合嵌入式系統開發工程師閱讀,也可作為高等院校電子、機電和計算機工程相關專業嵌入式系統課程的教材或參考書。
目錄
第一部分 嵌入式系統入門
第1章 微小的計算機,隱藏的控制 2
1.1 當今嵌入式系統概述 2
1.2 一些嵌入式系統例子 3
1.2.1 家用電冰櫃 3
1.2.2 汽車車門機械裝置 4
1.2.3 電子桌球 5
1.2.4 Derbot自主導向車 5
1.3 一些必備的計算機知識 7
1.3.1 計算機的組成元素 7
1.3.2 指令集——CISC和RISC 8
1.3.3 存儲器類型 8
1.3.4 存儲器組織結構 9
1.4 微處理器和微控制器 10
1.4.1 微處理器 10
1.4.2 微控制器 10
1.4.3 微控制器系列產品 11
1.4.4 微控制器的封裝和外觀 12
1.5 Microchip公司和PIC微控制器 13
1.5.1 背景 13
1.5.2 今天的PIC微控制器 14
1.6 以12系列為例介紹PIC微控制器 16
1.7 其他微控制器——Freescale微控制器 18
小結 20
參考文獻 20
第二部分 最小的系統和PIC16F84A
第2章 PIC16系列和16F84A 22
2.1 PIC16系列 22
2.1.1 PIC16系列概述 22
2.1.2 16F84A 24
2.1.3 謹慎升級 24
2.2 16F84A體系結構概述 24
2.3 存儲器技術回顧 27
2.3.1 靜態RAM 27
2.3.2 EPROM 28
2.3.3 EEPROM 28
2.3.4 Flash 29
2.4 16F84A的存儲器 29
2.4.1 16F84A程式存儲器 29
2.4.2 16F84A數據和特殊功能暫存器存儲器(RAM) 30
2.4.3 配置字 32
2.4.4 EEPROM 33
2.5 一些有關時序的問題 34
2.5.1 時鐘振盪器和指令周期 34
2.5.2 流水線操作 35
2.6 上電和復位 36
2.7 其他微控制器——AtmelAT89C2051微控制器 37
2.8 更多細節——16F84A片上復位電路 38
小結 40
參考文獻 41
第3章 並行連線埠、電源和時鐘振盪器 42
3.1 並行輸入/輸出概述 42
3.2 並行輸入/輸出的技術挑戰 43
3.2.1 設計並行連線埠 43
3.2.2 連線埠的電學特性 46
3.2.3 一些特殊的連線埠特性 47
3.3 與並行連線埠連線的設備 48
3.3.1 開關 48
3.3.2 發光二極體 49
3.4 PIC16F84A並行連線埠 51
3.4.1 16F84A連線埠B 52
3.4.2 16F84A連線埠A 53
3.4.3 連線埠的輸出特性 53
3.5 時鐘振盪器 55
3.5.1 時鐘振盪器類型 55
3.5.2 實際使用振盪器時要考慮的問題 56
3.5.3 16F84A的時鐘振盪器 56
3.6 電源 58
3.6.1 對電源的要求 58
3.6.2 16F84A的工作條件 58
3.7 電子桌球遊戲的硬體設計 60
小結 60
參考文獻 61
第4章 編程伊始——彙編介紹 62
4.1 程式功能與開發流程 63
4.1.1 編程問題和彙編折中方案 63
4.1.2 採用彙編語言編寫程式的流程 64
4.1.3 程式開發流程 65
4.2 PIC16系列指令集和ALU 66
4.2.1 PIC16系列ALU 66
4.2.2 PIC16系列指令集 67
4.3 彙編器和彙編格式 68
4.3.1 彙編器及MicrochipMPASMTM彙編器簡介 68
4.3.2 彙編格式 68
4.3.3 彙編偽指令 69
4.3.4 數的表示 69
4.4 編寫簡單的程式 70
4.5 使用開發環境編程 72
4.5.1 MPLAB介紹 72
4.5.2 MPLAB的組成部分 73
4.5.3 MPLAB檔案結構 74
4.6 MPLAB指南 74
4.6.1 創建項目 75
4.6.2 編寫原始碼 75
4.6.3 對項目進行彙編 76
4.7 程式仿真簡介 77
4.7.1 開始仿真 77
4.7.2 產生連線埠輸入 78
4.7.3 觀察微控制器各部分狀態 78
4.7.4 程式復位和運行 79
4.8 下載程式到微控制器 80
4.9 CISC指令集和RISC指令集比較 82
4.10 更多的了解——16系列指令集格式 83
小結 84
參考文獻 84
第5章 創建彙編程式 85
5.1 創建結構化程式概述 85
5.1.1 流程圖 85
5.1.2 狀態圖 86
5.2 流程控制——分支和子例程88
5.2.1 條件分支和位操作 88
5.2.2 子例程和棧 89
5.3 產生延時和時間間隔 91
5.4 數據處理 92
5.4.1 直接定址和檔案選擇暫存器 93
5.4.2 查找表 93
5.4.3 包含延時循環和查找表的程式例子 95
5.5 邏輯指令 97
5.6 算術指令和進位標誌 97
5.6.1 加法指令 98
5.6.2 減法指令 98
5.6.3 一個算術程式例子 98
5.6.4 通過間接定址來保存斐波那契數列 100
5.7 更複雜的彙編程式 102
5.7.1 包含檔案 102
5.7.2 宏指令(Macro) 103
5.7.3 MPLAB特殊指令 104
5.8 MPLAB仿真器的更多用處 105
5.8.1 斷點 105
5.8.2 跑表 106
5.8.3 跟蹤 107
5.9 電子桌球遊戲程式 108
5.9.1 程式結構 108
5.9.2 程式代碼分析 110
5.10 電子桌球遊戲程式仿真 111
5.10.1 設定輸入激勵 111
5.10.2 設定Watch視窗 111
5.10.3單步運行111
5.10.4 連續單步運行 112
5.10.5 運行 112
5.10.6 斷點 112
5.10.7 跑表 112
5.10.8 跟蹤 113
5.10.9 調試整個程式 113
5.11 其他仿真器介紹——圖形化的傳真器 114
小結 114
參考文獻 114
第6章 與計時相關的設備:中斷、計數器和定時器 115
6.1 中斷 115
6.1.1 中斷結構 116
6.1.2 16F84A中斷結構 117
6.1.3 CPU對中斷的回響 118
6.2 編寫含有中斷的程式 119
6.2.1 編寫僅含一個中斷的程式 119
6.2.2 編寫含有多箇中斷的程式——識別中斷源 121
6.2.3 阻止中斷對程式的破壞——保存上下文 122
6.2.4 阻止中斷對程式的破壞——臨界區域和中斷禁止124
6.3 計數器和定時器概述 126
6.3.1 數字計數器回顧 126
6.3.2 將計數器用作定時器 127
6.3.3 16F84ATimer0模組 128
6.4 16F84ATimer0的使用——以電子桌球遊戲為例 130
6.4.1 對目標或事件計數 130
6.4.2 硬體產生的延時 131
6.5 看門狗定時器 133
6.6 休眠模式 133
6.7 其他中斷 134
6.8 更多的了解——中斷回響延時 135
小結 136
第三部分 較大的系統和PIC16F873A
第7章 較大的系統和PIC16F873A 138
7.1 PIC16F87XA概述 139
7.2 16F873A的結構圖和CPU 140
7.2.1 CPU和核 141
7.2.2 存儲器 141
7.2.3 外圍設備 142
7.3 16F873A的存儲器和存儲器映射142
7.3.1 16F873A的程式存儲器 142
7.3.2 16F873A的數據存儲器和特殊功能暫存器 144
7.3.3 配置字 146
7.4 “特殊”的存儲器操作 146
7.4.1 存取EEPROM和程式存儲器 147
7.4.2 電路內串列編程(ICSPTM) 149
7.5 16F873A的中斷 149
7.5.1 中斷結構 149
7.5.2 中斷暫存器 150
7.5.3 中斷識別和上下文保存 152
7.6 16F873A的振盪器、復位和電源 152
7.6.1 時鐘振盪器 152
7.6.2 復位和電源 152
7.7 16F873A的並行連線埠 153
7.7.1 16F873A的連線埠A 153
7.7.2 16F873A的連線埠B 155
7.7.3 16F873A的連線埠C 155
7.8 測試、調試、診斷工具 156
7.8.1 測試嵌入式系統的挑戰 156
7.8.2 示波器和邏輯分析儀 158
7.8.3 電路內仿真器 160
7.8.4 片上調試器 161
7.9 Microchip公司的電路內調試器(ICD2) 162
7.10 套用16F873A:DerbotAGV 163
7.10.1 電源、振盪器和復位 163
7.10.2 並行連線埠的使用 164
7.10.3 硬體集成 165
7.11 使用ICD2下載、測試和運行一個簡單的程式 166
7.11.1 第一個AGV程式 166
7.11.2 套用電路內調試器ICD2 168
7.11.3 在程式中設定配置字 169
7.12 深入了解16F874A/16F877A的連線埠D和連線埠E 171
小結 173
參考文獻 173
第8章 人機接口和物理接口 174
8.1 人機接口概述 174
8.2 從開關到鍵盤 176
8.2.1 鍵盤 177
8.2.2 設計實例:Derbot手動控制器中鍵盤的使用 178
8.3 LED顯示 182
8.3.1 LED陣列:七段LED顯示 182
8.3.2 設計實例:在Derbot手動控制器中使用七段LED顯示 184
8.4 LCD 188
8.4.1 HD44780驅動和它的衍生電路 188
8.4.2 設計實例:在Derbot手動控制器中使用LCD顯示器 190
8.5 與物理世界互動 192
8.6 一些簡單的感測器 193
8.6.1 微開關 193
8.6.2 光敏電阻 194
8.6.3 光學方式的物體感知 194
8.6.4 光學感測器用於軸角編碼器195
8.6.5 超音波方式的物體感知 196
8.7 深入學習數位訊號輸入 196
8.7.1 16F873A的輸入特性 197
8.7.2 確保正常的電壓幅度和輸入保護 198
8.7.3 消除開關反彈 201
8.8 執行器:電機和伺服 202
8.8.1 直流電機和步進電機 202
8.8.2 角度定位:伺服傳動裝置 203
8.9 與執行器進行互動 204
8.9.1 簡單的直流轉換 204
8.9.2 AGV中簡單的開關電路 206
8.9.3 雙向開關:H-橋 207
8.9.4 AGV中的電機開關 209
8.10 AGV硬體集成 209
8.11 套用感測器和執行器——AGV“盲目”導航程式 210
小結 212
參考文獻 212
第9章 深入學習計時 213
9.1 深入學習計數和計時 213
9.2 16F87XATimer0和Timer1 214
9.2.1 Timer0 214
9.2.2 Timer1 214
9.2.3 使用Timer0和Timer1作為AGV里程表的計數器 216
9.2.4 使用Timer0和Timer1產生重複性中斷 219
9.3 16F87XA的Timer2、比較器和PR2暫存器 220
9.3.1 Timer2 220
9.3.2 PR2暫存器、比較器和後分頻比器 221
9.4 捕捉/比較/PWM(CCP)模組 222
9.4.1 捕捉/比較/PWM概論 222
9.4.2 捕捉模式 223
9.4.3 比較模式 224
9.5 脈寬調製 225
9.5.1 PWM的原理 225
9.5.2 在硬體中產生PWM信號——16F87XA的PWM模組 226
9.5.3 將PWM套用於AGV中電機的控制 228
9.6 軟體產生PWM 231
9.6.1 一個軟體產生PWM的例子 231
9.6.2 與存儲器定義和跳轉相關的彙編偽指令 235
9.7 使用PWM進行數模轉換 236
9.8 頻率測量 239
9.8.1 頻率測量的原理 239
9.8.2 AGV中的頻率(速度)測量 239
9.9 在AGV中套用速度控制 242
9.10 當沒有可用定時器時 245
9.11 休眠模式 247
9.12 後面我們將學習什麼 248
9.13 AGV硬體集成 248
小結 248
參考文獻 249
第10章 串列連線埠通信 250
10.1 串列連線埠簡介 250
10.2 簡單串列連線——同步數據通信 252
10.2.1 同步通信基礎 252
10.2.2 在微控制器中實現同步串列I/O 253
10.2.3Microwire和SPI 254
10.2.4 引入多個節點 254
10.3 16F87XA主同步串列連線埠(MSSP)模組的SPI模式 255
10.3.1 連線埠概述 255
10.3.2 連線埠配置 256
10.3.3 時鐘設定 257
10.3.4 管理數據傳輸 258
10.4 SPI的簡單例子 259
10.5 Microwire和SPI以及簡單同步串列傳輸的局限性 261
10.6 增強的同步串列通信及晶片間匯流排 261
10.6.1 I2C的主要特性與物理連線 261
10.6.2 上拉電阻 262
10.6.3 I2C信號特性262
10.7 配置為I2C的MSSP 263
10.7.1 MSSP中的I2C暫存器及其基本套用 263
10.7.2 I2C從動模式下的MSSP 267
10.7.3 I2C主控模式下的MSSP 269
10.8 在DerbotAGV中套用I2C 270
10.8.1 將Derbot手動控制器用作串列節點 270
10.8.2 將AGV用作I2C主控器 271
10.8.3 將手動控制器用作I2C從動器 275
10.8.4 DerbotI2C程式驗證 277
10.9 對同步串列數據通信的評價及對異步通信方式的介紹 278
10.9.1 異步原理 278
10.9.2 在不接收時鐘信號時如何對串列數據進行同步 279
10.10 16F87XA可定址通用同步異步收發器(USART) 280
10.10.1 連線埠概述 280
10.10.2 USART異步傳送器 280
10.10.3 USART波特率發生器 282
10.10.4 USART異步接收器 283
10.10.5 異步通信示例 284
10.10.6 在USART接收模式下使用地址檢測 286
10.10.7 USART的同步模式 287
10.11 不藉助串列連線埠實現串列通信——“bitbanging” 287
10.12 構建Derbot手動控制器 287
小結 287
參考文獻 288
第11章 數據採集與處理 289
11.1 模擬量和數字量的採集與使用概述 289
11.2 數據採集系統 290
11.2.1 模數轉換器 290
11.2.2 信號調理——放大與濾波 293
11.2.3 模擬多路選擇器293
11.2.4 採樣與保持以及採集時間 293
11.2.5 時序及微處理器控制 295
11.2.6 微控制器環境下的數據採集 296
11.3 PIC?16F87XA中的ADC模組 296
11.3.1 概述與框圖 296
11.3.2 控制ADC 297
11.3.3 模擬輸入模型 300
11.3.4 計算採集時間 301
11.3.5 重複轉換 302
11.3.6 綜合權衡轉換速率與轉換精度302
11.4 在Derbot測光程式中套用ADC 303
11.4.1 ADC的配置 304
11.4.2 採集時間 304
11.4.3 數據轉換 304
11.5 一些簡單的數據處理技術 305
11.5.1 定點與浮點算術 305
11.5.2 二進制數向BCD碼的轉換 306
11.5.3 乘法 307
11.5.4 比例縮放與Derbot測光示例 307
11.5.5 使用參考電壓實現比例縮放 308
11.6 Derbot尋光程式 309
11.7 比較器模組 311
11.7.1 比較器動作概述 311
11.7.2 16F87XA的比較器與參考電壓 311
11.8 將Derbot電路用於其他測量 312
11.8.1 電子測距儀 312
11.8.2 測光儀 313
11.8.3 電壓計 314
11.8.4 其他測量系統 314
11.9 將Derbot配置為尋光機器人 314
小結 314
參考文獻 315
第四部分 更靈巧的系統與PIC18FXX2
第12章 更靈巧的系統與PIC18FXX2 318
12.1 PIC18系列及18FXX2概述 319
12.2 18F2X2結構圖與狀態暫存器 320
12.3 18系列指令集 324
12.3.1 未變化的指令 327
12.3.2 經過升級的指令 328
12.3.3 變化而來的新指令 328
12.3.4 全新指令 328
12.4 數據存儲器與特殊功能暫存器 329
12.4.1 數據存儲器映射 329
12.4.2 存取RAM 329
12.4.3 間接定址以及在數據存儲器中訪問表格 329
12.5 程式存儲器 332
12.5.1 程式存儲器映射 332
12.5.2 程式計數器 332
12.5.3 在16系列基礎上增強的計算goto指令 333
12.5.4 配置暫存器 334
12.6 棧 335
12.6.1 自動棧操作 335
12.6.2 程式設計師對棧的訪問 336
12.6.3 快速暫存器棧 336
12.7 中斷 336
12.7.1 中斷結構概覽 337
12.7.2 中斷源的啟用與優先權劃分 337
12.7.3 總體中斷優先權啟用 338
12.7.4 全局啟用 338
12.7.5 中斷邏輯的其他方面 338
12.7.6 中斷暫存器 339
12.7.7 中斷的上下文保護 343
12.8 電源與復位 343
12.8.1 電源 343
12.8.2 上電與復位 343
12.9 振盪源 345
12.9.1 LP、XT、HS和RC振盪器模式 345
12.9.2 EC、ECIO和RCIO振盪器模式 345
12.9.3 HS+PLL振盪器模式 346
12.9.4 時鐘源切換 346
12.10 18F242編程入門 346
12.10.1 使用18系列MPLABIDE 347
12.10.2 斐波那契程式 347
小結 349
參考文獻 349
第13章 PIC18FXX2外圍設備 350
13.1 18FXX2外圍設備概述 350
13.2 並行連線埠 351
13.2.1 18FXX2的連線埠A 351
13.2.2 18FXX2的連線埠B 352
13.2.3 18FXX2的連線埠C 353
13.2.4 並行從動連線埠 353
13.3 定時器 353
13.3.1 Timer0 353
13.3.2 Timer1 355
13.3.3 Timer2 356
13.3.4 Timer3 356
13.3.5 看門狗定時器 357
13.4 比較/捕捉/PWM(CCP)模組 358
13.4.1 控制暫存器 358
13.4.2 捕捉模式 359
13.4.3 比較模式 359
13.4.4 脈寬調製 360
13.5 串列連線埠 360
13.5.1 SPI模式下的MSSP 360
13.5.2 I2C模式下的MSSP 361
13.5.3 USART 361
13.6 模數轉換器(ADC) 361
13.7 低壓檢測 361
13.8 在Derbot-18中套用18系列 363
13.9 18F2420與擴展指令集363
13.9.1 納瓦技術 364
13.9.2 擴展指令集 364
13.9.3 增強型外圍設備 365
小結 365
參考文獻 365
第14章 C語言入門 366
14.1 為何選擇C語言 366
14.2 C語言簡介 367
14.2.1 簡史 367
14.2.2 第一個C程式 367
14.2.3 程式結構——聲明、語句、注釋和空格 368
14.2.4C語言關鍵字370
14.2.5C語言函式370
14.2.6 數據類型與存儲 371
14.2.7 C運算符 372
14.2.8 程式流的控制以及while關鍵字 372
14.2.9 C預處理器及其偽指令 373
14.2.10 使用庫和標準庫 373
14.3 編譯C程式 373
14.4 MPLABC18編譯器 374
14.4.1 數制規範 375
14.4.2 算術運算 375
14.5 C18指南 375
14.5.1 連線器和連線器腳本 375
14.5.2 連線頭檔案和庫檔案 376
14.5.3 構建項目 377
14.5.4 項目檔案 378
14.6 仿真C程式 378
14.7 第2個C例程——斐波那契程式 380
14.7.1 程式初步——進一步認識變數聲明 381
14.7.2 do-while結構 381
14.7.3 標號和goto關鍵字 381
14.7.4 仿真斐波那契程式 381
14.8 MPLABC18庫 382
14.8.1 硬體外圍設備函式 382
14.8.2 軟體外圍設備庫 382
14.8.3 通用軟體庫 383
14.8.4 數學庫 384
14.9 深度閱讀 385
小結 385
參考文獻 385
第15章 C語言與嵌入式環境 387
15.1 使C語言適用於嵌入式環境 387
15.2 位值的控制與分支 387
15.2.1 控制各個位 389
15.2.2 if與if-else條件分支結構 389
15.2.3 設定配置位 390
15.2.4 仿真並運行例程 390
15.3 進一步認識函式 391
15.3.1 函式原型 391
15.3.2 函式定義 392
15.3.3 函式調用與數據傳遞 392
15.3.4 延時庫函式和Delay10KTCYx() 393
15.4 更多的分支與循環指令 393
15.4.1 使用break關鍵字 393
15.4.2 使用for關鍵字 394
15.5 使用定時器與PWM外圍設備 395
15.5.1 使用定時器外圍設備 397
15.5.2 使用PWM 398
15.5.3 主程式循環 399
小結 399
第16章 使用C語言實現數據的採集與使用 400
16.1 用C語言實現數據處理 400
16.2 使用18FXX2ADC 400
16.2.1 尋光程式的結構 404
16.2.2 使用ADC 405
16.2.3 if-else的更多套用 406
16.2.4 尋光程式的仿真 406
16.3 指針、數組與字元串 408
16.3.1 指針 408
16.3.2 數組 408
16.3.3 對數組使用指針 409
16.3.4 字元串 409
16.3.5 指針、數組和字元串的套用例程 409
16.3.6 對while條件的補充說明 411
16.3.7 仿真例程 411
16.4 使用I2C外圍設備 413
16.4.1 I2C例程 413
16.4.2 使用++和--運算符 415
16.5 格式化顯示數據 416
16.5.1 例程概覽 419
16.5.2 使用庫函式實現數據的格式化 418
16.5.3 程式分析 418
小結419
第17章 深入學習C語言編程和更豐富的C語言編程環境 420
17.1 深入學習C語言編程和更豐富的C語言編程環境 420
17.2 插入彙編 421
17.3 控制存儲器分配 422
17.3.1 存儲器分配偽指令pragma 422
17.3.2 設定配置字 423
17.4 中斷 424
17.4.1 中斷服務程式 424
17.4.2 定位和識別中斷服務程式 424
17.5 使用溢出中斷的例子——閃爍AGV上的LED 425
17.5.1 使用Timer0 426
17.5.2 中斷的使用和中斷服務程式的動作 427
17.5.3 仿真閃爍LED程式 427
17.6 變數的存儲類型及其套用 429
17.6.1 存儲類型 429
17.6.2 可見性 430
17.6.3 生存期 430
17.6.4 連線 430
17.6.5 18系列中指定變數的存儲器類型 431
17.6.6 存儲類型舉例 431
17.7 啟動檔案:c018i.c 432
17.7.1 C18啟動檔案 432
17.7.2 c018i.c檔案的結構 433
17.7.3 仿真c018i.c檔案 433
17.8 結構體、聯合體和位域 435
17.9 處理器相關的頭檔案 436
17.9.1 SFR定義 436
17.9.2 頭檔案中彙編相關的定義 437
17.10 深入學習——MPLAB連線器和.map檔案437
17.10.1 連線器的功能 737
17.10.2 連線器腳本 738
17.10.3 .map檔案 439
小結 440
參考文獻 441
第18章 多任務實時作業系統 442
18.1 由多任務和實時引發的挑戰 442
18.1.1 多任務——任務、優先權、截止時間 443
18.1.2 “實時”的含義 444
18.2 通過順序編程來實現多任務 444
18.2.1 分析超循環 445
18.2.2 時間觸發和事件觸發的任務 445
18.2.3 使用中斷來區分優先權——前台/後台結構 445
18.2.4 引入“時鐘滴答”來同步程式活動 446
18.2.5 一個通用的“作業系統” 446
18.2.6 順序編程實現多任務的限制 448
18.3 實時作業系統 448
18.4 調度策略和調度器 448
18.4.1 循環調度 449
18.4.2時間片輪轉調度和上下文切換 449
18.4.3 任務狀態 450
18.4.4搶占式優先權調度 451
18.4.5 協作式調度 452
18.4.6 中斷在任務調度中的作用 452
18.5 任務開發 453
18.5.1 任務定義 453
18.5.2 編寫任務以及設定任務優先權 453
18.6 數據和資源保護——信號量 454
18.7 後面我們將學習什麼 454
小結 455
參考文獻 455
第19章 SalvoTM實時作業系統 456
19.1 Salvo實時作業系統概述 456
19.1.1 Salvo的基本特性 456
19.1.2 Salvo版本和相關的參考文獻 457
19.2 配置Salvo應用程式 458
19.2.1 構建Salvo應用程式——構建庫 458
19.2.2 Salvo庫 458
19.2.3 C18和Salvo版本 459
19.3 編寫Salvo程式 460
19.3.1 初始化和調度 460
19.3.2 編寫Salvo任務 461
19.4 第一個Salvo例程 461
19.4.1 程式的總體結構和main函式 463
19.4.2 任務和調度 464
19.4.3 創建一個Salvo/C18項目 464
19.4.4 配置檔案的設定 465
19.4.5 構建Salvo例子 465
19.4.6 仿真Salvo程式 466
19.5 在Salvo程式中使用中斷、延遲和信號量 467
19.5.1 一個使用中斷驅動的時鐘滴答的例程 468
19.5.2 選擇庫和配置 470
19.5.3 使用中斷和產生時鐘滴答 470
19.5.4 使用延遲 472
19.5.5 使用一個二元信號量 472
19.5.6 程式仿真 474
19.5.7 運行程式 475
19.6 使用Salvo訊息和增加RTOS複雜度 475
19.7 一個使用訊息的例程 476
19.7.1 選擇庫和配置 481
19.7.2 任務:USnd_Task 481
19.7.3 任務:Motor_Task 481
19.7.4 訊息的用法 482
19.7.5 中斷的使用和ISR 483
19.7.6 仿真或者運行程式 485
19.8 RTOS開銷 485
小結 485
參考文獻 486
第五部分網路互連技術
第20章 互連與網路 488
20.1 網路互連概述 488
20.2 紅外線連線 490
20.3 無線電連線 491
20.3.1 藍牙 491
20.3.2紫蜂492
20.3.3 紫峰和PIC微控制器 492
20.4控制器區域網路和局域網際網路 493
20.4.1 控制器區域網路 493
20.4.2 CAN和PIC微控制器 494
20.4.3 局域網際網路 495
20.4.4 LIN和PIC微控制器 496
20.5 嵌入式系統和網際網路 497
20.6 總結 498
小結 498
參考文獻 499
附錄1 PIC16系列指令集 500
附錄2 電子桌球遊戲 502
附錄3 DerbotAGV硬體設計細節 507
附錄4 自主導向車的一些基本知識 511
附錄5 PIC18系列指令集(非擴展) 515
附錄6 C語言要點 519
索引 523
……