******************************************************************************* 实验十八单片机自发自收串口通信实验
*******************************************************************************
串口按全双工方式收、发数据,要求将内部RAM中30H单元开始的20个数据发送出去,同时自己接收该20个数据,并把它们存入内部RAM中50H开始的数据单元中,波特率为2400bps,fosc=11.0592M ,发送与接收数据采用中断方式进行。响应中断后,通过检测是RI 置位还是TI置位来确定是进行数据发送或是接收数据。
⑴自发自收汇编调试程序如下:
ORG 0000H
LJMP MAIN
ORG 0023H
AJMP SBS1 ;转至中断服务子程序
ORG 0050H
MAIN: MOV SP,#60H
MOV TMOD,#20H ;定时器1设为模式2
MOV TL1,#0FAH ;
MOV TH1,#0FAH ;置定时器初值
SETB TR1 ;启动T1
MOV SCON,#50H ;将串口设置为方式1,REN=1
MOV R0,#30H ;发送数据区首地址送R0
MOV R1,#50H ;接收数据区首地址送R1
MOV R2,#20H ;置发送数据个数送R2
LCALL SOUT ;调用发射子程序
SETB ES ;
SETB EA ;开中断
LOOP: AJMP LOOP ;等待中断
ORG 0100H ;中断服务子程序
SBS1: JNB RI,SEND ;TI=1,为发送中断
ACALL SIN ;RI=1,为接收中断
SJMP NEXT
SEND: ACALL SOUT ;调用发送子程序
NEXT: RETI
SOUT: CLR TI ;清发送中断标志
DJNZ R2,LOOP1 ;数据未发送完,继续发送
SJMP RR1 ;发送完返回
LOOP1: MOV A,@R0 ;取发送数据到A
MOV SBUF,A ;发送数据
INC R0 ;指向下一个数据
RR1: RET
SIN: CLR RI ;清接收中断标志
MOV A,SBUF ;读接收数据
MOV @R1,A ;存入数据缓冲区
INC R1 ;指向下一个存储单元
RET
⑵RS232通信芯片的测试
该芯片把TTL电平转换成为RS232电平,或把RS232电平转换成TTL电平。
RS232电平标准是:-12V∽-15V为逻辑“1”,+12V∽+15V为逻辑“0”。
在15米范围内,最大传输波特率为20KB/S。
为了看到RS232芯片各相关引脚波形,在参考程序的SEND:ACALL SOUT后应增加一条AJMP SEND指令,在该处循环发送数据,则MAX232芯片的11脚上应能测到0V∽+5V的脉冲波,在14脚上可看到-10V∽+10V的脉冲波。若D型头2∽3短接,在MAX232芯片的13脚上可看到-10V∽+10V的脉冲,12脚上可看到0V∽+5V的脉冲波,并可一直传送到单片机的RXD端。当发送信号波形正确后,一定要去掉添加的指令,再执行指令,自发自收的数据应准确发送与接收。
若数据不能正确的发送,可检查MAX232芯片的1脚,是否有+5V∽+10V的矩形波,3脚是否有0V∽+5V的矩形波,4脚是否有0V∽+8V的矩形波,5脚有-10V∽0V的矩形波,2脚为+10V的高电平,6脚为-10V的低电平。当出现不正常现象时,要检查倍压电容和滤波电容及MAX232芯片。
******************************************************************************* 实验十九单片机双机通信实验
*******************************************************************************
//以下程序都是在VC++6.0 上调试运行过的程序,没有错误,没有警告。 //单片机是STC89C52RC,但是在所有的51 52单片机上都是通用的。51只是一个学习的基础平台,你懂得。 //程序在关键的位置添加了注释。 /****************************************************************************** * * 实验名: 串口实验 * 使用的IO : P2 * 实验效果: 将接收到发送回电脑上面。 * 注意: ******************************************************************************* / #include
A VR单片机串口多机通讯程序 [日期:2010-09-01 ] [来源:本站原创作者:admin] [字体:大中小] (投递新闻) 在多机通信过程中,所有设备的RS232接口是并在通信线上的,其中只能有一个设备为主机,其他为从机,通信由主机发起。数据帧一般采用1位起始位、9位数据位,其中第9位(RXB8)被用作为表征该帧是地址帧还是数据帧。当帧类型表征位为“1”时,表示该帧数据为一个地址帧;当帧类型表征位为“0”时,表示这个帧为一个数据帧。 在A VR中,通过设置从机的UCSRA寄存器中标志位MPCM,可以使能USART接收器对接收的数据帧进行过滤的功能。如果使能了过滤功能,从机接收器对接收到的那些不是地址信息帧的数据帧将进行过滤,不将其放入接收缓冲器中,这在多机通信中有效的方便了从机MCU处理数据帧程序的编写(同标准51 结构相比)。而发送器则不受MPCM位设置的影响。 多机通信模式允许多个从机并在通信线路上,接收一个主机发出的数据。通过对接收到的地址帧中的地址进行解码,确定哪个从机被主机寻址。如果某个从机被主机寻址,它将接收接下来主机发出的数据帧,而其它的从机将忽略数据帧,直到再次接收到一个地址帧。(从机地址是由各个从机自己的软件决定的)。 对于在多机通信系统中的主机MCU,可以设置使用9位数据帧结构(UCSZ=7)。当发送地址帧时,置第9位为“1”;发送数据帧时,置第9位为“0”。在这种情况下,从机也必须设置成接收9位数据帧结构。 多机通信方式的数据交换过程如下: 1)设置所有从机工作在多机通信模式(MPCM=1)。 2) 通信开始是由主机先发送一个地址帧,如8位数据为0X01(1号从机地址),第9位=“1”,呼叫1号从机。 3)所有从机都接收和读取该主机发出的地址帧。在所有从机的MCU中,RXC标志位被置位,表示接收到地址帧。 4)每一个从机MCU读UDR寄存器,并判断自己是否被主机寻址。如果被寻址,清UCSAR寄存器中的MPCM位,等待接收数据;否则保持MPCM为“1”,等待下一个地址帧的接收(该步应由用户软件处理实现): A)作为1号从机的MCU处理过程为:收到地址帧后,判定读取UDR数据0X01为自己的地址,将MPCM位置“0”,接收之后所有主机下发的数据帧,直到下一个地址帧为止。 B)其它从机MCU的处理过程:收到地址帧后,判定读取UDR数据0X01不是自己的地址,将MPCM位置“1”,这样他们将忽略主机随后发送的数据帧,直到主机再次发送地址帧。 5)当被寻址的从机MCU接收完最后一个数据帧后,将MPCM位置位,等待下一个地址帧的出现(该步也应由用户软件处理实现),然后从步骤2开始重复。 [转]例子; 通讯规则: 1:时钟7.3728 MHz/波特率9600/9个数据位/奇校验/1个停止位/硬件多机通讯功能/ 2:通讯连接采用硬件MAX485,双向单工
51系列单片机之串口通信 单片机的串口通信看起来是很复杂的,主要是因为他用到了更多的寄存器, 与前面的知识相比他更具综合能力,写起来考虑的问题自然也变多了.而前面学 习过的定时器与中断将是单片机通信的基础. 单片机的中断系统中第4 个中断 就是串口中断,要进行串口通信首先就要打开CPU 总中断EA,还要打开串口通 信中断ES,这是串口通信的前堤,而串口通信也跟计时器一样有很多的模式,因此 我们还要设置SCON 寄存器来指定采用哪一种方式进行通信,而在通信的过程中,我们还要设定通信的波特率,不然的话,单片机是没办法进行采样的,这样也不会得 到正确的结果了.我在实验过程中用到的是1 号定时器来设定的波特率,用到了 计时器方式2,也就是8 位自动重装,这样可以简化编程,她的实现思想就是将常 数放入TH,而TL 中则是初始化参数,当溢出时,单片机会自动将TH 中的常数装 入TL 中. 再来说说波特率,我们为什么要设定波特率,因为单片机会以16 倍波 特率的速度进行采样,而在实验中我们用的是10 位异步收发方式,因此要将SM0 置0,SM1 置1.而其中的10 位有8 位数据位,第一位和最后一位是发送数据的起 始与结束.采用高的皮特率就不会出错啦.而波特率是有一个公式的:方式0 的波 特率= fosc/12 方式2 的波特率=(2SMOD/64)- fosc 方式1 的波特率=(2SMOD/32)-(T1 溢出率)方式3 的波特率=(2SMOD/32)-(T1 溢出率)T1 溢出率= fosc /{12 乘以[256 -(TH1)]}根据公式我们很容易就算出当晶 振为110592HZ 时,要达到9600 的波特率,我们只需要将TL1 置FDH 即可,如下图: 除此之外,你还要将SCON 中的REN 位置1,不然的话,单片机是不会接收数 据的. 还有不要忘了选择定时器的工作方式,设置TMOD 为0x20 既是工作方式2,8 位自动重装定时器. 这样一来,初始批工作算是差不多了.而串口通信分为中 断方式,和查询方式,如果你想用查询方式你也不用设置IE 寄存器了. 在串口通
上位机与51单片机串口通信 目录: 1、单片机串口通信的应用 2、PC控制单片机IO口输出 3、单片机控制实训指导及综合应用实例 4、单片机给计算机发送数据: [实验任务] 单片机串口通信的应用,通过串口,我们的个人电脑和单片机系统进行通信。 个人电脑作为上位机,向下位机单片机系统发送十六进制或者ASCLL码,单片机系统接收后,用LED显示接收到的数据和向上位机发回原样数据。 [硬件电路图] [实验原理] RS-232是美国电子工业协会正式公布的串行总线标准,也是目前最常用的串 行接口标准,用来实现计算机与计算机之间、计算机与外设之间的数据通讯。 RS-232串行接口总线适用于:设备之间的通讯距离不大于15m,传输速率最大为20kBps。RS-232协议以-5V-15V表示逻辑1;以+5V-15V 表示逻辑0。我们是用MAX232芯片将RS232电平转换为TTL电平的。一个完整的RS-232接口有22 根线,采用标准的25芯插头座。我们在这里使用的是简化的9芯插头座。 注意我们在这里使用的晶振是11.0592M的,而不是12M。因为波特率的设置 需要11.0592M的。 “串口调试助手V2.1.exe”软件的使用很简单,只要将串口选择‘CMO1’波 特率设置为‘9600’数据位为8 位。打开串口(如果关闭)。然后在发送区里 输入要发送的数据,单击手动发送就将数据发送出去了。注意,如果选中‘十六 进制发送’那么发送的数据是十六进制的,必须输入两位数据。如果没有选中, 则发送的是ASCLL码,那么单片机控制的数码管将显示ASCLL码值。
//参考源程序 #include "reg52.h" //包函8051 内部资源的定义 unsigned char dat; //用于存储单片机接收发送缓冲寄存器SBUF里面的内容sbit gewei=P2^4; //个位选通定义
组态王与单片机多机串口通信的设计 发布: 2011-8-18 | 作者: —— | 来源:ranhaiyang| 查看: 300次| 用户关注: 1 引言随着工业化要求提高,分布式系统发展以及控制设备与监控设备之间通讯需要,组态软件设计的监控系统逐步普及。现在组态软件繁多,比如KingVieW(组态王)、MCGS、WinCC等。KingView 软件基于Microsoft Windows XP,NT/2000操作系统.具有友好的人机操作界面、强大的IO设备端口驱动能力,可与各种PLC、智能仪表、智能模块、板卡、变频器等实时通讯。由于在检测大量模拟量的工业现场使用PLC与组态软件通讯势必增加产品成 1 引言 随着工业化要求提高,分布式系统发展以及控制设备与监控设备之间通讯需要,组态软件设计的监控系统逐步普及。现在组态软件繁多,比如KingVieW(组态王)、MCGS、WinCC 等。KingView软件基于Microsoft Windows XP,NT/2000操作系统.具有友好的人机操作界面、强大的IO设备端口驱动能力,可与各种PLC、智能仪表、智能模块、板卡、变频器等实时通讯。由于在检测大量模拟量的工业现场使用PLC与组态软件通讯势必增加产品成本。而单片机接口丰富,与A/D转换模块组合可以完成相同的工作,并且系统可靠、成本低。 2 组态王与单片机的串口通讯方法 目前,组态王与单片机的通信多是通过动态数据交换(DDE)或通过自己开发通讯驱动程序完成。DDE是Windows平台上的一个完整的通信协议,组态王通过该协议与其他应用程序交换数据。但不可靠和非实时。而自己开发通讯驱动程序会带来设计困难,增加系统开发周期,可行性不高。组态王专门提供一种与单片机多机串口通信方法,可满足大多数系统需求。 3 PC机与单片机的硬件接口电路 图1为上位PC机与下位单片机80C51的连接电路。PC机与单片机本身都自带串行通讯接口,但由于在分布式系统中PC机与各单片机的分布不集中,不能利用RS-232通讯传输,只能改用RS-485。RS-485采用差分式传输信号,最大传输距离为1 219 m.最大传输速率为10 Mb/s.对同时出现的两条信号线A、B的干扰有较强的抑制能力。当两条线绞在一起时,被通信各种分布参数耦合过来的干扰信号可平均地分配到这两条线上,因此对RS-485的差分式传输线路而言,用双绞线可获得较强的抗干扰能力。RS-485采用二线
单片机各种通信方式的特点和主要应用场合 串口用的比较多: RS232,用于与标准的RS232设备通讯 网卡,用于互联网或采用网卡端口的设备通讯 I2C,用于单片机自己外设或多个单片机之间通讯 CAN,工业标准,汽车中常用 并口: 并口就是直接将数据输入或输出,多少位数据就要用多少根线,此外还要加上控制线2根以上。 例如8位的数据通讯,至少用10根线。由于单片机的引脚数目有限,这种方法很不实用。 并行口现在计算机都几乎不用了。如果感兴趣,你就找以前的计算技术方面的书上还有介绍。 并口线路复杂,可靠性低,速度低,除了早期的打印机还用,也几乎没有这样的外设了。 大家好,通过前一期的学习,我们已经对ICD2 仿真烧写器和增强型PIC 实验板的使用方法及学习方式有所了解与熟悉,学会了如何用单片机来控制发光管、继电器、蜂鸣器、按键、数码管等资源,体会到了学习板的易用性与易学性,看了前几期实例,大部分都是基于单片机端口操作原理呢? 大家是否觉得这样一个单片机系统似乎缺少点什么呢?不错,本期我们将介绍单片机与电脑通讯,使单片机与PC 机能够联机工作。 单片机除了需要控制外围器件完成特定的功能外,在很多应用中还要完成单片机和单片机之间、单片机和外围器件之间,以及单片机和微机之间的数据交换和指令的传输,这就是单片机的通信。单片机的通信方式可以分为并行通信和串行通信。并行方式传送一个字节的数据至少需要8 条数据线。 一般来讲单片机与打印机等外围设备连接时,除8条数据线外,还要状态、应答等控制线,当传送距离过远时电线要求过多,成本会增加很多。单片机的串行通信方法较为多样,传统的串行通信方式是通过单片机自带的串行口进行RS232 方式的通信。 串行通信是以一位数据线传送数据的位信号,即使加上几条通信联络控制线,也比并行通信用的线少。 因此,串行通信适合远距离数据传送,如大型主机与其远程终端之间,处于两地的计算机之间,采用串行通信就非常经济。 串行通信又分为异步传送和同步传送两种基本方式。 异步通讯:异步通信传输的数据格式一般由1个起始位、7 个或8 个数据位、1 到2 个停止位和一个校验位组成。它用一个起始位表示字符的开始,用停止位表示字符的结束。其每帧的格式如图1 所示。
单片机实验报告 实验名称:串行通信实验 姓名:高知明 学号:110404320 班级:通信3 实验时间:2014-6-11 南京理工大学紫金学院电光系
一、实验目的(四号+黑体) 1、理解单片机串行口的工作原理; 2、学习使用单片机的TXD\RXD口; 3、了解MAX232芯片的作用; 二、实验原理 MCS-51单片机内部集成有一个UART,用于全双工方式的串行通信,可以发送、接收数据。他有两个相互独立的接收、发送缓冲器,这两个缓冲器同名(SBUF),共用一个地址号(99H)。发送缓冲器只能写入,不能读出,接受缓冲器只能读出,不能写入。要发送的字节数据直接写入发送缓冲器。SBUF=a;当UART接收到数据后,CPU从接收缓冲器中读取数据,a=SBUF;串行口内部有两个移位寄存器,一个用于串行发送,一个用于串行接收。定时器T1作为波特率发生器,波特率发生器的溢出信号昨接受或发送移位寄存器的位移时钟。TI与RI分别为发送完数据的中断标志,用来想CPU发中断请求。 三、实验内容 1、发送信号 1)C51程序: #include