PC机与PIC单片机串行通讯的实现_第1页
PC机与PIC单片机串行通讯的实现_第2页
PC机与PIC单片机串行通讯的实现_第3页
PC机与PIC单片机串行通讯的实现_第4页
PC机与PIC单片机串行通讯的实现_第5页
全文预览已结束

下载本文档

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

文档简介

1、    PC机与PIC单片机串行通讯的实现随着计算机应用技术和微机网络技术的发展,计算机与其外部设备之间的数据传输越发显得重要。而串行通讯技术是实现这一功能的有效途径,他具有使用方便、数据传输可靠、适用于远距离通讯的特点,在工业监控、数据采集、检测等系统中有着广泛的应用。 1 异步串行通讯的原理及硬件电路的实现 11 异步串行通讯的原理 在异步通讯中,数据是一帧一帧传送的,在帧格式中,一个字符由4部分组成:起始位、数据位、奇偶校验位和停止位。首      随着计算机应用技术和微机网络技术的发展,计算机与其

2、外部设备之间的数据传输越发显得重要。而串行通讯技术是实现这一功能的有效途径,他具有使用方便、数据传输可靠、适用于远距离通讯的特点,在工业监控、数据采集、检测等系统中有着广泛的应用。1 异步串行通讯的原理及硬件电路的实现11 异步串行通讯的原理      在异步通讯中,数据是一帧一帧传送的,在帧格式中,一个字符由4部分组成:起始位、数据位、奇偶校验位和停止位。首先是一个起始位"o",然后是58位数据(规定低位在前,高位在后),接下来是奇偶校验位(可省略),最后是停止位"1"。起始位"o"

3、信号只占用1 位,用来通知接收设备一个待接收的字符开始到来。线路上在不传送字符时应保持为"广。接收端不断检测线路的状态,若连续为"1"以后又检测到一个"o",就知道发来一个新字符,应马上准备接收。12 硬件电路的实现PC机与PICl6C711单片机之间的串行异步通讯采用RS232接口电路实现,利用计算机的串行接口进行数据传输。因为RS232逻辑电子对地是对称的,与TTI。,CMOS逻辑电平完全不同。逻辑"1"电平为一515V之间,逻辑电平"0"为+ 515V之间,其与单片机的逻辑电平不一致,必须进行电子转

4、换,采用MCl488和MCl489芯片可分别实现TTL-RS232和RS232-TTL 之间的电平转换。接口电路图如图2所示。2 PC机通讯程序的编制       利用VC+60在Windows 98以上的环境下运行,VC实现串行通讯有3种途径:(1)利用MSComm控件,他是Microsoh公司提供的简化WindOWS串行通讯编程的ActiveX控件,他为应用程序提供了处理串行通讯的2种方法:数据驱动法和查询法;(2)利用Cseria1Pont类进行串口通讯,他适合于需要使用多个串口时的通讯;(3)用Win API函数对串口进行操作

5、。本文以VC+60调用Win API函数为例编程实现。Win API函数对串口进行操作不是对端口直接进行读写,而是把所有的设备都看成文件,从而进行相应的文件操作。第1步,在MainFormcpp定义全局变量HANDLE hCom;准备打开的串口的句柄HANDLEh Comm WatchThread;辅助线程的全局函数第2步,打开串口,设置串口hCom=CreateFile(COMl, GENERIC_READGENERIC_WRITE,NULL, OPEN_EXISTING, FILE_ FLAG_OVERLAPPED,NULL);这里,我们使用FILE_FLAG_OVERLAPPED结构,这

6、正是使用API函数实现非阻塞通讯的关键所在。ASSERT(hCom! INVALID HANDLE VALUE);检测打开串口操作是否成功SetCommMask(hCom,EVRXCHAR IEVTXEMPTY);设置事件驱动的类型SetupComm(hCom,1024,512); 设置输入缓冲区的大小PurgeComm (hCom, PURGE TXABORT PURGE RXABORTPURGETXCLEARPURGE RXCLEAR);清理输入输出缓冲区COMMTIMEOUTS Comm丁imeOuts;定义超时结构,井填写该结构SetCommTimeOuts (hCom,&Co

7、mmTimesOuts);设置读写操作所允许的超时DCB dcb; 设置数据控制快的结构dcbBaudRate9600; 设置波特率dcbByteSze=8;dcbStopBitsonestopbit;dcbfBinaryTRUE; 二进制通讯格式dcbfPar北y:FALSE;SetCommState(Hcom,&dcb) 串口参数配置第3步,启动一个辅助线程,用于串口事件的处理。这里用他来监视串口状态,主线程则可专心进行数据处理。HCommWatchThread CreateThread (LPSECURITY_ATTRIBUTES) NULL, (LPTHEARD_ START

8、- ROUTINE) CommWatchPROC, GetSafeHwnd ( ),&dwThreadID);ASSERT(hCommWatchThread! =NULL);第4步,要为辅助线程写一个全局函数,主要完成数据接收的工作。UNIT CommWatchProc(HWND hSendWnd)DWORD dwEvtMask=0;SetCommMask(hCom,EV_RXCHAREV_ _TXEMPTY);有哪些串口事件需要监视WaitCommEvent(hCom,&dwEvMask,Os);等待串口通讯事件的发生If(dwEvtMask&EV_RXCHAR)=

9、=EV_RXCHAR)缓冲区中有数据到达COMSTART ComStari;DWORD dwLenlgth;ClearCommError(hCom,&dwErrorFlags,&ComStart);DwLength=ComStatcbInQuei ; 输入缓冲区有多少数据If(dwLenlTth>0)BOOL fReadStarifReadStat = =ReadFile (hCom, 1pBuffer,dwLength,&dwBytesRead,&Read_OS(npTTYInfO);读数据因为使用1pOverlapped结构,ReadFile()立即返

10、回FALSE;If(! fReadStat)if(GetLastError()= =ERROR_IO_PENDIN)while (! GetOverLappedReault (hCom,&READ_OS(opTTYInfo),&dwNytesRead,TRUE)dWError=GetlastError();if(dwErrorERROR_IO_INCOMPLETE)CONTINUE; 缓冲区数据没有读完,继续 PostMessage ( HWND ) hSendWnd, WMNOTIFYPROCESS,0,0); 通知主线程,串口接到数据第5步,在主线程中发送下行命令:BOOL

11、 f WriteStat;Char szBuffercount;准备好发送的数据,放在szBuffer中FWrirteStarWriteFile(hCom,szBuffer,dwbytesToWrite,&dwBytesWritten&WRITE_OS(npTTYInof);int err=GetLastError();if(!fWriteStat)if(GetLastError()= =ERROR_IO_PENDING)while (! GetOverlappedResult (hCom,&WRITE OS(npTTYInfO),&dwBytesWritten

12、,true)dwError=GetLasrError();if(dwError= =ERROR_IO_INCOMPLETE)dwBytesSent+dwbytesWritten;continue;)3 PIC"C711单片机串行通讯的实现本文以单片机对温度传感器DSl820进行数据采集为例,实现单片机与PC机的通讯。限于篇幅,给出传送一个DSl820信号到串口的主要部分程序:A2 EQU 2 RA2接收数据端A1 EQU 1 RAl发送数据RCVREG EQU 26R-COUNT EQU 27 接收数据计数器T-COUNT EQU 28 发送数据计数器MSB EQU 7NUM EQU

13、 6B 设置下位机序号67NUM-ADDR EQU 2A 存储本机号码的地址SEN-CODE EQU 39 传感器信号存放地址MAIN CALL SUB-INIT 初始化程序CALL SUB-REC 调用接收子程序CALL SUB_ COMP 对接收的数据进行处理CALLSUB_TRANS 发送数据子程序GOTOEXITSUB_INITCLRF RABCF STATUS,RP0MOVLW B'00001101' 初始化MOVWFTRISAMOVLW NUMMOVWF NUMRETURNSUB-RECRCVR BTFSCRA,A2 检测起始位GOTO RCVR 未检测到MOVL

14、W2 接收的数据位数MOVWF R_COUNR_NEXTCALL DELAY 调用延时程序BCF STATUS,CRRF RCVREGBTFSC RA,A2BSF RCVREG,MSBCALL DELAYDECFSZ R_COUNTGOTO R_NEXTRETURNSUB_COMPMOVLW 6AMOVWF CONTMOVFCONT,WXORWF NUM_ADDR,1 MOVLW1 ;ADDWF NUM_ADDR,1 DECFSZNUM-ADDR,1GOTO EXITNOPOVERNOPRETURNSUB_TRANSMOVLW 3 发送的数据位数MOVWF T_ COUNTMOVLW 2AMOVWF SEN_CODEBCF RA,A1 设置发送起始位0T_NEXTCALL DELAYRRF SEN_CODEBTFSC STATUS,CBSF RA,A1 发送数据位"1"BTFSS STATUS,CBCF RA,A1 发送数据位"0"DECFS2T_COUNTGOTO T_NEXTCALL DELAYBSF RA,A1 发送停止位RETURNEXITNOPEND4 结 语&#

温馨提示

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

评论

0/150

提交评论