ImageVerifierCode 换一换
格式:DOC , 页数:14 ,大小:124.04KB ,
资源ID:2668171      下载积分:8 金币
快捷注册下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/2668171.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请

   平台协调中心        【在线客服】        免费申请共赢上传

权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

注意事项

本文(PIC16系列单片机与PC机串行通信的软硬件实现.doc)为本站上传会员【a199****6536】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

PIC16系列单片机与PC机串行通信的软硬件实现.doc

1、PIC16系列单片机与PC机串行通信的软硬件实现 ———————————————————————————————— 作者: ———————————————————————————————— 日期: 14 个人收集整理 勿做商业用途 摘

2、要介绍一种运用PIC16F84单片机实现与PC机串行通信的方法,并给出其硬件接口电路及通信源程序。 1 前言 美国Microchip公司的PIC16系列单片机是一种新型的CMOS工艺的8位单片机.其中,PIC16FXX单片机的程序存储器为电可擦除闪速存储器(flash),可多次修改程序,甚至可以在线编程。PIC16F83和PIC16F84片内数据存储器除RAM外,还有64字节的EEPROM,可以当作一般的或非易失性的数据存储器使用,简单方便。它还具有片内上电复位、延时电路、看门狗电路等。另外,PIC16系列单片机功耗极低,因而是一种非常适合在各种便携式设备中使用的高性价比的单片

3、机,并已经得到了越来越广泛的应用. 但是在许多需要大量计算的运用中,还必须借助微机的强大数据处理能力。这样必须通过通信电路实现PIC单片机与微机间的可靠数据传输。有的PIC16单片机内并没有提供串行口,所以串行通信必须通过自己设计的硬件电路和通信软件来实现。 下面介绍用查询法实现异步串行通讯的方法。同时给出了用PIC16F84单片机的两个I/O口模拟2线串行口的硬件接口电路、程序流程框图、单片机内通信程序以及微机内的通信程序等。 2 硬件实现方法与电路 PIC16F84单片机的程序存储器由1K×14的闪速(flash)存储器构成,它只有13条I/O口,1个定时器,为了尽

4、量节省单片机的软硬件资源,采用下述异步串行通信的实现方法. 如图1所示,PIC16F84在4MHz时钟下,采用半双工方式,可实现9600波特率的异步串行数据通信,1位停止位,8位数据位,无校验位.接收和发送以低位在先(一般模式),采用软件延时。为节省篇幅,单片机内的通信程序中未提供任何握手协议,用户可根据自己的需要在软件中加入握手方式。 由于PIC16F84单片机本身没有专门的串行口,这里用其I/O口来模拟串行口的功能。 PC机的串行接口是符合EIA RS—232C规范的外部总线标准接口。RS—232C采用的是负逻辑,即逻辑“1”:-5V至-15V;逻辑“0":+5V至+15V

5、而CMOS电平为:逻辑“1":4。99V,逻辑“0":0.01V;TTL电平的逻辑“1”和“0”则分别为2.4V和0。4V.因此在用RS-232C总线进行串行通信时需外接电路实现电平转换。在发送端用驱动器将TTL或CMOS电平转换为RS—232C电平,在接收端用接收器将RS—232C电平再转换为TTL或CMOS电平。 这里选用了MAXIM公司的MAX202E来作电平转换。MAX202E属于MAXIM公司的通用串行接收/发送驱动器芯片。其外围电路简单,只需外接四个0.1μF的电容即可,如图1所示。 图1 接口原理图 3 PIC16F84单片机内通信程序的设计

6、   图2 接收子程序框图 图3发送子程序框图 图2和图3分别是串行发送和接收的子程序流程框图。发送时,通过使数据发送端DX为低电平并保持B秒(9600波特率时为104μs)来发送起始位。随后每B秒钟通过置位或清零DX端把数据发送出去。这里的B是指一位所持续的时间(B=1/波特率).接收时,数据接收端DR大约要每B/2秒(9600波特率时为52μs)查询一次以检测起始位,如果检测到起始位,则在大约1。5B秒(9600波特率时为156μs)后检测第一位数据位,随后每B秒钟检测一次其它的数据位。 相应的源程序如下: ;接收子程序 Rcvr clrwdt

7、 ;清片内看门狗 ;定时器 btfsc RA,DR ;检测起始位 goto Rcvr ;未检测到起始位 movlw 8 ;检测到起始位 movwf R_CNT ;8位数据位 Rnext call Delay ;延时B/2秒 bcf STATUS,C ;清进位标志 rrf RevReg ;LSB在先 btfsc RA,DR ;该位为0   ;还是为1 bsf RcvReg,MSB ;为1 call Delay ;延时B/2秒 decfsz R_CNT goto Rnext ret

8、lw0 ;返回 ;发送子程序 Xmtr clrwdt ;清片内看门狗 ;定时器 movlw 8 ;发送位数为8 movwf X_CNT bcf RA,DX ;发送起始位 Xnext call Delay ;延时B/2秒 call Delay ;延时B/2秒 rrf XmtReg ;LSB在先 btfsc STATUS,C ;检测将要发送   ;的数据位 bsf RA,DX ;数据位为1 btfss STATUS,C bcf RA,DX ;数据位为0 decfsz X_CN

9、T ;位计数为0则 ;发停止位 goto Xnext ;位计数不为0 ;则发下一位数据位 Xstop call Delay ;延时B/2秒 call Delay ;延时B/2秒 Bsf RA,DX ;发送停止位 Retlw 0 ;返回 ;延时子程序 Delay movlw 12 ;52μS延时 movwf DCNT ; Dnext decfsz DCNT goto Dnext ; retlw 0 ; 4 Win95的串行通信机制及串口查询法的原理 常用的DOS系统主要是工作在

10、响应中断方式。PC机串行通信程序大多利用其BIOS块的INT14H中断,以查询串口的方式完成异步串行通信。 Windows系统函数即包含了通信支持中断功能.Win95系统为每个通信设备开辟了用户定义的输入输出缓冲区(即读/写缓冲区),数据进出通信口均由系统后台来完成。应用程序只需完成对输入输出缓冲区操作就可以了。实际过程是每接收一个字符就产生一个低级硬件中断,Win95系统中的串行驱动程序就取得了控制权,并将接收到的字符放入输入数据缓冲区。然后将控制权返还正在运行的应用程序.如果输入缓冲区数据已满,串行驱动程序用当前定义的流控制机制通知发送方停止发送数据。队列中的数据按“先进先出"的次序处

11、理。 (1) 按协议的设置初始化并打开串口,这样做就是通知Windows本应用程序需要这个串口,并封锁其他应用程序使它们不能使用此串口。 (2) 配置这个串口. (3) 在串口上往返地传输数据,并在传输过程中进行校验。 (4) 不需要此串口时,关闭串口。即释放串口以供其它应用程序使用. 在这四个步骤中,主要的程序代码集中在第(3)步。 串口查询法是一种主要工作在查询方式下的实现方法。当通信程序工作在“查询"方式时,可以不考虑Win95的进程和线程的问题。仅在串口有数据时,去读串口缓冲区就可以了,如图4所示。这种方法下确定串口读取的时机、握手协议及软件纠错的实现是程序员应

12、考虑的主要问题。   图4 读取接收缓冲区数据流程图   图5 串口初始化流程 由于这种方法主要工作在查询方式.程序员必须完成相当一部分通信状态的检测工作,许多细节(甚至包括通信过程中的字符属性的转换)也必须通过程序代码完成。这种查询方法对通信双方协议的依赖性尤其大。双方通信协议的约定对程序实现的难易程度影响很大。 串口查询法中,一般串口初始化的流程如图5。 值得注意的一点是,此方法下协议的约定必须满足以下条件:即甲方发送时,乙方必须在甲方发送动作之前进入循环接收状态,直到接收到字符后通过对串口读取函数ReadFile返回值的判断跳出循环

13、状态。 同时,一般为了不使系统因循环等待接收而进入“死循环”状态,可以人为设置读取串口的循环次数,一般1000~10000次即可. 本程序的实现平台是VB4,这是一种极为灵活的高级语言,它可以方便地引入汇编语言的思维,利用其GoTo转向语句方便地控制程序的流程,灵活方便. 5 PC机内通信程序的实例 现约定甲方是PC机,乙方是单片机系统(如读卡器).通信格式设置为2400波特率,8位数据位,1位停止位,无奇偶校验。 下面是一个约定好通讯协议的程序实例,协议流程如图6所示. 以下是甲方(PC机)的几个子函数的程序实例. 图6 通信协议流程

14、 Private Function OpenThePort(cPort as String,cBaud as String,cParity as String,cData as String,tStops asString)As Boolean ’ 打开串口的子过程 Dim lResult as Long Dim lHandle as Long Dim DCB_COMM as DCB Dim cDCBConfig as String lHandle = CreateFile(cPort,GENERIC_READ Or GENERIC_WRITE

15、 0&,0&,OPEN_EXISTING,0&,0&) If lHandle = -1 Then ’打开串口失败 OpenThePort = False MsgBox “串口可能正被其他应用程序占用!” lResult = CloseHandle(lHandle) ’先关闭串口后再打开 If lResult = 0 Then OpenThePort Exit Function End If End If cDCBConfig.band = 2400 ’设置DCB cDCBConfig。parity

16、 = None cDCBConfig.data = 8 cDCBConfig.stop = 1 lResult = BuildCommDCB(cDCBConfig,DCB_COMM) ’按用户设定配置一个DCB结构 If lResult = 0 Then OpenThePort = False MsgBox “无法建立DCB设备控制块" Exit Function End If lResult = SetCommState(lHandle,DCB_Comm) ’实际设置一个串口的DCB If lResult = 0

17、 Then OpenThePort = False MsgBox “无法建立DCB设备控制块" Exit Function End If OpenThePort = True End Function Private Sub SendHand ( ) '发送握手信号的子过程 Dim Nchars As Long Static Readbuff As String * 1 Static Writebuff As String * 1 Dim lpDCB As DCB Dim lRet As Long

18、 Dim lHandle As Long Dim lpOverlapped As OVERLAPPED Dim RNum As Integer MsgBox “请把读卡器插在串口2上!", 48,“提示窗口” lHandle = OpenThePort(COMM1,2400,None,8,1) lRet = PurgeComm( lHandle,1 ) ’清输出缓冲区 lRet = PurgeComm( lHandle,0 ) ’清输入缓冲区 lRet = GetCommState ( lHandle,lpDCB ) ’获得

19、通讯口的状态 Shand: Writebuff$= Chr$(&H8F) lRet = WriteFile (lHandle,Writebuff$,1,Nchars,lpOverlapped ) ’送握手信号入串口缓冲区 If lRet <= 0 Then MsgBox “发送操作出错,卡握手信号未发送成功", 16 GoTo Shand ’不成功则重发 Else GoTo Qtest End If GoTo Shand Qtest: Readbuff$ =“ " ’清除缓冲区为空

20、Do While lHandle ’循环查询串口 RNum = 0 ’设置读串口次数的指针为0 ReadAgain: lRet = ReadFile( lHandle, Readbuff$,1,Nchars,lpOverlapped ) If lRet 〈 0 Then MsgBox “读取应答信号时出错”, 16 End If If lRet = 0 Then If RNum > 1000 Then ’只读1000次串口,以免陷入死循环 MsgBox ”卡没有插接好或卡没有接在串口上!" GoTo Clo

21、seP End If RNum = RNum + 1 GoTo ReadAgain End If If Hex$(Asc(Readbuff)) 〈〉 Hex$(&HFF) Then GoTo Shand ’回送码不正确则返回继续发送握手信号 Else Label1.Caption = “握手信号是:" +Hex$(Asc(Readbuff$)) Msgbox “握手信号正确,已正确联机” GoTo CloseP End If Loop CloseP:lRet = CloseHandl

22、e( lHandle ) If lRet = 0 Then MsgBox “串行通讯口关闭成功", 48,“提示窗口” End If End Sub 这里要注意的是:当PC机与单片机系统通信时,单片机数据存储区( RAM )内的数据是十六进制,在信号线上传输的是十六进制数的ASCII码的二进制形式;而Windows系统下使用的是ANSI码,ANSI码仅在前126个与ASCII码相同.即在Win95下接收到的是十六进制数的ASCII码的字符串,可先转换为ANSI码后再在Win95下还原为十六进制数. 具体为:Code$=Hex$(Asc ( Readbuff$ ) ) 另外,由于32位API函数参数的数据类型的变化,所有整形参数都被换为长整型(Long)以支持32位的处理,这一点在设置返回值时尤其如此. 6 结束语 以上的软硬件在我们的实践中达到了较为理想的效果。通过软件节省了硬件的开销,并通过在PIC16F84单片机系统和PC机双方的通信软件内增加握手信号,达到了软件数据校验的目的,获得了较高的通信可靠性。

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服