ImageVerifierCode 换一换
格式:DOCX , 页数:19 ,大小:3.71MB ,
资源ID:5779881      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/5779881.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(实验四串口通讯实验.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

实验四串口通讯实验.docx

1、实验四串口通讯实验实验四 基于WinCE 的Serial 应用开发一课时安排:4学时二实验目的 通过此次实验掌握基于串口编程的VS2005环境之下的Windows CE 6.0平台的Serial应用程序的开发,实现TQ6410 PDA开发套件和串口设备的通讯。三实验设备 (1)硬件: TQ6410 PDA开发套件 一套 PC机 一台(2)软件 Visual Studio 2005 Platform Builder for Windows CE 6.0 ActiveSync同步工具 TQ6410A_SDK四实验内容五实验原理串口是计算机与外部串行设备之间的数据传输通道,由于串行通信方便易行,因此

2、应用非常广泛。例如在工业自动化中,很多智能采集设备都是采用串口方式和PC 机进行通讯。在Windows CE 嵌入式系统中,串口依然是和外部设备进行通讯的重要方式,例如GPS 设备。目前很多PDA 都集成了蓝牙通讯功能,可以通过设置蓝牙通讯方式为串口方式,来和另外一端蓝牙设备进行通讯。作为一名Windows CE 程序编写人员,掌握串口编程知识,将会为日后工作提供极大的便利。“串行通信”是指外设和计算机间使用两根数据信号线(另外需要地线,可能还需要控制线) ,数据在一根数据信号线上一位一位地进行传输,每一位数据都占据一个固定的时间长度。这种通信方式使用的数据线较少,在远距离通信中可以节约通信成

3、本,而且其传输速度也不比并行传输的速度慢。相反的,“并行通信”是指一条信息的各位数据被同时传送。并行通讯的特点是:各数据位同时传送、传送速度快、效率高,但由于有多少数据位就需多少根数据线,因此传送成本较高,比较适用于近距离(相距数米)的通讯。 目前较为常用的串口有9 针串口(DB9 )和25针串口(DB25),当通信距离较近时(ResetContent(); for (int i=0; i AddString(strItem); pCmbComNo- SetCurSel(0); /com1: /波特率 pCmbComBaud- ResetContent(); pCmbComBaud- AddS

4、tring(L300 ); pCmbComBaud- AddString(L 600 ); pCmbComBaud- AddString(L 1200); pCmbComBaud- AddString(L 2400); pCmbComBaud- AddString(L 4800);pCmbComBaud- AddString(L 9600); pCmbComBaud- AddString(L 19200 ); pCmbComBaud- AddString(L 38400 ); pCmbComBaud- AddString(L 43000 ); pCmbComBaud- AddString(L

5、56000 ); pCmbComBaud- AddString(L 57600 ); pCmbComBaud- AddString(L 115200); pCmbComBaud- SetCurSel(11); /115200 /奇偶校验 pCmbComParity- ResetContent(); pCmbComParity- AddString(L None); pCmbComParity- AddString(L Odd ); pCmbComParity- AddString(L Even); pCmbComParity- SetCurSel(0); /None /数据位 pCmbComD

6、atabits- ResetContent(); pCmbComDatabits- AddString(L 8); pCmbComDatabits- AddString(L 7); pCmbComDatabits- AddString(L 6); pCmbComDatabits- SetCurSel(0); /8 /停止位 pCmbComStopbits- ResetContent(); pCmbComStopbits- AddString(L 1); pCmbComStopbits- AddString(L 1.5 ); pCmbComStopbits- AddString(L 2); pC

7、mbComStopbits- SetCurSel(0); /1 return TRUE; /*- * / 3 ) 实现“确定”按钮单击事件,用于保存设置好的参数。“确定”按钮单击事件代码如程序清单 11所示。 /*-程序清单 11- */ void DlgParams:OnBnClickedOk() / TODO: 在此添加控件通知处理程序代码 CString strTmp; CComboBox *pCmbComNo = (CComboBox*)GetDlgItem(IDC_CMB_COM_NO); CComboBox *pCmbComBaud = (CComboBox*)GetDlgItem

8、(IDC_CMB_COM_BAUD); CComboBox *pCmbComParity = (CComboBox*)GetDlgItem(IDC_CMB_COM_PARITY); CComboBox *pCmbComDatabits = (CComboBox*)GetDlgItem(IDC_CMB_COM_DATABITS);CComboBox *pCmbComStopbits = (CComboBox*)GetDlgItem(IDC_CMB_COM_STOPBITS); pCmbComBaud- GetWind owTextW(strTmp); m_portNo = pCmbComNo-G

9、etCurSel() + 1; /串口号 m_baud = _wtoi(strTmp); /波特率 m_parity = pCmbComParity-GetCurSel(); /奇偶校验 pCmbComDatabits- GetWindowTextW(strTmp); m_databits = _wtoi(strTmp); /数据位 m_stopbits = pCmbComStopbits- GetCurSel(); /停止位 /关闭对话框 OnOK(); /*- * / 4 ) 实现“取消”按钮单击事件。“取消”按钮单击事件代码如程序清单 12所示。 /*-程序清单 12- */ void

10、DlgParams:OnBnClickedCancel() / TODO: 在此添加控件通知处理程序代码 OnCancel(); /*- * /至此,串口参数输入对话框就实现完毕,下面将接着实现SerialDemo 应用程序主窗口。(4) 设计SerialDemo 应用程序主窗口。1) 设计主窗口样式如图4 所示。图4 “SerialDemo”主窗口样式对话框上的控件及其属性设置如表10 所示。表10 SerialDemo 主界面控件及其属性设置表2) 在解决方案中添加CCESeries 类,然后为CSerialDemoDlg 类添加m_pSerial 成员变量,类型为之前创建的CCESeri

11、es 类。定义如下:public: CCESeries *m_pSerial; / 串口对象指针 在Serial DemoDlg .h 文件添加对 CCESeries 类的引用。 #include CESeries.h 3 ) 实现“打开串口”按钮事件。用户单击“打开串口”按钮,将首先打开串口参数输入对话框,根据选择的串口参数,打开指定的串口,具体实现如程序清单13所示。 /*-程序清单 13-*/ /打开串口 void CSerialDemoDlg:OnBnClickedBtnOpen() /判断串口是否已经打开 if (m_pSerial != NULL) m_pSerial- Close

12、Port(); delete m_pSerial; m_pSerial = NULL; /串口参数输入对话框 CDlgParams dlgParams; if (dlgParams.DoModal() = IDOK) /新建串口通讯对象 m_pSerial = new CCESeries(); m_pSerial- m_OnSeriesRead = OnSerialRead;/打开串口 if (m_pSerial- OpenPort( this , dlgParams.m_portNo, dlgParams.m_baud, dlgParams.m_parity, dlgParams.m_dat

13、abits, dlgParams.m_stopbits) AfxMessageBox(L串口打开成功); else AfxMessageBox(L串口打开失败); /*- * /备 注:由 于 如 上 代 码 引 用 了 CDlgParams 类,所 以 应 该 在S erialDemoDl g.cpp 文件中添加对CDlgParams类定义文件的引用。 #include DlgParams.h4) 实现“关闭串口”按钮事件,用于关闭指定的串口并释放相应串口对象。具体实现如程序清单14 所示。/*-程序清单 14- */ /关闭串口 void CSerialDemoDlg:OnBnClicke

14、dBtnClose() if (m_pSerial != NULL) /关闭串口 m_pSerial- ClosePort(); /释放串口对象 delete m_pSerial; m_pSerial = NULL; /*- * /5) 实现“发送数据”按钮事件,用于将待发送的数据写入到串口中,以便传输到串口的另一端,具体实现如程序清单15 所示。/*-程序清单 15- */ /发送数据 void CSerialDemoDlg:OnBnClickedBtnSend() char * buf =NULL; / 定义发送缓冲区DWORD dwBufLen = 0; / 定义发送缓冲区长度 CStr

15、ing strSend = L; /得到发送输入框 CEdit *pEdtSendMsg = (CEdit*)GetDlg Item(IDC_EDT_SEND); ASSERT(pEdtSendMsg != NULL); /串口如果没有打开,直接返回 if (m_pSerial = NULL) AfxMessageBox(L串口未打开); return; /得到待发送的字符串 pEdtSendMsg- GetWindowTextW(strSend); /将待发送的字符串转换成单字节,进行发送 buf = new ch ar strSend.GetLength()*2+1; ZeroMemory

16、(buf,strSend.GetLength()*2+1); /转换成单字节进行发送 WideCharToMultiByte(CP_ACP,WC_COMPOSITECHECK,strSend.GetBuffer(strSend.GetLength(),strSend.GetLength(),buf,strSend.GetLength()*2,NULL,NULL); dwBufLen = strlen(buf) + 1; /发送字符串 m_pSerial- WriteSyncPort(BYTE*)buf,dwBufLen); /释放内存 delete buf; buf = NULL; /*- *

17、 /6) 实现CCESeries 定义的接收数据回调函数,用于接收数据。由于该回调函数是在读线程中工作的,因此这里将接收到的数据通过Windows 消息转发给主窗口,由主窗口消息函数来做显示处理。为类CSerialDemoDlg 添加OnSerialRead 私有方法,定义如下:private: /定义串口接收数据函数类型 static void CALLBACK OnSerialRead(void * pOwner,BYTE* buf,DWORD bufLen);OnSerialRead 函数的实现如程序清单16所示。/*-程序清单 16-*/ unsigned char m_uartRxL

18、ength = 0; unsigned char m_uartRxBuffer255;/定义串口接收数据函数类型 void CALLBACK CSerialDemoDlg:OnSerialRead(void * pOwner,BYTE* buf,DWORD bufLen) /得到父对象指针 CSerialDemoDlg* pThis = (CSerialDemoDlg*)pOwner; C opyMemory(m_uartRxBuffer + m_uartRxLength, buf, bufLen); m_uartRxLength += bufLen; /发送异步消息,表示收到串口数据,消息处

19、理完,应释放内存 pThis- PostMessage(WM_RECV_SERIAL_DATA,WPARAM(m_uartRxBuffer),m_uartRxLength); /*- -* /7) 实现WM_RECV_SERIAL_DATA 消息处理函数。OnSerialRead 回调函数中将接收到的数据,通过WINDOWS 消息异步发送出去。这样就需要在CSerialDemoDlg 对话框中实现此消息处理,将接收到的数据显示到主窗口的接收框中,具体实现如下: 首先在Serial DemoDlg.h 文件中添加WM_RECV_SERIAL_DATA 消息常量定义。/定义串口数据接收消息常量 #define WM_RECV_SERIAL_DATA WM_USER + 101 然后,为CSerial DemoDlg 类添加如下自定义消息处理函数定义: /串口接收数据处理函数 afx_msg LONG OnRecvSerialData(WPARAM wParam,LPARAM lParam); 备注:该定义可添加在DECLARE_M

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1