pc机与89C51单片机的串口通信编程.docx

上传人:bao****ty 文档编号:144892911 上传时间:2020-09-14 格式:DOCX 页数:8 大小:57.40KB
返回 下载 相关 举报
pc机与89C51单片机的串口通信编程.docx_第1页
第1页 / 共8页
pc机与89C51单片机的串口通信编程.docx_第2页
第2页 / 共8页
pc机与89C51单片机的串口通信编程.docx_第3页
第3页 / 共8页
pc机与89C51单片机的串口通信编程.docx_第4页
第4页 / 共8页
pc机与89C51单片机的串口通信编程.docx_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《pc机与89C51单片机的串口通信编程.docx》由会员分享,可在线阅读,更多相关《pc机与89C51单片机的串口通信编程.docx(8页珍藏版)》请在金锄头文库上搜索。

1、一、pc机上的串口通信编程过程如下:1.建立项目打开VC6.0,建立一个基于对话框的MFC应用程序SCommTest(与我源代码一致,等会你会方便一点);2.在项目中插入MSComm控件 选择Project菜单下Add To Project子菜单中的 Components and Controls选项,在弹出的对话框中双击Registered ActiveX Controls项(稍等一会,这个过程较慢),则所有注册过的ActiveX控件出现在列表框中。 选择Microsoft Communications Control, version 6.0,单击Insert按钮将它插入到我们的Proje

2、ct中来,接受缺省的选项。(如果你在控件列表中看不到Microsoft Communications Control, version 6.0,那可能是你在安装VC6时没有把ActiveX一项选上,重新安装VC6,选上ActiveX就可以了),这时在ClassView视窗中就可以看到CMSComm类了,(注意:此类在ClassWizard中看不到,重构clw文件也一样),并且在控件工具栏Controls中出现了电话图标(如图1所示),现在要做的是用鼠标将此图标拖到对话框中,程序运行后,这个图标是看不到的。3.利用ClassWizard定义CMSComm类控制对象 打开ClassWizardMe

3、mber Viariables选项卡,选择CSCommTestDlg类,为IDC_MSCOMM1添加控制变量:m_ctrlComm,这时你可以看一看,在对话框头文件中自动加入了/AFX_INCLUDES() #include mscomm.h /AFX_INCLUDES (这时运行程序,如果有错,那就再从头开始)。4.在对话框中添加控件 向主对话框中添加两个编辑框,一个用于接收显示数据ID为IDC_EDIT_RXDATA,另一个用于输入发送数据,ID为IDC_EDIT_TXDATA,再添加一个按钮,功能是按一次就把发送编辑框中的内容发送一次,将其ID设为IDC_BUTTON_MANUALSEN

4、D。别忘记了将接收编辑框的PropertiesStyles中把Miltiline和Vertical Scroll属性选上,发送编辑框若你想输入多行文字,也可选上Miltiline。再打开ClassWizardMember Viariables选项卡,选择CSCommTestDlg类, 为IDC_EDIT_RXDATA添加CString变量m_strRXData, 为IDC_EDIT_TXDATA添加CString变量m_strTXData。说明: m_strRXData和m_strTXData分别用来放入接收和发送的字符数据。5.添加串口事件消息处理函数OnComm() 打开ClassWiza

5、rdMessage Maps,选择类CSCommTestDlg,选择IDC_MSCOMM1,双击消息OnComm,将弹出的对话框中将函数名改为OnComm,(好记而已)OK。这个函数是用来处理串口消息事件的,如每当串口接收到数据,就会产生一个串口接收数据缓冲区中有字符的消息事件,我们刚才添加的函数就会执行,我们在OnComm()函数加入相应的处理代码就能实现自已想要的功能了。请你在函数中加入如下代码: void CSCommTestDlg:OnComm() / TODO: Add your control notification handler code hereVARIANT varian

6、t_inp;COleSafeArray safearray_inp;LONG len,k;BYTE rxdata2048; /设置BYTE数组 An 8-bit integerthat is not signed.CString strtemp;if(m_ctrlComm.GetCommEvent()=2) /事件值为2表示接收缓冲区内有字符 /以下你可以根据自己的通信协议加入处理代码variant_inp=m_ctrlComm.GetInput(); /读缓冲区safearray_inp=variant_inp; /VARIANT型变量转换为ColeSafeArray型变量len=safea

7、rray_inp.GetOneDimSize(); /得到有效数据长度for(k=0;klen;k+)safearray_inp.GetElement(&k,rxdata+k);/转换为BYTE型数组for(k=0;kMessage Maps,选择类CSCommTestDlg,选择IDC_BUTTON_MANUALSEND,双击BN_CLICKED添加OnButtonManualsend()函数,并在函数中添加如下代码:void CSCommTestDlg:OnButtonManualsend() / TODO: Add your control notification handler co

8、de hereUpdateData(TRUE); /读取编辑框内容m_ctrlComm.SetOutput(COleVariant(m_strTXData);/发送数据二、单片机89C51串口通信的C语言程序:每当pc机通过串口向单片机发送一非0数据,单片机就通过串口向pc机发送数字09#include reg51.h/数码管字型码unsigned int ds_code18 = 0x3F,0x06,0x5B, /0,1,20x4F,0x66,0x6D, /3,4,50x7D,0x07,0x7F, /6,7,80x6F,0x77,0x7C, /9,A,B0x39,0x5E,0x79, /C,D

9、,E0x71,0x76,0x73; /F,H,P/数码管控制端sbit ds = P10;/字型码锁存器74ls373的控制端LEsbit ctrl373 = P37;/要显示的数据unsigned int dsData = 0;/发送标志:标示是否向pc机发送数据bit send = 0;/数码管显示函数void display(unsigned int Data)ctrl373 = 1;ds = 1;P2 = ds_codeData;ds = 0;ctrl373 = 0;/串口中断函数void serialPort() interrupt 4/循环的向pc机发送09if (TI = 1 & send = 1)/发送数据/清除发送中断申请标志TI = 0;send = 0;dsData+;if (dsData 9)dsData = 0;/以ASCII方式发送数据SBUF = dsData + 48;if (RI = 1)/接收数据/清除接收中断申请标志RI = 0;/接收到得数据为ASCII码形式,需做减8处理/若从pc机接收到一非0数据,就将send置1,向pc机发送1字节数据send = SBUF - 48;void main()EA = 1;

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 其它相关文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号