PC机与PIC单片机串行通讯的实现-设计应用_第1页
PC机与PIC单片机串行通讯的实现-设计应用_第2页
PC机与PIC单片机串行通讯的实现-设计应用_第3页
PC机与PIC单片机串行通讯的实现-设计应用_第4页
PC机与PIC单片机串行通讯的实现-设计应用_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

精品文档-下载后可编辑PC机与PIC单片机串行通讯的实现-设计应用PC机与PIC单片机串行通讯的实现

于万民,王哈力,郑洪平(哈尔滨理工大学黑龙江哈尔滨150040;2.齐齐哈尔铁路车辆(集团)有限责任公司黑龙江齐齐哈尔161002)

随着计算机应用技术和微机网络技术的发展,计算机与其外部设备之间的数据传输越发显得重要。而串行通讯技术是实现这一功能的有效途径,他具有使用方便、数据传输可靠、适用于远距离通讯的特点,在工业监控、数据采集、检测等系统中有着广泛的应用。1异步串行通讯的原理及硬件电路的实现

1.1异步串行通讯的原理

在异步通讯中,数据是一帧一帧传送的,其数据格式如图1所示。

在帧格式中,一个字符由4部分组成:起始位、数据位、奇偶校验位和停止位。首先是一个起始位o,然后是5~8位数据(规定低位在前,高位在后),接下来是奇偶校验位(可省略),是停止位1。起始位o信号只占用1位,用来通知接收设备一个待接收的字符开始到来。线路上在不传送字符时应保持为广。接收端不断检测线路的状态,若连续为1以后又检测到一个o,就知道发来一个新字符,应马上准备接收。

1.2硬件电路的实现

PC机与PICl6C711单片机之间的串行异步通讯采用RS232接口电路实现,利用计算机的串行接口进行数据传输。因为RS232逻辑电子对地是对称的,与TTI。,CMOS逻辑电平完全不同。逻辑1电平为一5~15V之间,逻辑电平0为+5~15V之间,其与单片机的逻辑电平不一致,必须进行电子转换,采用MCl488和MCl489芯片可分别实现TTL-RS232和RS232-TTL之间的电平转换。接口电路图如图2所示。

2PC机通讯程序的编制

利用VC++6.0在Windows98以上的环境下运行,VC实现串行通讯有3种途径:

(1)利用MSComm控件,他是Microsoh公司提供的简化WindOWS串行通讯编程的ActiveX控件,他为应用程序提供了处理串行通讯的2种方法:数据驱动法和查询法;

(2)利用Cseria1Pont类进行串口通讯,他适合于需要使用多个串口时的通讯;

(3)用WinAPI函数对串口进行操作。

本文以VC++6.0调用WinAPI函数为例编程实现。WinAPI函数对串口进行操作不是对端口直接进行读写,而是把所有的设备都看成文件,从而进行相应的文件操作。

第1步,在MainForm.cpp定义全局变量HANDLEhCom;//准备打开的串口的句柄HANDLEhCommWatchThread;//辅助线程的全局函数

第2步,打开串口,设置串口hCom=CreateFile(〞COMl〞,GENERIC_READ︱GENERIC_WRITE,NULL,OPEN_EXISTING,FILE_FLAG_OVERLAPPED,NULL);//这里,我们使用FILE_FLAG_OVERLAPPED结构,这正是使用API函数实现非阻塞通讯的关键所在。

ASSERT(hCom!=INVALIDHANDLEVALUE);//检测打开串口操作是否成功SetCommMask(hCom,EVRXCHARIEVTXEMPTY);//设置事件驱动的类型SetupComm(hCom,1024,512);//设置输入缓冲区的大小PurgeComm(hCom,PURGETXABORT︱PURGERXABORT︱PURGETXCLEAR︱PURGERXCLEAR);//清理输入输出缓冲区COMMTIMEOUTSComm丁imeOuts;//定义超时结构,井填写该结构SetCommTimeOuts(hCom,CommTimesOuts);//设置读写操作所允许的超时DCBdcb;//设置数据控制快的结构dcb.BaudRate=9600;//设置波特率dcb.ByteSze=8;dcb.StopBits=onestopbit;dcb.fBinary=TRUE;//二进制通讯格式dcb.fPar北y:FALSE;SetCommState(Hcom,dcb)//串口参数配置

第3步,启动一个辅助线程,用于串口事件的处理。这里用他来监视串口状态,主线程则可专心进行数据处理。

HCommWatchThread=CreateThread((LPSECURITY_ATTRIBUTES)NULL,(LPTHEARD_START-ROUTINE)CommWatchPROC,GetSafeHwnd(),dwThreadID);ASSERT(hCommWatchThread!=NULL);

第4步,要为辅助线程写一个全局函数,主要完成数据接收的工作。

UNITCommWatchProc(HWNDhSendWnd){DWORDdwEvtMask=0;SetCommMask(hCom,EV_RXCHAR︱EV__TXEMPTY);//有哪些串口事件需要监视WaitCommEvent(hCom,dwEvMask,Os);//等待串口通讯事件的发生If(dwEvtMaskEV_RXCHAR)==EV_RXCHAR)//缓冲区中有数据到达{COMSTARTComStari;DWORDdwLenlgth;ClearCommError(hCom,dwErrorFlags,ComStart);DwLength=ComStat.cbInQuei;//输入缓冲区有多少数据If(dwLenlTth0){BOOLfReadStarifReadStat==ReadFile(hCom,1pBuffer,dwLength,dwBytesRead,,Read_OS(npTTYInfO));//读数据因为使用1pOverlapped结构,ReadFile()立即返回FALSE;If(!fReadStat){if(GetLastError()==ERROR_IO_PENDIN){while(!GetOverLappedReault(hCom,READ_OS(opTTYInfo),dwNytesRead,TRUE){dWError=GetlastError();if(dwError==ERROR_IO_INCOMPLETE)CONTINUE;//缓冲区数据没有读完,继续……}∷PostMessage((HWND)hSendWnd,WMNOTIFYPROCESS,0,0);//通知主线程,串口接到数据}

第5步,在主线程中发送下行命令:

BOOLfWriteStat;CharszBuffer[count];//准备好发送的数据,放在szBuffer[]中FWrirteStar=WriteFile(hCom,szBuffer,dwbytesToWrite,dwBytesWrittenWRITE_OS(npTTYInof));interr=GetLastError();if(!fWriteStat){if(GetLastError()==ERROR_IO_PENDING){while(!GetOverlappedResult(hCom,WRITEOS(npTTYInfO),dwBytesWritten,true)){dwError=GetLasrError();if(dwError==ERROR_IO_INCOMPLETE){dwBytesSent+=dwbytesWritten;continue;))}}

3PICC711单片机串行通讯的实现

本文以单片机对温度传感器DSl820进行数据采集为例,实现单片机与PC机的通讯。限于篇幅,给出传送一个DSl820信号到串口的主要部分程序:

A2EQU2//RA2接收数据端A1EQU1//RAl发送数据RCVREGEQU26R-COUNTEQU27//接收数据计数器T-COUNTEQU28//发送数据计数器MSBEQU7NUMEQU6B//设置下位机序号67NUM-ADDREQU2A//存储本机号码的地址SEN-CODEEQU39//传感器信号存放地址MAINCALLSUB-INIT//初始化程序CALLSUB-REC//调用接收子程序CALLSUB_COMP//对接收的数据进行处理CALLSUB_TRANS//发送数据子程序GOTOEXITSUB_INITCLRFRABCFSTATUS,RP0MOVLWB'00001101'//初始化MOVWFTRISAMOVLWNUMMOVWFNUMRETURNSUB-RECRCVRBTFSCRA,A2//检测起始位GOTORCVR//未检测到MOVLW2//接收的数据位数MOVWFR_COUNR_NEXTCALLDELAY//调用延时程序BCFSTATUS,CRRFRCVREGBTFSCRA,A2BSFRCVREG,MSBCALLDELAYDECFSZR_COUNTGOTOR_NEXTRETURNSUB_COMPMOVLW6AMOVWFCONTMOVFCONT,WXORWFNUM_ADDR,1MOVLW1;ADDWFNUM_ADDR,1DECFSZNUM-ADDR,1GOTOEXITNOPOVERNOPRETURNSUB_TRANSMOVLW3//发送的数据位数MOVWFT_COUNTMOVLW2AMOVWFSEN_CODEBCFRA,A1//设置发送起始位0T_NEXTCALLDELAYRRFSEN_CODEBTFSCSTATUS,CBSFRA

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论