PC机与单片机的串行通讯.pdf

PC机与单片机的串行通讯

收藏

压缩包内文档预览:
预览图 预览图
编号:512419    类型:共享资源    大小:63.82KB    格式:ZIP    上传时间:2015-11-11 上传人:QQ28****1120 IP属地:辽宁
6
积分
关 键 词:
毕业设计
资源描述:
PC机与单片机的串行通讯,毕业设计
内容简介:
- 130 -中国科技信息 2005 年第 10 期 CHINA SCIENCE AND TECHNOLOGY INFORMATION May.2005工 程 论 坛在以单片机为基础的数据采集和实时控制系统中, 通过 PC 机的 RS-232 口进行计算机与单片机的数据通信, 就可以组成简单的检测和控制系统。 而 VC+6.0 的基础类库 ( MFC ) 封装了 API 中的标准通信函数, 可以方便的进行串口通信。 本文主要介绍在利用 API 函数进行串口通信中如何结合非阻塞通信、 多线程等手段, 编写出高质量的通信程序。 特别是在 CPU处理任务比较繁重、 与外围设备中有大量的通信数据时, 更有实际意义。1 , 系统组成系统中采用 89C51 单片机作为下位机, 运行 Windows98 的 PC 机作为上位机, 二者通过RS-232 串行口进行通信。 传输介质为二芯屏蔽电缆。 由于 RS-232 信号电平和单片机串口信号的电平不一致, 必须进行二者之间的电平转换。在本设计中采用集成电平转换芯片 MAX232 进行 RS-232/TTL 电平转换。2 , 通信协议上位机读取 (发送) 数据时, 由上位机先发送字母 “ R ” (“ W ”), 通知单片机计算机已准备好, 然后计算机在事件驱动 I/O 方式下等待接收到字符 “ Y ” ; 当单片机接收到 “ R ” (“ W ”),时, 向计算机发送 “ Y ”, 表示单片机也已准备好, 这样, 一旦计算机接收到 “ Y ” 就表示双方都已准备好, 二者之间就可以进行数据交换了。3 , 程序设计3.1 , 上位机的串口通信程序Windows 提供了两种线程, 辅助线程和用户界面线程。 区别在于 : 辅助线程没有窗口, 所以它没有自己的消息循环。 我们使用辅助线程,主要用它来监视串口状态 ; 而主线程则可专心进行数据处理、 提供友好的用户界面等重要的工作。 注意辅助线程和用户界面线程必须同步。所谓的非阻塞通信, 也即异步通信。 是指在进行需要花费大量时间的数据读写操作 (不仅仅是指串行通信操作) 时, 一旦调用 ReadFile() 、 WriteFile(), 就能立即返回, 而让实际的读写操作在后台运行 ; 相反, 如使用阻塞通信, 则必须在读或写操作全部完成后才能返回。 由于操作可能需要任意长的时间才能完成, 不能实现实时控制。 非常阻塞操作还允许读、 写操作能同时进行 (即重叠操作), 在实际工作中非常有用。 下面是一些常用的函数 :CreateFile(szDevice,fdwAccess,fdwShareMode,lpsa,fdwCreate,fdwAttrsAndFlags,hTemplateFile)ReadFile(hComm,inbuff,nBytes,&nBytesRead,&overlapped)WriteFile(hComm,outbuff,nBytes,&nBytesWrite,&overlapped)GetOverlappedResult(HANDLE hFile,LPOVERLAPPED lpOverlapped,LPDWORD lpcbTransfer,BOOL fWait)要使用非阻塞通信, 首先在调用 CreateFile() 函数打开串口时, 参数 fdwAttrsAndFlags 使用 FILE FLAG OVERLAPPED ; 然后在调用ReadFile() 函数读串口时, lpOverlapped 参数指定一个 OVERLPAAED 结构, 使数据的读写操作在后台进行, 接着通过调用GetOverlappedResult() 函数并为其参数 fWait 传入 TRUE 来挂起辅助线程直到操作执行结束。WriteFile() 函数的使用类似。 下面为上位机通信程序部分代码 :(1) 自定义消息#define WM COMM READ WMUSER+101ON MESSAGE(WM COMM READ,OnCommRead);/ 消息映射入口LONG OnCommRead(UINT wParam,LONG lParam);/ 消息响应函数说明(2) 在中 MainFrm.cpp 定义全局变量HANDLE hCom; / 准备打开的串口的句柄HANDLE hCommWatchThread ;/ 辅助线程的全局函数(3) 打开串口, 设置串口hCom =CreateFile( COM2, GENERICREAD | GENERIC WRITE, / 允许读写0, NULL, OPEN EXISTING, / 设置产生方式FILE FLAG OVERLAPPED, / 使用异步通信 (非阻塞通信)NULL );if(hCom=INVALID HANDLE VALUE)MessageBox( 打开串口失败! , 警告 ,MB OK);SetCommMask(hCom, EV RXCHAR);/ 设置事件驱动的类型SetupComm( hCom, 1024,512) ;PurgeComm( hCom, PURGE TXABORT| PURGE RXABORT | PURGE TXCLEAR| PURGE RXCLEAR );COMMTIMEOUTS CommTimeOuts ; / 定义超时结构, 并填写该结构SetCommTimeouts( hCom,&CommTimeOuts ) ;/ 设置读写操作所允许的超时DCB dcb ;GetCommState(hCom, &dcb ) ; / 读串口原来的参数设置dcb.BaudRate =9600; dcb.ByteSize =8;dcb.Parity = NOPARITY;dcb.StopBits = ONESTOPBIT ;dcb.fBinary= TRUE ;dcb.fParity = FALSE;SetCommState(hCom, &dcb ) ; / 串口参数配置(4) 启动一个辅助线程, 用于串口事件的处理。hCommWatchThread=CreateThread(NULL,0,(LPTHREAD START ROUTINE)CommWatchProc, / 线程的全局函数GetSafeHwnd(), / 此处传入了主框架的句柄0, &dwThreadID );ASSERT(hCommWatchThread!=NULL);(5) 为辅助线程写一个全局函数, 主要完成数据接收的工作。UINT CommWatchProc(HWNDhSendWnd)DWORD dwEvtMask=0 ;SetCommMask( hCom, EV RXCHAR);/ 有哪些串口事件需要监视 ?while(1)WaitCommEvent( hCom, &dwEvtMask,os );/ 等待串口通信事件的发生if (dwEvtMask & EV RXCHAR) =EV RXCHAR) / 缓冲区中有数据到达COMSTAT ComStat ; DWORDdwLength;ClearCommError(hCom, &dwErrorFlags,&ComStat ) ;dwLength = ComStat.cbInQue ;if (dwLength 0) BOOL fReadStat ; fReadStat = ReadFile( hCom, lpBuffer ,dwLength, &dwBytesRead,&READ OS( npTTYInfo ) ); / 读数据GetOverlappedResult(hCom,&READ OS( npTTYInfo ), &dwBytesRead, TRUE ); :PostMessage(HWND)hSendWnd,WM COMM READ,0,0);/ 通知主线程,串口收到数据return 0; PC 机与单片机的串行通讯张淑云 黑龙江农垦通信有限公司八五二通信中心孙江北 黑龙江白桦清选机械有限公司霍志明 黑龙江农垦通信有限公司八五二通信中心摘 要 : 基于 32 位操作系统 Windows98 的 PC 机与 AT89C51 单片机的串口通信, 上位机通信程序采用 VC+6.0 结合非阻塞通信、 多线程等技术编写。 单片机采用中断方式进行数据传送关键词 : 串行通信 ; 单片机 ; 非阻塞通信 ; API 接口 ; 多线程nts- 131 -中国科技信息 2005 年第 10 期 CHINA SCIENCE AND TECHNOLOGY INFORMATION May.2005工 程 论 坛(6) 在主线程中发送下行命令。BOOL fWriteStat ; char szBuffercount;fWriteStat = WriteFile(hCom, szBuffer,dwBytesToWrite,&dwBytesWritten, &WRITE OS(npTTYInfo ) ); / 写数据GetOverlappedResult(hCom,&READ OS( npTTYInfo ), &dwBytesRead, TRUE );(7) WM COMM READ 消息响应函数LONG OnCommRead(UINT wParam,LONG lParam)/ 主线程对从下位机接受来的数据进行处理3.2 , 单片机通信编程实时控制中, 由于事件的突发性, 常采用中断的方式进行数据传送, 中断方式能更大限度地提高资源的利用率, 使 CPU 在不进行数据通信时做其他的工作。 下面重点介绍单片机在方式 1 下的中断方式编程。方式 1 是 10 位异步通信方式, 其中包括 1 个起始位, 8 个数据位和 1 个停止位。 波特率由定时器 T1 的溢出率和串口控制寄存器 SMOD 的状态确定, 在 CPU 的晶振为 11.0592MHz 时,波特率常采用 9600b/s 。对 SBUF 进行写操作就可启动发送, 在发送移位时钟的同步下, 从 TXD 先送出起始位, 然后是 8 位数据位, 最后是停止位, 这样, 1 帧数据发送完, 中断标志 TI 置位。在允许接收的条件下 (REN 1) , 当 RXD出现由 1 到 0 的负跳变时, 即被当成是串行发送来的 1 帧数据的起始位, 从而启动 1 次接收过程。当 8 位数据接收完, 并检测到高电平停止位后,即把收到的 8 位数据装入 SBUF , 置位 RI , 1 帧数据的接收过程就完成了。ORG 0000HAJMP STARTORG 0023H ; 串行中断入口LJMP S&RORG 0100HSTART:MOV TMOD,#20H ; 设置定时器 T1 方式2MOV PCON,#00H ; 使 SMOD 为 0MOV TH1,#0FDH ; 波特率为 9600b/sMOV TL1,#0FDHSETB EA ; 开全局中断CLR ET1 ; 关 T1 中断SETB ES ; 开串行中断SETB TR1 ; 开 T1 定时MOV SCON,#50H ; 串行方式 1 , 允许接收SJMP$S&R:MOV C,RIJC RECTIVE ; RI 为 1 , 执行接收子程序SJMP SEND ; 否则, 执行发送子程序RECTIVE: ; 接收数据MOV A,SBUFCLR RICJNE A,#52H,REC1 ; 是否接收到 “ R ”LJMP REC2REC1:CJNE A,#57H,REC ; 是否接收到 “ W ”REC2:MOV A,#59H ; 发送 “ Y ”MOV SBUF,ASJMP ENDPROREC:MOV R1,A ; R1 为接收数据存放地址INC R1SJMP ENDPROSEND:MOV A,R0 ; 发送数据, R0 为存放数据的地址MOV SBUF,AJNB TI,$CLR TIINC R0ENDPRO:RETI ; 中断返回4 , 结束语串口通信是一种广泛应用于各个领域的通信方式, 由于目前大部分计算机都安装了Windows98 操作系统, 所以本文具体实现了在Windows98 下利用它的 SDK 函数来与单片机进行串口通信。 本文所提出的实现函数在所有当前流行软件如 VC+ 、 Delphi 等中都可实现。 它不仅可以用于近距离的 RS-232 通信, 而且, 还可以实现中远距离 RS-485 通信。 在使用该程序的通信系统中, 近远距离的通信都取得良好的效果。参考文献1 , Jeffrey Richter 著, 郑全战, 阿夏等译 .WINDOW95 NT3.5 高级编程技术 . 北京 : 清华大学出版社 19972 , 陈光东, 赵性初 . 单片微型计算机原理与接口技术 . 武汉 : 华中理工大学出版社 19933 , 李朝青 PC 机及单片机数据通信技术 . 北京航空航天大学出版社 2000了 RSS 0.9x/2.0 和 RSS 1.0 两个阵营, 也由此引起了在专业人群中的广泛争论。三、 我国 RSS 的发展现状和未来现今美国的 RSS 技术正在高速发展, 美国市场调查数据统计公司 eMarketer 认为2005 年将是 RSS 、 VoIP 及其他技术迎来大发展的一年, 而我国 RSS 技术的普及和市场的发展正处于启蒙时期, 广大网民对 RSS 还比较陌生。 据看天下不完全推算, 目前国内的RSS 用户数大约在 20 万左右, 且国内的 RSS内容提供商数目也还不是很多, 目前由看天下整理的中文 RSS 地址目录中显示大约有500 家网站提供了 RSS 内容。 可见我国 RSS技术的在未来的快速发展是存在着巨大潜力的。RSS 技术在中国大众互联网中的普及是有其基础和必然性的。 首先, 大量新网站和内容源的不断涌现和用户获取信息口味的多样化使 RSS 作为个性化聚合内容的最佳手段得到越来越多的用户的重视。 其次, 越来越多的内容提供者为推广自身品牌, 获得更大客户群而纷纷推出 RSS 服务, 以期为他们的内容带来更大的流量和知名度。 再其次, 目前的商业门户网站出于自身商业利益的考虑,把用户信息获取的环境搞得日益恶劣, 弹出广告、 垃圾邮件、 不健康内容等充斥屏幕, 而真正有
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
提示  人人文库网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
关于本文
本文标题:PC机与单片机的串行通讯
链接地址:https://www.renrendoc.com/p-512419.html

官方联系方式

2:不支持迅雷下载,请使用浏览器下载   
3:不支持QQ浏览器下载,请用其他浏览器   
4:下载后的文档和图纸-无水印   
5:文档经过压缩,下载后原文更清晰   
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

网站客服QQ:2881952447     

copyright@ 2020-2025  renrendoc.com 人人文库版权所有   联系电话:400-852-1180

备案号:蜀ICP备2022000484号-2       经营许可证: 川B2-20220663       公网安备川公网安备: 51019002004831号

本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知人人文库网,我们立即给予删除!