"PC机与单片机AT89C51的串行通信"
本文主要介绍了在Windows95下使用串口API函数实现PC机与单片机AT89C51的串口通信,重点介绍计算机采用事件驱动I/O方式的函数编程及单片机串口中断发送、接收程序的实现。
串行通信概述
串行通信是一种常用的数据传输方式,它通过串行方式将数据从一端传输到另一端。串行通信的优点是简单、可靠、高速和低成本,因而在工业控制、数据采集、自动化控制等领域得到了广泛应用。
PC机与单片机AT89C51的串行通信
在以单片机为基础的数据采集和实时控制系统中,通过计算机中的RS-232接口进行计算机与单片机之间的命令和数据传送。由于计算机上的RS-232所传送的距离不超过30m,所以,在远距离的数据传送和控制时,可以用MAX485的接口转换芯片将RS-232转换成RS-485协议进行远距离传送。
Windows95下的通信编程
Windows95提供了一个改进的串行应用程序接口SAPI用来进行交互式串行通信。其中,串口和其他通信设备是作为文件进行处理的,串口的打开、关闭、读取和写入所用的函数和操作文件的函数相同。
CreateFile函数
CreateFile函数是打开串口的函数,用于读访问或写访问打开串口,打开成功后返回该串口句柄,供读写串口时使用。CreateFile函数的使用格式如下:
CreateFile(szDevice, fdwAccess, fdwShareMode, lpsa, fdwCreate, fdwAttrsAndFlags, hTemplateFile)
其中,第1个参数szDevice是要打开的串口逻辑名,如COM1或COM2;第2个参数fdwAccess指定串口的访问类型,如读、写或两者兼而有之;第3个参数fdwShareMode指定串口的共享属性,串口不能共享,所以它必须为0;第4个参数lpsa引用安全性属性结构;第5个参数fdwCreate指定如果CreateFile正被已有的文件调用时应做些什么;第6个参数fdwAttrsAndFlags描述了该端口的各种属性;最后1个参数hTemplateFile是指向模板文件的句柄,当端口打开时,该参数为NULL。
串口设置
Windows95提供了COMMPROP结构,COMMPROP结构中包含了对串口允许的设置,如波特率、数据位数、停止位的个数以及奇偶校验方法等。如果串口连接到调制解调器,COMMPROP结构中还包含调制解调器支持的设置。
DCB结构
DCB结构中包含了所有串口的设置,其中包括硬件的握手、流控制等。Windows95下串口设置的改变是通过改变它的DCB结构来实现的。
GetCommState函数和SetCommState函数
GetCommState函数用于得到当前串口的设置情况,该函数接收1个打开的端口句柄和1个指向DCB结构的指针,在DCB结构中返回信息。SetCommState函数将DCB结构中的内容写向串口设置。
串口读写函数
Windows95中实现串口的读写函数与文件的读写函数相同,读写函数的使用格式如下:
ReadFile(hComm, inbuff, nBytes, &nBytesRead, &overlapped)
WriteFile(hComm, outbuff, nBytes, &nBytesWritten, &overlapped)
其中,hComm为打开串口的句柄,inbuff和outbuff分别为输入和输出缓冲区,nBytes为要读写的字节数,&nBytesRead和&nBytesWritten分别为读写字节数的指针,&overlapped为Overlap结构的指针。