簡介
單片機與計算機串口通信實踐 ( 單片機與計算機串口通信的多種實現方案,全部 VC 代碼及其詳解! )
張秀關著 .
ISBN 978-7-121-18484-0
2013.1
定價: 49.00 元
332 頁
16 開
編輯推薦
完整性:對於模擬電壓量,單片機進行A/D轉換,求得四次平均值;通過串口傳送到計算機,計算得電壓值,並存儲到Excel檔案。包 含了電壓量的測量、數據處理及保存的整個過程。
新穎性:單片機與計算機之間的串口通信,採用了三種方案,可適用於不同的項目要求;VC寫Excel檔案,採用了ODBC、自動化兩種方法。
實用性:使用一個ini配置檔案,保存串口通信參數;程式代碼經過反覆調試,可供VC串口編程者直接採用。
細緻性:列出程式的全部代碼,並進行詳解;採用不同的字型,標示不同通信方案之間的代碼差異,易學、易懂。
內容提要
採用Cygnal公司的C8051F020DK-U型單片機開發工具,即可實現與計算機的串口通信。本書由簡入繁,詳細闡述了三種串口通信模式,依據其各自的串列數據傳輸能力,可適用於不同的實際項目。單片機測量了六路電壓量、片內溫度,記錄了兩個時間值,並將它們串列傳送到計算機中;計算機將計算得到的物理電壓值等,採用ODBC、自動化兩種方法,存儲到以當前時刻命名的Excel檔案中。
本書具有思路清晰、講解詳細的特點,從實際套用出發、程式代碼經過反覆調試,可直接為採用Keil C的單片機編程者、採用VC ++ 6.0 的串口編程者使用。
目錄
第1部分 基本知識
第1章 C8051F020型單片機 2
1.1 開發工具 2
1.1.1 硬體連線圖 2
1.1.2 主要部件的簡介 3
1.1.3 目標板的跳線器連線 4
1.1.4 自製件 5
1.2 集成開發環境 7
1.2.1 集成開發環境的簡介 7
1.2.2 集成開發環境的配置 8
1.2.3 Keil公司簡介 9
1.3 C8051F020型單片機 10
1.3.1 系統時鐘SYSCLK 10
1.3.2 片外數據存儲器的擴展 10
1.3.3 低連線埠P0~P3 11
1.3.4 T0、T1、T2、T3、T4簡介 13
1.3.5 模數轉換器ADC0 17
1.3.6 串列通信匯流排UART0 20
1.4 頭檔案C8051F020.h 22
1.4.1 縮寫詞 22
1.4.2 檔案代碼 23
第2章 計算機串口通信基礎 30
2.1 Windows API串口通信函式 30
2.1.1 串口的打開、關閉 30
2.1.2 串口的配置 31
2.1.3 串口緩衝區的控制 33
2.1.4 讀、寫操作的逾時控制 33
2.1.5 串列通信事件的操作 35
2.1.6 串口的讀、寫操作 37
2.1.7 異步操作 39
2.2 多執行緒 41
2.2.1 執行緒簡介 41
2.2.2 工作者執行緒的相關函式 42
2.2.3 執行緒間的通信 43
2.2.4 執行緒間的同步 45
2.3 Visual C++ 6.0的介紹 46
2.3.1 工作界面的簡單介紹 46
2.3.2 編程中的常用操作 54
2.3.3 本文所用常量的出處 58
第2部分 串口通信模式A-1
第3章 單片機編程A-1 66
3.1 通信協定 66
3.1.1 起止式異步協定的實例 66
3.1.2 字元幀的格式 67
3.1.3 數據包Ⅰ中各位元組的意義 67
3.1.4 數據包Ⅱ中各位元組的意義 68
3.1.5 具體的串口通信協定 69
3.2 兩個中斷函式的流程圖 72
3.3 單片機程式A-1 76
第4章 計算機編程A-1 100
4.1 項目的創建、視窗初始化 100
4.1.1 項目的創建 100
4.1.2 Resource.h檔案清單1 103
4.1.3 視窗初始化 103
4.2 自定義Comm選單 104
4.2.1 選單資源的添加 104
4.2.2 訊息映射1 105
4.2.3 由ClassWizard添加的代碼1 106
4.3 自定義Comm Setting對話框 110
4.3.1 對話框資源的添加 110
4.3.2 對話框內控制項的調整 114
4.3.3 Resource.h檔案清單2 115
4.3.4 關聯變數 116
4.3.5 訊息映射2 118
4.3.6 由ClassWizard添加的代碼2 119
4.4 文檔類中的數據成員 122
4.4.1 文檔類數據成員的說明 122
4.4.2 文檔類數據成員的添加 127
4.4.3 由ClassWizard添加的代碼3 129
4.4.4 文檔類數據成員的初始化 131
4.5 串列緩衝區的讀/寫函式 133
4.5.1 串列接收緩衝區的讀取函式 133
4.5.2 串列傳送緩衝區的寫入函式 135
4.6 工作者執行緒控制函式 137
4.6.1 全局函式ThreadFunction1 ( ) 的流程圖 137
4.6.2 串列接收緩衝區的讀取方法 138
4.6.3 全局函式ThreadFunction1 ( ) 的代碼清單 138
4.6.4 工作者執行緒的終止 141
4.6.5 continue語句的使用 142
4.7 選單項的UPDATE_COMMAND_UI訊息回響函式 143
4.8 WM_TIMER 訊息的回響函式 145
4.8.1 定時器的使用意義 145
4.8.2 WM_TIMER的訊息映射 146
4.8.3 函式CTianView :: OnTimer ( ) 的代碼清單 146
4.9 Connect選單項的COMMAND訊息回響函式 147
4.9.1 函式CTianDoc :: OnCommConnect ( ) 的流程圖 147
4.9.2 Microsoft Excel驅動程式的查看 148
4.9.3 常量定義1 149
4.9.4 函式CTianDoc :: OnCommConnect ( ) 的代碼清單 150
4.9.5 自定義函式CTianDoc :: Function_SetCommState ( ) 154
4.10 Start選單項的COMMAND訊息回響函式 157
4.10.1 函式CTianDoc :: OnCommStart ( ) 的流程圖 157
4.10.2 函式CTianDoc :: OnCommStart ( ) 的代碼清單 158
4.11 Setting選單項的COMMAND訊息回響函式 161
4.11.1 函式CTianDoc :: OnCommSetting ( ) 的流程圖 161
4.11.2 預包含檔案的添加 162
4.11.3 函式CTianDoc :: OnCommSetting ( ) 的代碼清單 163
4.12 自定義訊息WM_USER_1的回響函式 165
4.12.1 函式CTianView :: OnMessageUser1 ( ) 的流程圖 165
4.12.2 簡單說明 166
4.12.3 TianView.cpp檔案中的常量定義 167
4.12.4 函式CTianView :: OnMessageUser1 ( ) 的代碼清單 167
4.13 Stop選單項的COMMAND訊息回響函式 174
4.14 Disconnect 選單項的COMMAND訊息回響函式 175
4.15 文檔類析構函式 176
4.16 運行結果1 176
4.16.1 Comm Setting對話框的顯示效果 176
4.16.2 Connect選單項的執行結果1 177
4.16.3 Start選單項的執行結果1 177
4.17 採用EV_RXCHAR事件的執行結果 178
4.18 單片機採用for循環連續傳送字元的實驗 180
第3部分 自動化訪問Excel
第5章 單片機編程A-2 184
5.1 單片機接收兩個連續字元的分析 184
5.2 中斷函式UART0_ISR ( ) 的流程圖1 185
5.3 單片機程式A-2 187
第6章 計算機編程A-2 200
6.1 Excel類庫的導入 200
6.1.1 自動化編程步驟 200
6.1.2 初始化COM組件 200
6.1.3 Excel類庫的導入 201
6.2 文檔類中數據成員的添加 203
6.2.1 在文檔類中,添加操作Excel的類對象 203
6.2.2 新添加類對象的初始化 205
6.3 函式CTianDoc :: OnCommConnect ( ) 的代碼清單1 205
6.4 函式CTianDoc :: OnCommStart ( ) 的代碼清單1 208
6.4.1 在文檔類中,添加變數m_nFillingRow 208
6.4.2 變數m_nFillingRow的初始化 209
6.4.3 函式OnCommStart ( ) 的代碼清單1 209
6.5 函式CTianView :: OnMessageUser1 ( ) 的代碼清單1 217
6.6 函式CTianDoc :: OnCommStop ( ) 的代碼清單1 230
6.7 函式CTianDoc :: OnCommDisconnect ( ) 的代碼清單1 231
6.8 函式CTianView :: OnTimer ( ) 的代碼清單1 232
6.9 運行結果2 233
6.9.1 運行結果的示例 233
6.9.2 異常終止 234
6.9.3 VC採用自動化訪問Excel 2007的說明 235
第4部分 串口通信模式B
第7章 單片機編程B 238
第8章 計算機編程B 242
8.1 電腦程式簡單修改1 242
8.2 函式CTianView :: OnMessageUser1( ) 的修改1 243
8.2.1 流程圖的修改1 243
8.2.2 代碼的修改1 243
8.2.3 字元串中提取左側三個字元 252
8.2.4 運行結果3 253
第5部分 串口通信模式C-1
第9章 單片機編程C-1 256
9.1 通信協定1 256
9.1.1 通信協定的說明 256
9.1.2 數據包Ⅰ中各位元組的意義1 257
9.1.3 數據包Ⅱ中各位元組的意義1 257
9.2 兩個中斷函式的流程圖1 259
9.2.1 中斷函式ADC0_ISR ( ) 的流程圖1 259
9.2.2 中斷函式UART0_ISR ( ) 的流程圖1 260
9.3 單片機程式C-1 261
9.4 使用Excel生成多行相似代碼 284
第10章 計算機編程C-1 287
10.1 電腦程式簡單修改2 287
10.1.1 可依照8.1節的修改 287
10.1.2 在文檔類中,添加變數m_nGroupRightNo 287
10.1.3 變數m_nGroupRightNo的初始化 288
10.1.4 函式OnCommStart ( ) 的代碼修改 288
10.2 函式CTianView :: OnMessageUser1 ( ) 的修改2 289
10.2.1 流程圖的修改2 289
10.2.2 代碼的修改2 290
10.3 運行結果4 299
10.3.1 串列通信終止 299
10.3.2 降低傳輸流量 299
第6部分 串口通信模式C-2
第11章 單片機編程C-2 302
第12章 計算機編程C-2 310
附錄A 第2部分中“Comm | Start”選單項的運行結果 316
附錄B 第3部分中“Comm | Start”選單項的運行結果 317
附錄C 第4部分中“Comm | Start”選單項的運行結果 318
附錄D 第5部分中“Comm | Start”選單項的運行結果 319
附錄E 第6部分中“Comm | Start”選單項的運行結果 320
參考文獻 321
前言
採用Cygnal集成產品公司的C8051F020DK-U型單片機開發工具,僅需自製一條串列通信線,即可實現與一台計算機進行串口通信。在單片機程式設計中,開發工具採用C51程式語言;在電腦程式設計中,開發工具採用Visual C++ 6.0集成開發環境。為了易於代碼的理解,本書首先對C8051F020型單片機、Windows API串口通信函式及多執行緒等相關知識做簡單而必要的介紹。
本書中介紹的第一種串口通信模式,也是在同一時刻下,串列通信線路上僅有一個方向的數據傳輸;當串列通信流量較大、計算機的CPU使用率較高時,可能就會發生單片機部分測量值未被傳送給計算機的情況。在第二種串口通信模式下,可以保證單片機的測量值均被傳送給計算機,但未考慮數據通信錯誤時的重新傳輸。在第三種串口通信模式下,重新考慮了數據通信錯誤時的重新傳輸。
在本書中,編者分析並嘗試了單片機接收兩個連續字元的串口通信模式,且串口通信均正常。為使電腦程式具有一定的通用性,創建了一個串口通信參數的設定對話框,相關地,創建並使用了一個ini配置檔案。
採用C8051F020型單片機,測量了二路差分電壓量、四路單端電壓量,及其自身的片內溫度;在ADC中斷服務程式中,通過計數自身的執行次數,還精確記錄了單片機的上電時間、串列通信時間。單片機將各電壓量的四次ADC平均值、所記錄的兩個時間值等,串列傳送到計算機中,由計算機計算出實際的電壓值、溫度值,並存儲到以當前時刻命名的Excel檔案中。Visual C++ 6.0向Excel 2003檔案寫入數據,採用了兩種方法:ODBC、自動化。
本書由簡入繁,詳細闡述了三種串口通信模式。
第一種串口通信模式,見第2、3部分;第二種串口通信模式,見第4部分;第三種串口通信模式,見第5、6部分。編者花費了大量的時間及精力,以盡最大可能地對文中所涉內容進行註解。三種串口通信模式的程式代碼,後面一種都是以前面一種為基礎進行修改的,可加深讀者對代碼的理解,以及查看三種模式下代碼的差別之處。編程期間所經歷的錯誤,也列出了一二。願本書能夠給您帶來滿意的收穫。
在本書的出版過程中,得到了郭立總經理、符隆美編輯的有力支持,在此表示衷心的感謝。
由於編者能力、精力之所限,書中不妥之處在所難免,誠摯接受讀者的批評及指正
編著者
2012年10月
於中國石油集團·濟柴動力總廠