实例介绍
简单的串口程序,利用API编程,讲解详细,初学者可以参考
引{言 趁着寒假的大好时光打算从零编写个像烊的上位机程序,于是放假前狂搜了 这方面的资料。临做了才晓得那群牛人写的文章不是我这种及没文化又没耐心的 人能看的,他们动不动的就整个系统,看的我自卑的想睡,结果也是睡多了;给 恨的是我想个简单的在VC里加个 MSComm控件之类的,还在海量的资料中找 了篇不错的,结果在家里添加控件吋出乱子了,老弹出个“不支持此接凵”,在 学校电脑的时候就没这臭毛病。苦恼了好几天,后来百度大叔告诉我,Win7和 Visual c++6.0不和,一家人闹矛盾挺让人难受的。只好用了传说中的API另起 灯灶了。在这里先叙叙闲言,去去火 Microsoft 回 Microsoft oruCommunications Control version 6.0 Microsoft 不支持扫口 Microsoft Microsoft 本文章在将首先介绍80C51串口的编写作为下位札,在 Proteus虚拟串口环 境下用于上位杋的调试。这样的模拟电路可以省去实际的硬件电路,是个很好的 学习及工作平台,整个实验室就在一台电脑里 其后写些我这几天VC上位机编写的些入门级别的总结,尽量详细,希望对有 志于此的兄弟姐妹有帮助。“公欲善其事,必先利其器” Visual o+-6.0编写上位机程序,接受下位机发送的数据 KeiuⅤ Ision4编写51单片机的串口程序。 Proteus7.7SP2作为硬件电路的模拟 Virtual serial Ports driver Xp50形成虚拟端凵COM3和COM4用于调试: 串口调试助手用于调试下位机 这五个软件均可在网上下载到。 网呵 5的SPxv22 vsuall Ctan uVisian4 Professional 80c51下位机与 proteus虛拟端囗简介 1.1添加虚拟端口 首先为PC机添加两个虚拟串口,COM3与COM4方便以后的调试。 打开 Virtual serial ports driver Xp5.0后界面如图,点击 Add pair就添加了COM3 与COM4了。这连个端口是连接好的,一个可发送信息,另一个就可以接受, 对于其它软件就像真实的端凵一样。 Virtual S 1I Ports D P 5. 0 Ports Options Help Explorer ontrol panel Virtual por Add/Removeor: Additional pair info Cust om pinout 到c0M1 irsL 00a d 1 s d CoM4 Fi cD囗 Delete p cD■2 d from your Reset bus system. Please, make sure al Tor+ Enable strict baudrate emulation (Eor Win NT4/2000, Break line/Restore connection (for Win NT4/ 2000/XF help press F1 irtual Serial Ports Driger XP 5.0 Ports Options Help 2 Control panel a回vxtu1 Ports Add/Remove ports Additional pair info Custom pinout FI COM1 First Add p -I COM3 COMG COMe first C■1 Delete pal Second C0■2 All virtual serial 胃 il be removed± Iom aT Reset bus system.上⊥ea写e, male sure a17 nor baudrate emulation (for Win NT 4/201 Break line/Restore connectior.(for Win NT4/2000/XF help press F1 如上图,添加完毕后这个程序就没用了。你的电脑上就会用COM3与COM4并且 是物理连接的。(上两张图来自网络) 1.2单片机串口程序 4Exu∠- ViSiOns File Edit view Project Fash Debug Peripherals Tools Svcs window Help 虑團图激于xEet1 roject main汇 =:- Target 1 3#⊥C1ue<eg51.h BE Source Group 32 中为manc yoid ma1n(v。id { unsigned char 1=[200; int 1=07 7TMD=0x20:/定时器1工作在方式2 Tll=oxIdr THl=oxid 自动重载,波特率960C 1 PC○N=0x00 11C0N=0×50;/口工作在方式2; R1=1P 启动定时器; while(1) 15 SBUF=LF ↓/循环发送0~100; 16 wh1e(工!=1) T工=0 18 立==1002i=0:i-+冫 for{=0:<125F1++)P pED可山 BuIld Outpu e=71 上e1ngex工11e工上 o EX027s" PEx01275-0 Error is, C Warning(s 代码如下 #includereg51. h> void main(void) unsigned char i=0x00 TMOD=0x20 //定时器1工作在方式2 TL I=Oxfd TH1=Oxid //自动重载,波特率9600 PCON=OXOO SC0N=0x50;//凵工作在方式2; TR1=1; 启动定时器 shile(1) SBUF=i //循环发送0100; while(ti!=1) TI=0; i==100?i=0:i++; for(j=0;j<125;j++); 以上是51的一个简单串口程序,串口P3.1循环发送0~100的数值。注意在 编详时右键点击 Target1 Options for Target Target 1'| Outpu址勾选( reate HEX FIle形成hex文件用于 Options for Target Target 1 proteus的调试。真整实用的 Device Tar get Output Listing User CE 串口需要编写通信协议,防止 出错,处于简单考虑我们将其 Select Folder for Objects 忽略 reate executable E801275 v Debug Information Ad HEX File HEX Format: HEX-80 KTAI FO OADO Fn 1/AD1 = t INST UMENTS XTA ENAD m765 r06/A没 RXD DE 212 TMETER 10 24 CS AC VOLTMETER 鬥 YFTFR P25A32 P1 P2.6/A14 7 P10 P3O/RXD P13 4 DR HO 7 P15 口三RR口 1.3 Proteus硬件电路图 该电路图只川两个器件80C51和 COMPIN,两一个是仪表用于测试。仪表 的添加如图,点图中蓝圈,选择Ⅴ IRTUAL TERMNAL。该仪表是 Proteus自带的 串口检测工具,将其RXD与P3.1相连接可以显示单片机串口发送的数据。 在木实验需要要设置该仪表的参数,其 Baud rate=960. XTAL 口m画 Edit o。 mponent STAI Hindi Component walue Hidder RST Baud fat 90 Hide aⅢl Data b its Hide点‖ 口N匚 l|ide点ll PSFN Hide All ALE erd了□NAFF F匚 Fack. a口e INot Specified-[]旧deA dvanced Properties HXTR Polarity 此吋双机单片机添加之前的HEX文件运行,即可看到凵发送的数据。刷新 自1 口nnn Virtual terminal 2U 9#$%&()*+, -/0123456789: : <=> 8ABCDEFGHIJKLMNOPQRSTUYWAYZ[\,'ab SCO 1100转换成字符后,若没有此框右键点击仪表选最后 个选项 速度很快。 软后设置 COMPIN的波特率 Component Refere 为9600,串口为COM3,注‖ Component value CO MPIM 意串口与单片机的连线, MModel OMPIMDLL P3TXD连接 COMPIN的 Physical port TXD。有图是 COMPIN设置‖ Physical Baud Rate Physical Data Bi MiCrosd Physical Parity NONE 串囗调试助手 SComAssistant y22ForW 串口W4 virtual b aud rate 波特率6 Wirtual data bits 校验 CONE 数据位 .A DiAN 具L山r|ruJ HU"nL2L」 停止位 4!! 关闭∏ i55 Ex0127SDF-ISIS Professional (Animating) 声空擦收区校收区 File Virtual terminal 中@ !”1$’()跗+。-,0123456788::>? ABCDEFGHIJKLM 排A 的三个关键参数。运行 Proteus可用串口调试助手接收。串口助手也要设置相应 的参数以匹配串口,其串口选择COM4。然后打丌串口,接收文件,即可看到单 片机发送的数据。也是以字符形式显示,0-100的数值是对应字符的 ASCLL。如 下图 至此说明51单片机串口发送数据是正常的,如果硬件连接没问题,PC机作为上 位机是可以接收到数据并处理显小的。 而VC肀凵编程的工作,就是接收下位机发送的数据并处理,串凵调试助手就是 个简单的上位机程序。这个串口调试软件,是龚建伟用VC中的 MSComm空间写 的。接下来,是我用API函数的文件操作,写一个上位机接收数据的软件。并用 这个软件接收以上80C51发送的数据 ⅴC上位机API串口编程 2.1串口技术 在 Microsoft Windows下开发串口通信程序通常有如下方法 1、利用 WindOwsApI通信函数 2、利川 Windows的读写端口函数或开发驱动程序直接对串口操作。 3、利用第三方提供或自己编写的通讯类。 4、利用串口通讯组件,如 Activex控件 MSComm。 其中API函数法适用面较广,是 Windows环境卜主要的编程方法。听说第四种方 法比较简单,只需对串口进行简单设置 本文本着详细与简单的原则,总结一下我用API写串口的一些知识。 2.2API函数法 据说与串口通讯有关的 WindOws api函数大概有20多个,这个以后再学习。 先介绍目前用着的几个: 2.2.1打开串口 HANDLE CreateFile LPCTSTR lpFileName //将要打开的串口逻辑名,如COM1或COM2 DWORD dwAccess //指定串口访问的类型,可以是读取、写入或两者并 dWoRd dwShareMode //指定共享属性,由于串口不能共享,该参数必须置为0 LPSECURITY ATTRIBUTES Ipsa,//引用安全性属性结构,缺省值为 NULL DWORD dwCreate //创建标志,对串口操作该参数必须置为 OPEN EXISTING DWORD dwautrsAndFlags, /属性描述,用于指定该串口是否可进行异步操作, // FILE FLAG OVERLAPPED:可使用异步的1/0 haNdlE hTemplateFile //指向模板文件的句柄,对串口而言该参数必须置为NULL 共7个参数 2.2.2配置串口 DCB结构休定义了串口通信设备的控制设置 BOOL GetCommState (handle hCom, lpdcb &dcb) 获取当前配置,获取配置成功返回1,失败返回0. BOOL SetCommState (HANDlE hCom, lpdcb &dcb) 用DCB结构体配置串口 例如: DCB wdcb: //声明一个串口设备描述结构体 GetCommState(hCom, &wdcb) //用现有的填允该结构体; wdcb LauRate=9600 //修改参数; SetCommState (hCom, &wdcb ) /设置修改好的串口 2.2.3读写串口 Purge Comm(hOm) 清串凵缓冲区函数; BOOL Readfile( HANDLE hFile,/打开的文件句柄,如“COM1”; LPVOID lpBuffer 接收缓冲区的指针; DWORD nNumberofBytes ToRead,//接收缓冲区的人小 LPDWORD1 pNumberOfBytesRead,∥/实际接收数据的大小,引用参数; LPOVERLAPPED lpOverlapped//读写方式;同步读写NULL BOOL WriteFile( handle hfile, / handle to file to write to LPCVOID IpBuffer // pointer to data to write to file DWORD nNumberOfBytesToWrite, / number of bytes to write LPDWORD lpNumberofBytesWritten, / pointer to number of bytes written LPOVERLaPPED lpOver lapped / pointer to structure for overlapped 1/0 2.2.4关闭串口 CloseHandle (hComm 关闭打开的串口。 23 Visual c++6.0编写串口上位机控制台程序 2.3.1建立工程文件 第一步:打开VC建立一个控制台工程,如下图 苣日|哈启- uE E 1m_strRXData New Files Projecs Workspaces Other D ATL COM AppYYiz ard wd Cluster Resource Type W∠ard DBWiz1. CNewDatabaseWizard 楼 DcyStudio Add in Wizar MYPRO. FCTCPROIF c Create new workspace 厂 Depen dency of LibraN B]win 32 Static Libra WIN A Build( Debug Finc in Filc31N4 Ready 选择Win32 Console application; 先建立一个控制台应用程序,将串口追精华的部分在一个文件甲写出来。便于初 学者看个明白,它的输入输出是DOS界面的黑框框,十分朴实,没有额外的其他 的自动形成用于写窗口界面之类的代码,不乱套。 C语言或C+的初学者与那些传说中的编程高于,好用这玩意儿前者求简单, 后者听说是已经不再看重表面了,而是效率 【实例截图】
【核心代码】
标签:
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论