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

下载本文档

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

文档简介

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

2、t;o"信号只占用1 位,用来通知接收设备一个待接收的字符开头到来。线路上在不传送字符时应保持为"广。接收端不断检测线路的状态,若延续为"1"以后又检测到一个"o",就知道发来一个新字符,应马上预备接收。12 硬件电路的实现pc机与l6c711之间的串行异步通讯采纳rs232接口电路实现,利用计算机的串行接口举行数据传输。由于rs232规律对地是对称的,与tti。,规律电平彻低不同。规律"1"电平为一515v之间,规律电平"0"为+ 515v之间,其与单片机的规律电平不全都,必需举行电子转换,采

3、纳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函数对串口举行操作。本文以vc+60调用win api函数为例编程实现。win api函数对串口举行操作不是

4、对端口挺直举行读写,而是把全部的设备都看成文件,从而举行相应的文件操作。第1步,在mainformcpp定义全局变量handle hcom;预备打开的串口的句柄handleh comm watchthread;辅助线程的全局函数第2步,打开串口,设置串口hcom=createfile(coml, generic_readgeneric_write,null, open_existing, file_ flag_overlapped,null);这里,我们用法file_flag_overlapped结构,这正是用法api函数实现非堵塞通讯的关键所在。assert(hcom! invalid ha

5、ndle value);检测打开串口操作是否胜利setcommmask(hcom,evrxchar ievtxempty);设置大事驱动的类型setupcomm(hcom,1024,512); 设置输入缓冲区的大小purgecomm (hcom, purge txabort purge rxabortpurgetxclearpurge rxclear);清理输入输出缓冲区commtimeouts comm丁imeouts;定义超时结构,井填写该结构setcommtimeouts (hcom,&commtimesouts);设置读写操作所允许的超时dcb dcb; 设置数据控制快的结构d

6、cbbaudrate9600; 设置波特率dcbbytesze=8;dcbstopbitsonestopbit;dcbfbinarytrue; 二进制通讯格式dcbfpar北y:false;setcommstate(hcom,&dcb) 串口参数配置第3步,启动一个辅助线程,用于串口大事的处理。这里用他来监视串口状态,主线程则可用心举行数据处理。hcommwatchthread createthread (lpsecurity_attributes) null, (lptheard_ start - routine) commwatchproc, getsafehwnd ( ),&am

7、p;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)= =ev_rxchar)缓冲区中有数据到达comstart comstari;dword d

8、wlenlgth;clearcommerror(hcom,&dwerrorflags,&comstart);dwlength=comstatcbinquei ; 输入缓冲区有多少数据if(dwlenltth0)bool freadstarifreadstat = =readfile (hcom, 1pbuffer,dwlength,&dwbytesread,&read_os(npttyinfo);读数据由于用法1poverlapped结构,readfile()立刻返回false;if(! freadstat)if(getlasterror()= =error_i

9、o_pendin)while (! getoverlappedreault (hcom,&read_os(opttyinfo),&dwnytesread,true)dwerror=getlasterror();if(dwerrorerror_io_incomplete)continue; 缓冲区数据没有读完,继续 postmessage ( hwnd ) hsendwnd, wmnotifyprocess,0,0); 通知主线程,串口接到数据第5步,在主线程中发送下行指令:bool f writestat;char szbuffercount;预备好发送的数据,放在szbuff

10、er中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,true)dwerror=getlasrerror();if(dwerror= =error_i

11、o_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 6b 设置下位机序号67num-addr equ 2a 存储本机号码的地址sen-code equ 3

12、9 传感器信号存放地址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 w2 接收的数据位数movwf r_counr_nextcall delay 调用延时程序bcf sta

13、tus,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

提交评论