freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內容

基于pda的藍牙通訊程序設計畢業(yè)論文(編輯修改稿)

2025-07-15 17:28 本頁面
 

【文章內容簡介】 總容量可以超過64KB)。對于代碼之外的所有事物,應用程序也受到大約160KB的堆、或動態(tài)存儲空間的限制。與Pocket PC操作系統(tǒng)一樣,Palm應用程序使用一些內存來保存狀態(tài)信息,所以也不是所有的內存空間都用于存儲數(shù)據(jù)。因為任何超過可用內存容量的PDA應用程序都將立即停止,所以了解內存管理是至關重要的。鑒于工業(yè)現(xiàn)場通信的特點和各個操作系統(tǒng)的內存管理特點,本文采用Pocket PC操作系統(tǒng)。3 Visual Stdio 2008環(huán)境下的PDA Windows應用程序設計 MT1020A端的軟件設計單片機端的軟件在Keil 平臺下進行嵌入式C 編程實現(xiàn), 傳輸層采用UART,單片機通過UART 控制藍牙模塊。軟件包括初始化, 藍牙交互, 處理數(shù)據(jù)三個模塊。 初始化初始化包括系統(tǒng)初始化和藍牙初始化。系統(tǒng)初始化包括CPU 時鐘初始化, 管腳分配, 串口初始化等,藍牙初始化是通過UART 給藍牙模塊發(fā)送一系列初始化命令, 藍牙模塊返回事件, 交互完成一系列的復位, 鑒權, 讀地址等初始化操作。初始化程序主函數(shù)如下:main( ) 主函數(shù)sys_init( ) 系統(tǒng)初始化, 包括設置看門狗, 初始化時鐘, 鍵盤及液晶, 配置端口bt_init( ) 藍牙初始化uart_init( ) 串口0 初始化, 包括設工作方式, 開中斷, 設波特率, 開定時器1[9]。限于篇幅,具體主程序的編寫不再贅述。 藍牙交互通信就是初始化完成后若本地藍牙作從設備, 則等待遠端藍牙設備的建鏈請求, 如果接受請求, 則繼續(xù)等待建鏈成功, 獲得一個連接句柄, 從而進行數(shù)據(jù)交換, 若本地藍牙作主設備, 則通過一系列主動查詢, 建鏈, 發(fā)送數(shù)據(jù), 斷鏈等操作處理數(shù)據(jù)就是將數(shù)據(jù)顯示在與單片機相連的LCD 上等一系列后續(xù)操作[J]。程序流程圖如圖8示。圖8 單片機端程序設計流程圖藍牙交互部分的程序主函數(shù)如下:bt_inquiry( ) 搜索附近藍牙設備bt_create_connection( ...) 與指定藍牙設備建立連接bt_send_acl_data( ...) 發(fā)送ACL 數(shù)據(jù)bt_disconnection( ...) 與指定藍牙設備斷開連接 處理數(shù)據(jù)數(shù)據(jù)結構方面, 程序按照HCI 規(guī)范構造了HCI指令分組cmd_pkt, HCI 事件分組event_pkt 和HCIACL 數(shù)據(jù)分組acl_pkt 的數(shù)據(jù)結構, 并設計了用于標識當前藍牙設備的hci_device 結構體, 包括藍牙設備配置信息hci_info, 藍牙連接信息hci_con 和用于存儲返回分組信息的接收緩沖區(qū)hci_buf[1000], 具體如圖9所示。圖9 核心數(shù)據(jù)結構圖軟件采用前后臺的方式實現(xiàn), 前臺運行主程序,后臺定時循環(huán)調用HCI 狀態(tài)機。HCI 狀態(tài)機是一個子程序, 用來專門處理藍牙模塊返回的HCI 事件分組和HCI 數(shù)據(jù)分組。狀態(tài)機通過分析HCI 事件分組來決定相應操作, 獲取相關信息, 通過分析HCI 數(shù)據(jù)分組, 來接收實際傳輸數(shù)據(jù)并存儲到接收緩沖區(qū)。具體的HCI 狀態(tài)機的處理流程如圖10所示。圖10 HCI狀態(tài)機HCI 狀態(tài)機初始狀態(tài)置為IDLE_STATE, 根據(jù)HCI UART 傳輸層格式規(guī)范, 按字段取藍牙模塊返回的各個字節(jié), 每個字節(jié)為一個十六進制數(shù), 不同的數(shù)代表不同的含義。第一個字節(jié)為分組指示器, 標識分組的類型。ACL 數(shù)據(jù)分組為ACL_PKT( 0x02) , SCO數(shù)據(jù)分組為SCO_PKT( 0x03) , 事件分組為EVT_PKT( 0x04) , 另外指令分組為CMD_PKT( 0x01) , 藍牙模塊只返回ACL, SCO 和事件分組。取出第一個字節(jié)判斷出分組類型。若為事件分組, 則狀態(tài)機轉換為EVENT_HDR_STATE 狀態(tài), 繼續(xù)取字節(jié), 讀出事件碼和參數(shù)長度后, 轉換到EVENT_DATA_STATE 狀態(tài), 表示再來的字節(jié)即為事件參數(shù), 讀取事件參數(shù),并調用process_event ( ) 處理事件, 完成后回到IDLE_STATE 狀態(tài)。若為ACL 數(shù)據(jù)分組, 則先轉換為ACL_HDR_STATE 狀態(tài), 取出連接句柄, 轉換為ACL_DATA_STATE 狀態(tài), 處理后續(xù)來的數(shù)據(jù), 即為實際接收到的數(shù)據(jù), 完成后回到IDLE_STATE 狀態(tài)。若為SCO 數(shù)據(jù)分組, 類同ACL 數(shù)據(jù)分組的處理過程。HCI 狀態(tài)機要通過系統(tǒng)預先設定的一個定時器定時循環(huán)調用, 雖然HCI 從UART 得到的數(shù)據(jù)流是一塊一塊的, 有可能剛好是一個分組, 有可能是幾個分組, 還可能是一個分組的部分數(shù)據(jù), 但狀態(tài)機對接收到的一塊數(shù)據(jù)流的處理是連續(xù)進行的, 數(shù)據(jù)流的間斷只會造成狀態(tài)機的暫時等待, 而不會影響其正確處理返回分組。如中途出現(xiàn)分組丟失或錯誤的字段, 狀態(tài)機會報錯并重新置回初始態(tài)[10]。狀態(tài)機數(shù)據(jù)處理部分的程序主函數(shù)如下:hci_state_machine( ) hci 狀態(tài)機, 定時器3 定時10ms 中斷調用hci_buf_put_ch( ) uart0 中斷接收藍牙模塊返回數(shù)據(jù), 放入hci_data_buf[1000]hci_buf_get_ch( ) 從hci_data_buf[1000]讀取一個字符待狀態(tài)機分析hci_reset( ...) 復位命令, 組合命令分組, 調用send_cmd( ) 發(fā)送給藍牙模塊? 類同hci_reset, hci 共4 大類命令: 鏈路管理/ 鏈路策略/ 主機控制器/ 信息參數(shù)get_opcode( ...) 將ogf 和ocf 組合成操作碼opcodele_u16_to_u16( ...) 實現(xiàn)反位序即大小模式轉換send_cmd( ...) 將指定長度的hci 指令送入指令發(fā)送緩沖區(qū)并調用uart_send_str()發(fā)送出去uart_send_ch(...) 發(fā)送一個字符uart_send_str(...) 發(fā)送一個指定長度的字符串 PDA端的軟件設計目前,國內PDA 基本采用Windows Mobile 操作系統(tǒng)。Windows Mobile 系統(tǒng)是Microsoft 公司為智能移動終端設備設計的嵌入式操作系統(tǒng),基于Windows Mobile 操作系統(tǒng)的智能終端設備分Smart Phone 和Pocket PC 兩大類。其中,Smart Phone 為智能手機系統(tǒng), Pocket PC 為個人掌上電腦?,F(xiàn)在,很多Pocket PC 也加入電話功能成為Pocket PC Phone。Windows Mobile 2003 中內置. Net Compact Framework CF ,方便開發(fā)人員對Windows 智能移動終端設備的開發(fā)。Microsoft 也為Windows CE 提供了很多設備開發(fā)工具,如近年來發(fā)展迅速的Visual Studio 2008 中的Visual C 。Visual C 2008 為開發(fā)在基于Windows CE的智能設備(如Pocket PC 和Smart phone) 上運行的軟件提供豐富的集成支持,可以使用開發(fā)PC 程序時所使用的相同代碼編輯器、設計器和調試器界面,它還提供仿真程序,讓我們可以在開發(fā)計算機上運行和調試編寫的代碼。Visual C 2008 中的SerialPort 類控制串口資源非常方便,因此,本文選用Visual C 2008 來編寫藍牙串口通信程序。藍牙串口通信的基本流程包括配置資源參數(shù)、打開串口資源、通信讀寫操作和關閉串口資源[11]。在Windows CE 系統(tǒng)中,串口與其他通信設備是作為文件進行處理的。本文對藍牙串口進行操作用到了C 2008 中的SerialPort 類,此類在. NET Framework 2. 0 版本中是新增的,用于控制串口文件資源。初始化SerialPort類實例和配置資源參數(shù)方法如下:namespace BlueTooth_RS232_{ public partial class FormMain : Form //窗體 { public FormMain() { InitializeComponent()。 //窗體初始化 } private ComPort Port = new ComPort()。 //COM端口實例化 private void FormMain_Load(object sender, EventArgs e) { ()。 //設置菜單 } private void SetMenu(ComPort Port) { switch () //選擇COM端口 { case COM1: = true。 = false。 = false。 = false。 = false。 = false。 = false。 = false。 break。 …… default: = true。 //默認值設為COM1 = false。 = false。 = false。 = false。 = false。 = false。 = false。 break。 }……波特率、停止位、校驗位等參數(shù)的設置方法和端的設置基本類似,限于篇幅,不再贅述。 打開串口資源打開串口資源在串口參數(shù)配置正確的情況下,只需調用SerialPort類的Open 方法即可打開串口連接。方法如下:try { if (!) ()。 //打開串口 } PDA通信讀寫操作在成功設置通信參數(shù)并打開串口連接后,可采取事件觸發(fā)的方式對數(shù)據(jù)進行接收與發(fā)送處理。本文使用SerialPort 類的DataReceived 事件方法來處理SerialPort 對象的數(shù)據(jù)接收事件,同時還要用到SerialDataReceivedEvent Handler 委托來處理SerialPort 對象的DataReceived 事件,使用SerialPort類中的DataWrite事件方法來處理數(shù)據(jù)的發(fā)送。由于MT1020A端、PC端與PDA端所發(fā)送或接收的信號均為二進制所轉化成的ASCII碼,所以發(fā)送與接收信號時存在一個數(shù)據(jù)的編碼與解碼的過程[12]。具體方法如下:private StringBuilder buffer = new StringBuilder()。 //緩存實例化 private void serialPort_DataReceived(object sender, e) { byte[] recBytes = new byte[]。 (recBytes, 0, )。 //讀取ASCII碼數(shù)據(jù) string recString = (recBytes, 0, )。//數(shù)據(jù)解碼 (recString)。 //將數(shù)據(jù)重載入緩存 } private void timer_Tick(object sender, EventArgs e) //將數(shù)據(jù)從緩存?zhèn)魉偷浇邮諈^(qū) { if () /
點擊復制文檔內容
試題試卷相關推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1