




已阅读5页,还剩10页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、单片机部分电路图:此主题相关图片如下: 单片机源代码(asm格式):;-;-;设置串行口 波特率9600;串行口设置MODE1,SM1=0,REN=1,SMOD=1;晶振11.0592,定时设置为0FDH;常用端口设置参数;FD 9600;FA 4800;F4 2400;E8 1200;-;*ORG 00HJMP STARTORG 23HJMP UARTORG 30HSTART: MOV SP,#70HMOV SCON,#50HMOV TMOD,#00100001B ;TIM1在模式2 TIM0在模式1MOV TH1,#0F4H ;设置定时时间SETB TR1 ;启动定时器1SETB ES ;允许串口中断SETB EA ;允许总中断MOV P0,#0 ;P0、P2输出低电平MOV P2,#0JMP $ ;等待状态;*;串行口中断;*UART: PUSH ACCPUSH PSWCLR ES ;关闭串行口中断MOV TH0,#HIGH(65536-65536)MOV TL0,#LOW(65536-65536)SETB TR0 ;开定时器0MOV 30H,#00 ;同步位MOV 31H,#00 ;数据1MOV 32H,#00 ;数据2MOV 33H,#00 ;结束位MOV R0,#30HREC: jbc tf0,FS ;接收时间是否超时?是则执行FSJNB RI,REC ;接收数据CLR RIMOV A,SBUFMOV R0,AINC R0JMP RECFS: CLR TR0 ;关定时器0;* CALL FUN ;解码并控制继电器SETB ES ;开串行口中断POP PSWPOP ACCRETI ;中断子程序返回;*;解码并控制继电器;下面的程序可以更简洁,但为了方便,展开来编制;*FUN: MOV A,#0AH ;判断第1字节即同步位CJNE A,30H,ERRMOV A,#0DH ;判断第4字节即结束位CJNE A,33H,ERR;*;第2字节即数据位1,代表继电器J1-8;第3字节即数据位2,代表继电器J9-16;*MOV A,31HMOV P0,AMOV A,32HMOV P2,ARET;*; 数据错误处理;* ERR:MOV 30H,#00 ;同步位MOV 31H,#00 ;数据1MOV 32H,#00 ;数据2MOV 33H,#00 ;结束位RETEND ;程序结束;-;-单片机源代码(asm格式)+电路图下载:点击浏览该文件电路图说明:这个电路非常典型,串行口(也称RS232)接口集成电路MAX232与单片机AT89S51引脚P3.0(RXD)P3.1(TXD)连接,构成与主机的通讯接口电路。AT89S51引脚P0、P2口连接达林顿管阵列驱动IC uln2803,通过它控制继电器动作。相关基础知识简要说明:1、串行口(也称RS232接口)是用途最广的一种通讯接口,一般电脑主机上都有这个接口,缺点是传输距离短,市场上也有很多USB-RS232 转换接口卖。*常用的通讯接口还有RS485、RS422、LPT打印接口、CAN总线接口、网卡接口等等,与RS232比较接近的通讯接口是RS485,它的通讯距离较远,广泛用于工业控制。2、串行口(也称RS232)接口集成电路MAX232,接口芯片种类繁多,MAX232只是其中的一种,可以说是串行接口集成电路的代表型号,图纸上一般都标MAX232,但实际使用时,可以选用更多兼容的芯片,其中一个理由,兼容芯片更便宜。3、达林顿管阵列驱动IC uln2803,TTL输入(0-5v),可以同时驱动8个继电器,内部不仅封装了达林顿管阵列,并且含有钳位二极管,连接继电器时,不需要再连接保护二极管,使用非常方便,因而用途广泛。相同功能的芯片有ULN2003,只是它只有7个输出口。内部电路如图所示:此主题相关图片如下: 接口IC ULN2083内部有反相缓冲器(参见技术手册),简单来说,输入高电平,输出为低电平;输入低电平,则输出高电平。51源程序详解:源程序主要分三个部分:初始化程序、串口中断程序、协议解析或叫解码程序。初始化程序:初始化是单片机通电后首先执行的一部分程序,主要是对单片机中的寄存器做一些必要的设置(即写入值):、设置串口 波特率为9600串行口设置MODE1,SM1=0,REN=1,SMOD=1、由于电路上晶振采用11.0592(最常用),定时器1设置初值为0FDH;常用串口波特率对应初值(11.0592晶振);FD 9600;FA 4800;F4 2400;E8 12003、启动定时器1、允许串口中断、允许总中断相关代码:MOV SCON,#50HMOV TMOD,#00100001B ;TIM1在模式2 TIM0在模式1MOV TH1,#0F4H ;设置定时时间SETB TR1 ;启动定时器1SETB ES ;允许串口中断SETB EA ;允许总中断需要注意:1、波特率越高,通讯速度越快,但也更容易出错,一般来说,通讯距离短时,可以用较高的波特率,通讯距离长时,选用较低的波特率可使通讯更为可靠。2、硬件电路采用不同的晶振,波特率设置时初值是不同的,初值可由公式()取得,通过计算你会发现有些晶振(如10M、12M)计算结果有余数,实质上就是波特率有误差,最终结果就是用了这个晶振的电路,在通讯时会出现无法通讯、数据错乱、时好时坏、误动作等等情况。因此,一般我们在用到串口的单片机电路中,如无特殊需要,一般晶振选用11.0592M、22.1184等。而在没有用到串口的电路中,一般晶振选用6M、12M、24M等,因为计算定时更简单,如6M时钟,周期=2us ;12M时钟,周期=1us ;24M时钟,周期=0.5us。3、提高波特率的方法有二种:将SM1设为1;或是换一个频率更高的晶振。由于接口IC ULN2083输入输出的反相特性,即输入为高电平,输出为低电平;输入为低电平,则输出为高电平。同时51单片机上电复位后,其引脚为高电平,这样会引起连接在P0、P2口的继电器全部得电吸合的情况,应此,初始化程序中应对端口作如下设置:相关代码:MOV P0,#0 ;P0、P2输出低电平MOV P2,#0由于本例中单片机在初始化后没有其它事情做,我们就让它没事歇着。相关代码: JMP $ ;自循环(等待状态)串口中断程序:串口接收数据流程图此主题相关图片如下: 串口接收定长或不定长数据的原理:(很多朋友没理解的)接收定长或不定长数据关键是要知道数据什么时候发送完毕。我们知道串口中传送数据是以位(BIT)来传送,通常串口设置为MODE1状态,MODE1状态收发数据是10个位,一个起始位,8个数据位(我们要传送的一个字节数据),1个停止位。如果波特率9600,请注意单位是BIT/S,也就是速度1秒钟9600位,换算一下,发送或接收10位需要1MS毫秒多一点。那么OK,对于不定长度数据,我们在每接收完1个字节数据后,开始设定时值如2 MS,并开启定时器,如果后面还有数据 ,则重新设定时值如2 MS,并开启定时器;如果后面没有数据了,超过2MS,即表示数据接收完毕了,下面可以对收到的数据处理了。对于指定长度的数据,我们可以设定全部数据接收完需要多长时间,在引起串口中断后(即准备接收第1个字节),开始设定时值如2 MS,并开启定时器,循环接收字节数据,如果超时,即表示数据接收完毕了,下面可以对收到的数据处理了。在本例中我们接收的是4个字节的定长数据,相关代码如下:MOV TH0,#HIGH(65536-65536)MOV TL0,#LOW(65536-65536)SETB TR0 ;开定时器0MOV 30H,#00 ;同步字节MOV 31H,#00 ;数据1MOV 32H,#00 ;数据2MOV 33H,#00 ;结束字节MOV R0,#30HREC: jbc tf0,FS ;接收时间是否超时?是则执行FSJNB RI,REC ;接收数据CLR RIMOV A,SBUFMOV R0,AINC R0JMP RECFS: CLR TR0 ;关定时器0;* CALL FUN ;解码并控制继电器如何定义通讯协议:通讯协议就是通讯各方的约定,没有固定的格式方法,由开发商自行定义。我们来看一个最简单的通讯协议:接收字节数据 功能00 继电器1开01 继电器1关02 继电器2开03 继电器2关。 。这个协议说明,单片机接收到1个数据如果是00H,则继电器1打开,依次类推。在实际使用时,由于各种干扰因素,往往会发生误动作的情况,因此通讯协议必须能抵挡各种干扰因素。为了得到可靠的通讯协议,我们常常在要发送的数据前加同步位,发送的数据后加结束位,以及加入校验字节等等方法。本例中我们确定如下的通讯协议:1、数据为4个字节,第1字节表示同步位,第2字节表示数据1,第3字节表示数据2,第4字节表示结束位。2、第1字节表示同步位,固定为0AH;第4字节表示结束位,固定为0DH。3、第2字节即数据1,8个位依次代表继电器1-8,位=1则继电器开,位=0则继电器关。4、第3字节即数据2,8个位依次代表继电器9-16,位=1则继电器开,位=0则继电器关。因此如果接收到数据0A01020D,首先判断第1字节是否=0AH,再判断第4字节是否=0DH,如果不同,则发生了错误,反之正确。第2字节=01H,表示继电器器1开,继电器2-8关;第3字节=02H,表示继电器10开,继电器9、11-16关。协议解析(解码)程序FUN: MOV A,#0AH ;判断第1字节即同步位CJNE A,30H,ERRMOV A,#0DH ;判断第4字节即结束位CJNE A,33H,ERR;*;第2字节即数据位1,代表继电器J1-8;第3字节即数据位2,代表继电器J9-16;*MOV A,31HMOV P0,AMOV A,32HMOV P2,ARET2、PC程序部分Microsoft Visual Studio 2005 Microsoft Visual Studio 2005 是基于NET的开发环境,你可以通过网络找到它,全部文件包括MSDN联机文档大概3.18G,Microsoft Visual Studio 2005 其实包括了VB.NETC#J#ASP等开发语言,我们用VB。NET。很多朋友提到VB,要说的是VB与VB。NET是不同的。几个理由:1、操作系统不断升级,越来越多的新特性需要。NET支持。2、VB。NET编程更简单,功能更强大。3、执行速度,以往大家总拿C与VB比较,认为C快,vb慢,NET平台下,C与vb 仅是描述语言不同,下层执行代码完全统一,没有速度区别。所以我建议使用。Microsoft Visual Studio 2005 安装过程我不说了。使用 Microsoft Visual Studio 2005 简单说一下:启动Microsoft Visual Studio 2005后,选VISUAL BASIC,点击 新建项目,选WINDOWS应用程序,输入项目名称,确定。添加代码 简单说一下,具体请参考相关书籍。如果你了解请跳过此段。要添加代码,我们首先要了解组件的属性、事件、方法。打个比方吧,我们买部汽车,一定要挑挑颜色吧,轮胎多宽,发动机排量等,这是汽车的属性;要让汽车跑起来,我们要踩油门,很显然,发生踩油门的事件时,汽车执行了开动的方法。PC串口发送数据通过串口发送数据的方式分文本和二进制。通常在自动化控制中用二进制发送方式。很多朋友搞不明白,其实很简单:1、文本方式Dim send As Byte()AxMSComm1.CommPort = 1 1 参数设置 设端口号AxMSComm1.Settings = 9600,n,8,1 设波特率AxMSComm1.PortOpen = True 打开端口AxMSComm1.Output = SENDAxMSComm1.PortOpen = False 关闭端口2、二进制方式Dim send As STRINGAxMSComm1.CommPort = 1 1 参数设置 设端口号AxMSComm1.Settings = 9600,n,8,1 设波特率AxMSComm1.PortOpen = True 打开端口AxMSComm1.Output = SENDAxMSComm1.PortOpen = False 关闭端口可以看到除了要发送的数据定义不同,其他完全相同。在本例中,我们要发送的数据包含起始、数据1、数据2、结尾共4个字节,如下:1、首先组合数据 buff = 0A + DATA1 + DATA2 + 0D2、文本转换为二进制数组Dim X As Integer = 1Dim Y As Integer = Len(buff)Dim z As Integer = 0 Dim SEND As Byte()ReDim SEND(Y / 2 - 1)While X YSEND(z) = Val(&H + (Mid(buff, X, 2)z += 1X += 2End While3、通过串口发送二进制数据 TryAxMSComm1.CommPort = 1 1 参数设置 设端口号AxMSComm1.Settings = 9600,n,8,1 设波特率AxMSComm1.PortOpen = True 打开端口AxMSComm1.Output = SENDAxMSComm1.PortOpen = False 关闭端口ToolStripStatusLabel1.Text = (发送成功! + 端口 + Str(AxMSComm1.CommPort) + + 设置 + AxMSComm1.Settings) 显示状态Catch ex As ExceptionMsgBox(发送失败!端口可能被占用或是无效的端口
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 修井工程考试试题及答案
- 山东航空考试试题及答案
- 中考监考考试试题及答案
- 建筑实务考试题及答案
- 食管癌患者的临床观察
- 外科三基试题及答案
- 家电公司税务风险防范办法
- 班主任初中工作计划总结
- 山东省宁阳四中2026届化学高一上期末调研试题含解析
- 2020-2025年消防设施操作员之消防设备中级技能综合检测试卷B卷含答案
- 氧气安全培训课件
- 景区演艺演员管理制度
- 2024年甘肃省张家川回族自治县教育局公开招聘试题含答案分析
- 亲子活动热狗活动方案
- 2025年黑龙江、吉林、辽宁、内蒙古高考生物真题试卷(解析版)
- 河南省郑州市2023-2024学年高一下学期6月期末物理试题(解析版)
- 2024年中级统计师《统计基础理论及相关知识》真题及答案解析
- 智能制造虚拟仿真实训基地建设目标
- 《慢性乙肝治疗策略》课件
- 施工用电合同协议书
- 国际制药工程协会(ISPE)制药工程基本指南水和蒸汽系统
评论
0/150
提交评论