当前位置:文档之家› 单片机串口通信设计方案

单片机串口通信设计方案

单片机串口通信设计方案
单片机串口通信设计方案

单片机串口通信设计方案

1.绪论

1.1课题背景及意义

目前,单片机的发展速度大约每两、三年要更新一代,集成度增加一倍,功能翻一番。其发展速度之快、应用围之广已达到了惊人的地步,它已渗透到生产和生活的各个领域,应用非常广泛。在汽车、通信、智能仪表、家用电器和军事设备的智能化以及实时过程控制等方面,单片机都扮演着非常重要的角色[1]。因此单片机的设计开发具有广阔的前景。所以,对于电气类学生而言,学习一种单片机的开发是十分必要的。而51系列的单片机,随着半导体技术的发展,其处理速度更快,性能更优越,在工业控制领域上占据十分重要的地位,通过对51系列单片机的学习而掌握单片机开发的过程是一种不错的选择。

然而单片机是一门综合性、实践性都很强的学科,其学习涉及的实验环节比较多,硬件设备投入比较大,对于大多数人而言很难投入大笔资金去购买实验器件。而且要进行硬件电路测试和调试,必须在电路板制作完成、元器件焊接完毕之后进行,但这些工作费时费力。因此引入EDA软件仿真系统建立虚拟实验平台,不仅可以大大提高单片机的学习效率,而且大大减少硬件设备的资金投入,同时降低对硬件设备的维护工作。

EDA设计思路是:从元器件的选取到连接、直至电路的调试、分析和软件的编译,都是在计算机中完成,所用的工作都是虚拟的。虽然现在的电路设计软件已经很多,诸如PROTEL、ORCAD、EWB 、Multisim等,不过这些软件之间的差别都不大:都有原理图和PCB制作功能,都能进行诸如频率响应,噪音分析等电路分析,主要用于模拟电路、数字电路、模数混合电路的性能仿真与分析,但对于单片机设计及软件编程,最重要的是两者的联调,这些软件都无法实现,所以造成了单片机系统设计周期长、设计费用高等缺点[2]。新款的EDA软件Proteus解决了上述软件的不足,成为目前最好的一款单片机学习仿真软件。

Proteus 软件是由英国Lab Center Electronics 公司开发的EDA 工具软件。Proteus软件已有近20年的历史,在全球已得到相当广泛的使用。Proteus 软件集成了高级原理布图、混合模式SPICE 电路仿真、PCB 设计以及自动布线来实现一个完整的电子设计系统。Proteus与其它单片机仿真软件不同的是,它不仅能仿真单片机 CPU 的工作情况,也能仿真单片机外围电路或没有单片机参与的其它电路的工作情况。因此在仿真和程序调试时,关心的不再是某些语句执行时单片机寄存器和存储器容的改变,而是从工程的角度直接看程序运行和电路工作的过程和结果。同时,当硬件调试成功后,利用Proteus ARES软件,很容易获得其PCB图,为今后的系统制造提供了方便。对于这样的仿真实验,从某种意义上讲,是弥补了实验和工程应用间脱节的矛盾和现象[3][4]。

Proteus 软件支持许多通用的微控制器,如PCI系列、AVR系列、HC11系列、68000系列、Z80系列、8051系列以及各种外围芯片;包含强大的调试工具,具有对寄存器和存储器,断点和单步模式IAR、C-SPY、Keil、MALAB等开发工具的源程序进行调试的功能;能够观察代码在仿真硬件上的实时运行效果、对显示、按钮、键盘等外设的交互可视化进行仿真;具有6000 多种模拟和数字器件的模型库;具有单步断点设置等调试功能;能够与常用的汇编器、编译器如IAR、Keil、Proton 等协同调试;有直流电流表/电压表、交流电压表/电流表、示波器逻辑分析仪、计数/按时/频率计虚拟终端、SPI 调试器等虚拟仪器,以仿真中的测量记录提供了方便;支持图形化的分析功能,具有频率特性、傅立叶、失真、噪声分析等多种绘图方式、可将仿真曲线精美地绘制出来[3]。

Keil是Keil Software公司开发的,是目前世界上最好的51单片机开发工具之一。软件本身支持数百种51系列单片机机芯,可以用来编译C源码、汇编程序、连接和重定位目标文件和库文件、创建HEX文件、调试目标程序等,是一种集成化文件管理编译环境。它集成了文件编译处理、编译连接、项目管理,窗口、工具引用和软件仿真调试等多种功能,是相当强大的的开发工具[5]。Proteus ISIS与Keil整合起来使用,充分利用各自的仿真功能,单片机的软硬件的调试和仿真,将变得非常直观和生动。

国外的很多知名大学已经开始使Proteus作为他们的教学工具,比如Stanford University,University Of California,Cambridge University,Carlisle college,理工大学,大学,华南理工大学,工程大学等几十所高校。他们一致认为该软件在教学中的应用有很大的帮助,其灵活自主的设计方式使学生更能体验到电子设计的魅力,学生对单片机以及电子设计的兴趣大大提升,知识的掌握和应用当然也有了很大的提高。

虽然Proteus在单片机的学习和应用系统的开发上有着诸多的优点,但是在国的发展才几年的时间,其应用还未普及。因此,通过Proteus仿真平台学习51系列单片机之间的串口通信,是对EDA软件Proteus的使用过程的学习,也为以后利用该软件进行电子设计与开发打下一定的基础,以跟上现代科技的快车去适应激烈竞争的环境。

串行通信是CPU与外界交换信息的一种基本方式,单片机应用于数据采集或工业控制时,往往作为前端机安装在工业现场,远离主机,现场数据采用串行通信方式发送给主机并进行处理,以降低成本,提高通信的可靠性。51系列单片机自身有全双工的异步串行通信接口,实现串行通信极为方便。既可通过一台计算机来控制和监视多台单片机系统,也可实现多台单片机之间的互联,组成不同的控制系统,适应不同的应用场合[6]。实现单片机之间的串口通信所涉及单片机的知识点多,概括了单片机的定时器/计数器功能、中断功能和串行通信功能等,是单片机功能的综合应用。通过Proteus对单片机串行通信的仿真和调试,不仅是对51单片机知识的综合学习,也是熟悉Proteus软件的应用过程。

1.2设计的主要任务

本论文要求在理解串行通信基本知识、学习并掌握51单片机的结构组成、指令系统、C语言程序设计、熟悉Keil软件的编程与调试环境以及掌握Proteus仿真软件的使用环境、元器件调用、虚拟仪器应用、原理图设计、仿真调试的基础上,完成以下4项任务:

1、总结单片机串口通信的基本知识和设计要求,对单片机串口通信的各种控制方案进行比较,选择一个合适的控制方案;

2、根据课题的设计要求,在Proteus仿真环境中设计单片机串口通信硬件电路;

3、在Keil环境中编制串口通信控制程序,并进行编译调试;

4、在Proteus仿真环境中调用硬件电路,加载控制程序,并进仿真调试。

1.3论文的主要容

在本论文中,设计的主要容有五个方面:一是串行通信控制系统方案的选择;二是系统硬件电路的设计;三是系统软件设计;四是系统软件设计;五是系统仿真与调试;六是系统硬件PCB设计。具体章节安排如下:

1、绪论在课题的背景及意义中介绍单片机发展现状、单片机EDA软件Proteus 的优势、Keil集成开发环境软件简介以及单片机通信的描述;此外,还简单的说明介绍了本文设计的主要任务以及论文的主要容。

2、系统方案设计主要论述通信的基本知识和系统的方案选择。系统的方案选择主要包括控制器的选择、串行通信方式比较与方案选择、显示方案比较与选择、编写程序语言比较和选择、串行控制方案确定以及系统框图绘制。

3、系统硬件设计根据控制系统方案在Proteus ISIS原理图编辑环境中绘制系统硬件电路,主要包括原理图文件的创建、图纸大小的设置、原理图中元器件的选取、元器件的放置、电源、地、和输入输出终端的放置、原理图连线、器件统一编号、电气检测以及元器件属性设置等容。

4、系统软件设计主要介绍了在Keil集成开发环境中进行C51语言的编写过程、控制系统程序的编写以及程序流程图绘制。

5、系统仿真与调试完成控制系统在Proteus ISIS环境中的仿真与调试,主要是根据仿真结果验证硬件原理图以及软件编写的是否正确。

6、系统硬件PCB设计完成串行通信单片机最小系统原理图设计与PCB绘制。

通过以上六个方面的阐述说明,将会对单片机串行通信控制系统基于Proteus

的设计、开发与仿真过程以及电路板制作有一个清晰全面的认识。

2.系统方案设计

本文的题目是“基于Proteus的51单片机应用——单片机串行通信设计”,主要是通过单片机串行通信控制系统的设计,来阐述和实践51单片机的应用在Proteus 虚拟实验平台的仿真和调试过程。由于题目没有给出具体的系统功能要求,因此有很大的设计空间。为了很好地在Proteus虚拟实验平台上展示51单片机串行通信的结果,需要自行设计方案。

2.1通信概述及串行通信方式选择

单片机串行通信在本系统设计中十分重要,是设计的核心部分,为此需要在此对通信部分做一些介绍。

2.1.1通信的基本概念

通信是计算机系统中主机与外设之间及主机系统与主机系统之间的数据交换。通信有并行通信和串行通信两种基本方式。两种基本通信方式如图2.1所示。

图2.1 并行通信与串行通信

并行通信的特点就是将多个数据位同时进行传输。通信速度快,但传输的数据有多少位,就相应地有多少根传输线,传输信号线多,传输距离较远时线路复杂,成本高,较适合于短距离的数据通信。

串行通信的特点就是只用一根数据线进行传输,多位数据必须在一根数据线上顺序地进行传送。传输线少,通信线路简单,通信速度慢,成本低,适合于多数位、长距离通信的场合。

串行通信按照信息在设备间的传输方向,还可分为单工、半双工和全双工三种方式。分别如图2.2所示。

在串行通信中,通信双方在任一时刻,只能单方向的传送数据,这样的传送方法称为单工方式。如图2.2(a)所示,通信方甲机只能作为发送方,而通信方乙机只能作为接收方,不能互换。通信双方可通过传输线交替地进行双向传输,每个通信方都可以作为发送方或接收方,但在任一时刻,不能同时作为发送方和接收方,这样的通信方

式称为半双工方式。如图 2.2(b )所示,通信方甲机和通信方乙机都可以作为发送方或接收方,但在任一时刻,不能同时作为发送方和接收方,通软件或硬件设定。通信双方通过两条传输线进行互连,两者之间的数据可以同时进行发送和接收,这样的通信方式称为全双工方式。如图 2.2(c )所示,通信方甲机和通信方乙机同时可以作为发送方和接收方。AT89C51单片机在硬件上具有全双工的结构。

在实际应用中,尽管多数串行通信接口电路具有全双工功能,单一般情况下,多

工作于半双工方式下。因此,为了能够综合展示单片机串行通信的的应用,本系统采用半双工方式。

串行通信中要解决好发送设备与接收设备之间的同步问题,否则会造成某些数据

位的丢失而通信失败。根据采用的同步方式的不同, 将串行通信进一步分为同步串行通信和异步串行通信两种。

异步串行通信方式是将传输的数据按照某种位数进行分组(通常以8位的字节为

单位),在每组数据的前面和后面分别加上一位起始位和一位停止位,根据需要还可以在停止位前加一位校验位,并且停止位的长度还可以增加。这样组合而成的一组数据被称为一帧。异步串行通信的数据传送格式如图2.3所示。

异步串行通信方式的结构简单,但是数据的传送量增加很多,导致传输效率不高,

一般用在对传输速率要求不高的应用中。

同步串行通信方式不再以字节为单位,而是以数据块为单位,每个数据块可以有

多个字节构成,只在每个数据块的前后加上起始位和停止位,这样减少了需要额外传输的控制数据的长度,自然也就提高了传输的效率。同步串行通信的数据传送格式如图2.4

所示。

同步字符1 同步字符2 数据块 校验字符1 校验字符1

图2.3 串行异步通信数据格式

图2.2 通信方式示意图

同步通信方式的软硬件的复杂程度也随之上升,价格比较昂贵,一般只在传输速

率要求较高系统使用。因此本系统采用异步串行通信。

波特率是串行通信中的一个重要概念,它用于衡量串行通信速度的快慢。波特率

是指在串行通信中,单位时间里传输的二进制代码的位数,单位是b/s 或bps (位/秒)。例如:每秒钟传输120个字符,每个字符由10个二进制位(其中1个起始位、8个数据位和一个停止位),其波特率为120字符/秒×10位/字符=1200位/秒。在异步串行通信中,波特率一般为50-9600bps 。

在串行传输中,二进制数据序列是以数字波形表示的,发送时,在发送时钟的作

用下将移位寄存器的数据串行移位输出;接收时,在接收时钟的作用下将通信线上传来的数据串行移入移位寄存器。所以,发送时钟和接收时钟也可称为移位时钟,能产生该时钟的电路称为波特率发送器。

为了提高采样的分辨率,准确地测定数据位的上升沿或下降沿,时钟频率总是高

于波特率若干倍,这个倍数称为波特率因子。在单片机中,发送/接收时钟可以由系统时钟osc f 产生,其波特率因子可为12、32和64,根据方式而不同。此时波特率由osc f 决定,称为固定方式频率方式;也可由单片机部定时器T1产生,T1工作于自动再装入8位定时方式(方式2)。由于定时器的计数初值可以人为改变,T1产生的时钟频率也可以改变,因此称为可变波特率方式。当然,也可以用用T2作为波特率发生器

[7]。

2.1.2 51系列单片机串行口的功能

51单片机的串口是一个可编程的全双工串行通信接口,通过软件编程,它可以

作为通用异步接收和发送UART 使用,可以同时发送、接收数据。发送、接收数据可以通过查询或中断方式处理,使用十分灵活,能方便的与其他计算机或串行传送信息的外部设备(如串行打印机、CRT 终端)实现双机、多机通信。其帧格式为:1个起始位,8或9个数据位和1个停止位。51单片机的串口也可以作为同步移位寄存器。

51单片机的串口有4种工作方式,分别是方式0、方式1、方式2、方式3。其

中:

方式0,为同步移位寄存器方式,一般用于外接移位寄存器芯片扩展I/O 接口;

方式1,是8位的异步通信方式,通常用于双机通信。

方式2和方式3,是9位的异步通信方式,通常用于多机通信。

不同的工作方式,其波特率不一样,方式0和方式2的波特率直接由系统时钟产

生,方式1和方式3的波特率由定时器/计数器T1或T2的溢出频率决定[7]。

2.1.3 51系列单片机的串行结构

51系列的单片机串行口主要由发送数据寄存器、发送控制器、输出控制门、接

收数据寄存器、接收控制器和输入移位寄存器等组成,它的结构如图2.5所示:

图2.4 串行同步通信数据格式

图2.5 51单片机串行口结构图

串行通信数据寄存器SBUF,字节地址为99H,实际对应两个寄存器:发送数据寄存器、接收数据寄存器。当CPU向SBUF写数据时对应的是发送数据寄存器;当CPU 读SBUF时,对应的是接收数据寄存器。

特殊功能寄存器SCON用于存放串行口的控制信息和状态信息。根据对其写控制字决定工作方式,从而决定波特率发生器的时钟来自系统时钟还是来自定时器T1或T2。特殊功能寄存器PCON的最高位SMOD为串行口波特率的倍增控制位。51单片机的串行口正是通过对上述专用寄存器的设置、检测与读写来管理串行通信的。

在进行通信时,外界的串行数据是通过引脚RXD(P3.0)输入的。输入数据先逐位进入输入移位寄存器,再送入接收SBUF,在此采用了双缓冲结构,这是为了避免在接收到第二帧数据之前,CPU未及时响应接收器的前一帧的中断请求而把前一帧数据读走,造成两帧数据重叠的错误。对于发送器,因为发送时CPU是主动的,不会产生写重叠的问题,一般不需要双缓冲器结构,为了保持最大的传送速率,仅用了SBUF 一个缓冲器。TI和RI为发送和接收中断标志,无论哪个为1,只要中断允许,都会引起中断[8]。

2.1.4 51系列单片机串口工作原理

设有两个单片机串行通信,甲机发送,乙机接收,如图2.6所示。

图2.6 51单片机串行传送示意图

发送数据时,当执行一条向SBUF写入数据时把数据写入串口发送数据寄存器,就启动发送过程。串行通信中,甲机CPU向SBUF写入数据(MOV SBUF,A),就启动发送过程。在发送时钟控制下,先发送一个低电平的起始位,紧接着把A中的数据送入SBUF,在发送控制器的控制下,按设定的波特率,每来一个移位时钟,数据移出移一位,由低位到高位一位一位发送到电缆线上,移出的数据位通过电缆线直达乙机。最后发送一个高电平的停止位。一个字符发送完毕,串行口控制寄存器中的发送中断标志位T1置位。(对于方式2和方式3,当发送完数据位后,要把串行口控制寄存器SCON 中的TB8位发送出去后才能发送停止位)。

乙机按设定的波特率,每来一个移位时钟及移入一位,由低位到高位一位一位移入到SBUF。一个移出,一个移进,很显然,如果两边的移位速度一致,甲机移出的数据位正好被乙机移进,就能完成数据的正确传送;如果不一致,则必然会造成数据位的丢失。因此,两边的波特率必须一致。当甲机一帧数据发送完毕(或称发送缓冲器空),硬件置位发送中断标志位TI(SCON.1),该位可作为查询标志,如果设置为允许中断,则将引起中断,甲机的CPU可发送下一帧数据。

作为接受方的乙机,需预先设置位REN(SCON.4),即允许接收。当REN置位1,接收控制器就开始工作,对接收数据线进行采样,当采样到从“1”到“0”的负跳变时,接收控制器开始接收数据。为了减少干扰的影响,接收控制器在接收数据时,将一位的传送时间分成16等分,用当中的7、8、9三个状态对接收数据线进行采样,三次采样当中,当两次采样为低电平时,就认为接收的是“0”,两次采样为高电平,就认为接收是“1”。如果接收是起始位的值不是“0”,则起始位无效,复位接收电路;如果起始位为“0”,则开始接受其它数据。甲方的数据按设定的波特率由地位到高位顺序进入乙机的移位寄存器。当一帧数据到齐(接收缓冲器满)后(接收的前8位数据依次移入输入移位寄存器,接收是第9位数据置入串口控制寄存器的RB8位中),硬件自动置位接收中断标志RI(SCON.0),通知CPU来取数据。该位可作为查询标志,如果设置为允许中断,将引起接收中断,乙机的CPU可通过读SBUF(MOV A,,SBUF),将帧数据读入,从而完成了一帧数据的传送。

无论是单片机之间,还是单片机和PC机之间,串行通信双方的波特率必须相同,

才能完成数据的正确传送[7]。

2.1.5 51系列单片机多机通信

多机应用是指在一个系统中用到了多块单片机。它是单片机在高科技领域的主要

应用,主要用于一些大型的自动化控制系统。这时整个系统分成了多个子系统,每个子系统是一个单片机系统,用于完成本系统的工作,即从上级主机接收信息,并发送信息给上级主机。上级主机则根据接收的下级子系统的信息,进行判断,产生相应的处理命令传送给下级子系统。

通过51单片机串口能够实现一台主机与多台从机进行通信,主机和从机之间能

够相互发送和接收信息。主机可以向各个从机或指定的从机发送信息,各个从机发送的信息只能被主机接收,但从机与从机之间不能相互通信。

单片机串行多机通信必须使用串口模式2和模式3。在多机通信中,为了保证主

机能够正确识别所选是从机并进行通信,主,从机需要正确地设置和判断多机通信控制位SM2和发送/接收的第9位信息,TB8,RB8。主机在发送信息时,依靠TB8标志位来区分发送的信息为地址信息还是数据信息。当设置TB8=1,时,发送的是地址信息;当设置TB8=0时,发送的是数据或者命令信息。从机主要依靠SM2标志位的设置来实现对主机的响应。当从机的SM2=1时,该从机只接受地址帧,对数据帧不进行处理,即只有接收的RB8位等于1数据时,接收才有效,RI 才置1,对接收的RB8位等于0的数据不进行处理。当SM2=0时,无论接收的是地址帧TB8=1还是数据帧RB8=0,接收都有效,RI 都置1。

多级通信时,主机每一次都向从机传送至少两字节信息,先传送从机的地址信息,

再传送数据信息。处理时,地址信息的TB8位设为1,数据信息的TB8位设为0。硬件线路如图2.7所示。

单片机多机通信的过程如下:

1.所有从机复位,置SM2=1,使其处于准备接收一帧地址数据的状态;

2.主机设置第9位TB8=1,发送一帧地址信息,与所需要的从机进行联系;

3.各从机接收到地址信息后,分别于自己的地址进行比较,对于地址相符的从机,

置SM2=0

,以便于接收主机随后发送的所有信息;对于地址不相符的从机,仍保持图2.7 多机通信线路图

SM2=1,对主机随后发送的数据不进行处理。

4.主机发送控制指令和数据给从机,此时一帧数据的第9位TB8=0。

5.当从机接收数据结束的时候,置SM2=1,返回接收地址帧状态。

6.主机继续发送其它地址帧,与其它从机进行通信。

多机通信协议约定:

主机为了正确地和指定的从机正确的通信,双方需要对各种数据、地址、指令和状态等进行明确的约定。本系统的通信协议作如下规定:

主机的控制命令:01H表示主机请求从机接收数据;02H表示主机请求从机发送数据。其它保留,可定义其它用途。

从机的地址定义在00H到FEH之间,即系统中最多允许连接255个从机。对于地址FFH定义为对所有从机都有效的控制命令,用于将各从机恢复到复位状态,即SM2=1。

按照上面的协议规定:主机首先发送地址帧,被寻址的从机向主机回送本地地址。

主机判断地址是否相符,然后给被寻址的从机发送控制命令,被寻址的从机根据其命令向主机发送本地机状态。若主机判断状态正常,即开始发送或接收数据,后面紧跟的便是数据,若主机判断不正常,需要重新联系。为了能够实现多单片机之间的数据传送,本系统采用多机通信模式[8][9][10]。

2.2 模块化方案比较与选择

根据51单片机的串行通信的特点,进行了以下系统设计的方案比较与选择。2.2.1单片机芯片的方案选择

方案一:

采用MCS-51芯片,MCS-51是Intel公司单片机的典型代表,部有4KB ROM空间。其结构典型、总线完善、SFR集中管理,并且具有丰富的位操作系统和面向控制功能的指令系统[11]。但是,MCS-51系列单片机在实际应用中使用较少。

方案二:

采用AT89C51芯片作为硬件核心,AT89系列机是ATMEL公司将先进的Flash存储器技术和Intel 80C51单片机相结合的产物,是与MCS-51系列兼容的Flash单片机系列。它既继承了MCS-51原有的功能,又拥有自己是独特功能是目前应用广泛的主流单片机。AT89C51是AT89系列的标准型单片机,是低功耗高性能的8位单片机,使用的最高晶振频率为24MHz。采用Flash ROM,部具有4KB ROM 存储空间,能于3V

的超低压工作,而且与MCS-51系列单片机完全兼容,可反复进行系统实验[12]。因此,采用该单片机作为主控制系统的芯片。

2.2.2显示模块方案选择

方案一:

采用LED数码管动态扫描,LED数码管价格适中,对于显示数字合适,采用动态扫描法与单片机连接时,虽然占用的单片机口线少,但连线还需要花费一点时间,所以也不用此种作为显示。

方案二:

采用点阵式数码管显示,点阵式数码管是由八行八列的发光二极管组成,对于显示文字比较适合,如采用在显示数字显得太浪费,且价格也相对较高,所以也不用此种作为显示。

方案三:

采用LCD液晶显示屏,液晶显示屏的显示功能强大,可显示大量文字、图形、符号显示多样,清晰可见。由于本系统主机显示4个数据,从机显示2个数据,选择2

16

的液晶显示器皆可,所以在此设计中采用LCD1602液晶显示屏。

2.2.3 软件编程语言的选择

方案一:

采用汇编语言编写,汇编语言是一种用文字助记符来表示机器指令的符号语言,是最接近机器码的一种语言。其主要优点是占用资源少、程序执行效率高。但是汇编语言可读性差,而且不同的CPU,其汇编语言可能有所差异,也不易移植。因此本系统软件不采用汇编语言编写。

方案二:

采用C语言编写,C语言是一种结构化的高级语言。其优点是可读性好,移植容易,是普遍使用的一种计算机语言。用C语言来编写目标系统软件,会大大缩短开发周期,且明显地增加软件的可读性,便于改进和扩充,从而研制出规模更大、性能更完备的系统。缺点是占用资源较多,执行效率没有汇编高。但本系统只进行单片机之间的数据传送,不涉及复杂的数据处理,因此本系统软件采用C语言编写[8]。

2.3总体方案设计

本系统是由一个上位机系统和三个下位机系统构成,上位机系统是由AT89C51单片机串行通信最小系统、LCD1602显示器、中断发送信号按钮和接收/发送选择开关组成。三个下位机系统的构成完全相同主要有AT89C51单片机串行通信最小系统、LCD1602显示器和中断数据加1按钮组成。单片机最小系统是控制系统的核心,LCD1602液晶显示器作为串行通信接收/发送数据以及单片机状态的显示。上位机系统的发送/接收状态可以通过接收/发送选择开关进行控制,处于发送数据状态时,由中断发送信号按钮决定是否给从机发送数据。下位机系统始终处于串行中断状态,是接收还是发送数据由上位机发送的控制命令决定。系统框图如图2.8所示。

图2.8 串行通信系统框图

本系统主要完成的功能是上位机和下位机的半双工通信,可以通过接收/发送选择开关来控制上位机是处于接收状态还是发送状态。当处于接收状态时,主机循环接收下位机00#、01#、02#三机的实时数据,并进行显示;当处于发送状态时,主机将接收到的三机数据按从大到小的数据排列,然后依次发送到00#、01#和02#机上,并进行显示。从机的数据通过外部中断输入,数据从0开始每来一次中断数据加1,加到9数据清0,再从0到9进行循环。

2.4本章小结

本章介绍了系统的方案选择,主要对单片机串行通信的相关知识进行了归纳整理和工作方式选择,以及模块化方案的比较与选择,最后确定了串行通信控制系统要实现的功能并绘制了系统框图。

3.系统硬件设计

根据总体设计方案框图,总系统由4个分系统组成,1个上位机系统,3个下位机系统。硬件主要由AT89C51微控制器、LCD1602液晶显示器、开关和按钮组成。

3.1硬件电路核心器件介绍

本系统的两大核心器件位AT89C51单片机和LCD液晶显示器,AT89C51单片机完成系统的功能控制部分,液晶显示器完成通信过程中数据的实时显示。

3.1.1 AT89C51的主要特点

AT89C51是美国ATMEL公司生产的低电压,高性能CMOS的 8位单片机,采用单一+5V电源供电,片含4KB的可反复擦写的只读程序存储器(PEROM)和128B的随机

存取数据存储器(ROM ),器件采用ATMEL 公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片置通用8位中央处理器(CPU )和Flash 存储单元。功能强大AT89C51单片机可提供许多高性价比的应用场合,可灵活应用于各种控制领域。

AT89C51的主要部件:

(1)一个以ALU 为中心的8位中央处理器,完成运算和控制功能。

(2)128B 的部数据存取存储器(部RAM ),其地址空围00H-7FH 。

(3)21个特殊功能寄存器,离散分布于地址80H-FFH 中。

(4)程序计数器PC ,是独立的16位专用寄存器,容为将要执行的指令地址。

(5)4KB Flash 部程序存储器(片ROM),用来存储程序、原始数据、表格等。

(6)4个8位可编程I/O 口(P0、P1、P2和P3)。

(7)一个UART 串行通信口。

(8)2个16位定时器/计数器。

(9)5个中断源,两个中断优先级的中断控制系统。

(10)一个片振荡器和时钟电路。

AT89C51的极限参数如表1所示:

AT89C51单片机双列直插式引脚图如图3.1所示,其引脚说明如下:

(1)电源引脚

Vcc (40):接DC 电源端,Vcc=+5V %20 。

GND (20):接地端。

(2)P0-P3引脚

P0口:是一组8位漏极开路型双向I/O ,也

即地址/数据总线复用口。作为输出口用时,每位

能以吸收电流的方式驱动8个TTL 逻辑门电路,

对端口写“1”可作为高阻抗输入端用。

P1口:是一个带部上拉电阻的8位双向I/O

口,P1的输出缓冲级可驱动(吸收或输出电流)

4个TTL 逻辑门电路。作输入口使用时,因为部

存在上拉电阻,某个引脚被外部信号拉低时会输

出一个电流(IIL )。

P2口:是一个带有部上拉电阻的8位双向I/O 工作温度 -55℃到+125℃ 储藏温度 -65℃到+150℃ 任一引脚对地电压 -1.0V 到+7.0V 最高工作电压

6.6V 直流输出电流 15.0mA

图3.1 AT89C51双列直插式引脚图

表1 AT89C51的极限参数:

口,P2的输出缓冲级可驱动(吸收或输出电

流)4个TTL逻辑门电路。对端口写“1”,通过部的上拉电阻把端口拉到高电平,此时可作输入口。作输入口使用时,因为部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。

P3口:是一组带有部上拉电阻的8位双向I/O口,P3口输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。作输入端时,被外部拉低的P3口将用上拉电阻输出电流(IIL)。

P3口除了作为一般的I/O口线外,更重要的用途是它的第二功能,如表2所示:

(3)时钟引脚

XTAL1(19):振荡器反相放大器的及部时钟发生器的输入端。

XTAL2(18):振荡器放大器的输出端。

(4)控制线引脚

RST(9):复位输入端。此引脚出现至少两个机器周期的高电平,将单片机复位。

ALE/)

((30):地址锁存/编程脉冲。对Flash存储器编程期间,该引脚用

PROG

于输入编程脉冲)

PROG

(。

PSEN(29):外部ROM读选通信号。当AT89C51由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN有效,即输出两个脉冲,在此期间,当访问外部数据存储器,这两次有效的PSEN信号不出现。

EA/VPP(31):、外ROM选择/编程电源。EA为片外ROM选择端。当EA保持高电平时,先访问片ROM,当PC的值超过4KB时,自动转向执行片外ROM中的程序。。当EA保持低电平时,只访问片ROM。在Flash存储器编程期间,该引脚用于施加编

程电压Vpp[13]。

3.1.2 LCD1602液晶显示器模块

1602是一款常用的字符型液晶,可显示2行16个字符。1602液晶模块带标准字库,部的字符发生存储器(CGROM)已经存储了160个5?7点阵字符图形,32个5?10点阵字符图形。这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等。每一个字符都有一个固定的代码,这个代码就是对应字符的ASCⅡ码。比如大写的英文字母“A”的代码是01000001B(41H),显示时,只要将41H存入显示数据存储器DDRAM即可,液晶自动将地址41H中的中的点阵字符图形显示出来,我们就能看到字母“A”。

1602采用标准的16引脚接口,引脚图如图3.2所示,其功能如表3所示。其中8位数据总线D0-D7和RS、R/W、EN三个控制端口,个

分解时序操作速度支持到1MHz,并且带有字符对比度调

节和背光。

当RS和RW同时为低电平时,可以写入指令或显示

地址;当RS为低电平,RW为高电平时,可以读忙信号;

当RS为高电平,RW为低电平时,可以写入数据。

1602LCD主要技术参数:显示容量:16×2个字符、

芯片工作电压:4.5—5.5V、工作电流:2.0mA(5.0V)、模

块最佳工作电压:5.0V、字符尺寸:2.95×4.35(W×H)mm。

图3.2 1602引脚图

编号符号引脚说明使用方法

1 VSS 电源地-

2 VDD 电源-

3 V0 对比度信号调整端外接分压电阻,调节屏幕亮度

4 RS 数据/命令选择端RS=1时选择数据寄存器,RS=0时选择指令寄存器

5 RW 读/写选择端RW=1时执行读操作,RW=0时执行写操作

6 E 使能信号端高电平使能

7-14 D0-D7 数据I/O 双向数据输入与输出

15 BLA 背景光源正极接到或通过10Ω左右电阻接到VDD

16 BLK 背景光源负极接到VSS

对1602显示字符控制,通过访问1602部RAM地址实现,1602部控制具有80 字节RAM,RAM地址与字符位置对应关系如图3.3所示。

1602的读/写操作,即显示控制,是通过控制指令实现的,控制指令如表4所示[7][14]。

指令名称指令功能D7 D6D5 D4D3 D2 D1D0 模式设置设置为16×2,5×7点阵,8位数据接口0 0 1 1 1 0 0 0

开/关及光标设置D=1开显示;D=0关显示0 0 0 0 1 D C B C=1显示光标;C=0不显示光标0 0 0 0 1 D C B B=1光标闪烁;B=0光标不显示0 0 0 0 1 D C B

输入模式设置N=1光标右移;N=0光标左移0 0 0 0 0 1 N S S=1文字移动有效;S=0文字移动无效0 0 0 0 0 1 N S

3.2电路原理图设计

电路原理图设计是在实现系统功能基础之上,进行器件选型、器件值计算以及整合模块功能电路。但是在Proteus ISIS仿真环境中AT89C51微控制器和LCD1602的外围电路可以不加,通过属性设置对话框可以直接设置AT89C51的外部晶振频率,加载程序即可实现仿真。具体的电路模块设计说明将在本文第六部分AT89C51最小系统的外围电路中详细介绍,在此不再累述。本节主要介绍如何在Porteus ISIS环境中进行原理图绘制和原理图电气检测。

3.2.1原理图硬件连接说明

根据选择的设计方案,以及系统框图,可将硬件作如下连接:主、从机系统的液晶显示器的数据I/O口D0-D7依次接AT89C51的P1.0-P1.7端口,液晶显示器的RW 读/写选择端、RS数据/命令选择端和E使能信号端依次接AT89C51的P2.0、P2.1和P2.2端口。上位机系统接收/发送选择开关上拉电阻接单片机的P0.0口,中断发送信号按钮上拉电阻接单片机P3.2外部中断0输入端。三个下位机系统的中断数据加1按钮上拉电阻接单片机P3.2外部中断0输入端。

原理图中所有器件及其标称值、数量和代号如表5所示。

图3.3 1602的RAM地址与字符位置对应关系

表 5 元器件列表

3.2.2 基于Proteus ISIS系统原理图设计

Proteus ISIS 原理图设计是具智能性和人性化的设计,过程简明高效。ISIS原理图输出流程包括设置编辑环境、原理图连线、建立网络表、报表输出等过程。本系统的原理图绘制过程如下[3][12]:

1.启动PROTEUS ISIS图标 ,进入ISIS窗口,如图3.4所示:

ISIS 主要包括:菜单栏、工具栏、对象预览窗口、编辑区、器件选择按钮、对

象选择器、仿真按钮、方位控制按钮、状态栏等。

2.创建原理图文件

单击菜单栏中的“FILE/NEW DESIGN ”,弹出如图3.5所示的新建设计(Create New

Design )对话框。单击“OK ”按钮,则以默认的模板(DEFAULT )建立一个新的空白文件。

3.4 ISIS 窗口

单击工具按钮,取文件名“串行通信原理图”,后缀为DSN是系统自动加上去是,然后单击保存按钮,则完成新建文件操作。

3.设置图纸大小

根据设计串行通信原理图的大小,默认的A4的原理图纸不能满足设计的要求,需要对图纸的大小重新设置。单击“System/Set Sheet Size”,出现如图3.6所示的对话框,选择“User(自定义)”复选框,定义长为16in,宽位8in,点击“OK”。

图3.6 图纸大小设置窗口

4.从库中选择原理图中的元器件

单击如图3.7所示中的“P”按钮,弹出如图3.8所示的元器件选择框。在“Keyword”栏中输入元器件“AT89C51”,则可元器件列表。从列表中选中AT89C51行后,再双击,便将AT89C51选入对象选择器中。同样的方法把原理图中的其他器件放入对象选择器中,以备画原理图时调用。

5.放置元器件

在如图3.9所示的对象选择器中选择取AT89C51元器件,再在如图3.10所示的ISIS编辑区空白处单击,即可将元器件AT89C51放置在原理图编辑区中。同样的方法把对象选择器中的其他器件放入原理图编辑区中,以备原理图连线。

图3.7 选取元件按钮图3.8 元器件选择框

6.放置电源、地、和输入输出终端

单击绘图工具中的终端按钮 ,在对象选择器中单击终端符号POWER,放置电

源,单击GROUND 放置地,单击DEFAULT 放置普通端子,如图3.11所示。

7.连线

单击自动布线图标 ,自动布线有效,根据原理图中器件的接线,单击要连线

的起点和终点,系统便会自动以直角走线,成连线。连线结果如图3.12所示。

8.统一编号

单击"Toos /Global Anntator",弹出如图3.13

所示的整体编号对话框,在围框

图3.9 对象选择器 图3.10 放置AT89C51

AVR单片机串口多机通讯程序

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系列单片机之串口通信

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单片机串口通信,232通信,485通信,程序

51单片机串口通信,232通信,485通信,程序代码1:232通信 #include #define uchar unsigned char #define uint unsigned int uchar flag,a,i; uchar code table[]="i get"; void init() { TMOD=0X20; TH1=0XFD; TH0=0XFD; TR1=1; REN=1; SM0=0; SM1=1; EA=1; ES=1; } void main() { init();

while(1) { if(flag==1) { ES=0; for(i=0;i<6;i++) { SBUF=table[i]; while(!TI); TI=0; } SBUF=a; while(!TI); TI=0; ES=1; flag=0; } } } void ser() interrupt 4 {

RI=0; a=SBUF; flag=1; } 代码2:485通信 #include #include"1602.h" #define uchar unsigned char #define uint unsigned int unsigned char flag,a,i; uchar code table[]="i get "; void init() { TMOD=0X20; TH1=0Xfd; TL1=0Xfd; TR1=1; REN=1; SM0=0; SM1=1; EA=1; ES=1;

} void main() { init_1602(); init(); while(1) { if(flag==1) { display(0,a); } } } void ser() interrupt 4 { RI=0; a=SBUF; flag=1; } Love is not a maybe thing. You know when you love someone.

51单片机串口调试实验(C语言)

//以下程序都是在VC++6.0 上调试运行过的程序,没有错误,没有警告。 //单片机是STC89C52RC,但是在所有的51 52单片机上都是通用的。51只是一个学习的基础平台,你懂得。 //程序在关键的位置添加了注释。 /****************************************************************************** * * 实验名: 串口实验 * 使用的IO : P2 * 实验效果: 将接收到发送回电脑上面。 * 注意: ******************************************************************************* / #include void UsartConfiguration(); /****************************************************************************** * * 函数名: main * 函数功能: 主函数 * 输入: 无 * 输出: 无 ******************************************************************************* / void main() { UsartConfiguration(); while(1) { } } /****************************************************************************** * * 函数名:UsartConfiguration() * 函数功能:设置串口 * 输入: 无 * 输出: 无 ******************************************************************************* / void UsartConfiguration() { SCON=0X50; //设置为工作方式1

组态王与单片机多机串口通信的设计

组态王与单片机多机串口通信的设计 发布: 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 所示。

单片机串口通信的发送与接收(可编辑修改word版)

51 单片机的串口,是个全双工的串口,发送数据的同时,还可以接收数据。 当串行发送完毕后,将在标志位TI 置1,同样,当收到了数据后,也会在RI 置1。无 论RI 或TI 出现了1,只要串口中断处于开放状态,单片机都会进入串口中断处理程序。在中断程序中,要区分出来究竟是发送引起的中断,还是接收引起的中断,然后分别进行处理。 看到过一些书籍和文章,在串口收、发数据的处理方法上,很多人都有不妥之处。 接收数据时,基本上都是使用“中断方式”,这是正确合理的。 即:每当收到一个新数据,就在中断函数中,把RI 清零,并用一个变量,通知主函数, 收到了新数据。 发送数据时,很多的程序都是使用的“查询方式”,就是执行while(TI ==0); 这样的语句来 等待发送完毕。 这时,处理不好的话,就可能带来问题。 看了一些网友编写的程序,发现有如下几条容易出错: 1.有人在发送数据之前,先关闭了串口中断!等待发送完毕后,再打开串口中断。 这样,在发送数据的等待期间内,如果收到了数据,将不能进入中断函数,也就不会保存的这个新收到的数据。 这种处理方法,就会遗漏收到的数据。 2.有人在发送数据之前,并没有关闭串口中断,当TI = 1 时,是可以进入中断程序的。 但是,却在中断函数中,将TI 清零! 这样,在主函数中的while(TI ==0);,将永远等不到发送结束的标志。 3.还有人在中断程序中,并没有区分中断的来源,反而让发送引起的中断,执行了接收 中断的程序。 对此,做而论道发表自己常用的方法: 接收数据时,使用“中断方式”,清除RI 后,用一个变量通知主函数,收到新数据。 发送数据时,也用“中断方式”,清除TI 后,用另一个变量通知主函数,数据发送完毕。 这样一来,收、发两者基本一致,编写程序也很规范、易懂。 更重要的是,主函数中,不用在那儿死等发送完毕,可以有更多的时间查看其它的标志。 实例: 求一个PC 与单片机串口通信的程序,要求如下: 1、如果在电脑上发送以$开始的字符串,则将整个字符串原样返回(字符串长度不是固定的)。

PC机串口与多个单片机红外无线通信的实现

《工业控制计算机》!""#年$%卷第%期&’机串口与多个单片机红外无线通信的实现 周文举山东枣庄师专计算机系 (!%%$(")&’机与一台或多台单片机的通信系统中的数据通讯一般 采用的是串行通信方式。串行通信可采用有线与无线两种方式,作者根据单片机串行通信原理、脉冲编码调制)&’*+技术和红外无线通信技术,开发设计了单片机编解码红外无线通信接口。用该接口构成的多机通信系统,由于采用红外线为传输介质,而不是电缆线和电磁波,所以特别适用于那些不适合或不方便架设电缆线及电磁干扰较强的工作环境。本文就利用红外技术实现&’机与多台单片机无线串行通信的实现作一介绍。 !多机通信原理 在多机数据通信系统中,&’机与单片机之间的数据通信采 用一对多的主从模式,利用波长为,#"!-的远红外波通信。其原理示意图如图$。主机为&’机,从机选择*’./0$系列单片机,在&’机上用12345675328(9"编制一个主程序,负责发送从机地址、控制命令和从站之间的信息传输及调度,从站则负责收集现场信息,进行一定的数据处理,根据主站的要求返回数据,并执行主站发出的命令。主站&’机与从站之间的信息交换是通过*.’:--控件来实现。在采用主从式多机串行通信系统中,从机不主动发送命令或数据,一切都由主机控制。并且在一个多机通信系统中,只有一台&’机作为主机,各从机之间不能直接相互通讯,即使有信息交换也必须通过主机转发。由于发送和接收共用同一物理信道因此在任意时刻只允许一台从机处于发送状态,其余的从机不能发送。只有被主机呼叫的从机才能占用总线, 对主机做出应答。 图$&’机与一单片机串行通信 每台从机均分配有一个唯一的从机地址,主机与从机通信时,主机先呼叫某从机地址,唤醒被叫从机后,主、从两机之间进行数据交换,而未被呼叫的从机则继续进行各自的工作。主机发送的信息可以传到多个从机或指定的从机,各从机发送的信息只能被主机接收。单片机通过对多机通信控制位.*!进行置位和复位来控制正确接收地址和数据信号,在返回数据时通过设 ;7<为"或$来区别返回的是数据还是地址。只有正确地完成 了接收和发送任务,才能触发有效的;=,>=信号,进而完成下一步的通信。接收时,检测>=是否建立起来,当>=为高电平,表示接收完毕。发送时,检测;=是否建立起来,当;=为高电平时说明 发送已经完成。而在主机上也要设立相应的多机通信机制,这一任务是通过改变*.’:--控件的.?@@2AB 属性中的奇偶校验位来实现的。发送和接收地址时置奇偶校验位为*,则主机在发送地址过程中发送的第,位;7<为$,而在接收地址时,只有接收到的第,位>7<为$时才能引起’:--CD?A@属性的变化,从而触发EA’:--事件;发送和接收数据时,置该位为.。则主机在发送数据过程中发送的第,位;7<为",而在接收数据时,只有接收到的第,位>7<为"时才能引起’:--CD?A@属性的变化,从而触发EA’:--事件。 在本设计中主机微机发送字符与接受字符均采用查询方式,发送前先读取通信或状态寄存器,查询发送保持寄存器空否?接收前先读取通信或状态寄存器,查询一帧数据收完否?从机采用中断方式,即接收到地址帧后就进行串行口中断申请,’&F 响应后, 进入中断服务程序。在通信协议中规定:"单片机以方式G 进行通信,一帧数据的第,位为“$”,代表地址帧,为“"”,代表数据帧。#设定通信波特率为,(""HI3;$地址帧为"$JKLLJ 代表!00台从机地址。%""J 是以地址帧形式发送的一条对所有从机起作用的控制命令,命令各从机恢复.*!M$,等待接收状态。 为了实现多机通信,所有发射电路的振荡频率和所有的接收电路的振荡频率都必须调整一致,为保证正常通信,防止自己发自己接,数据传送方向必须为半双工传送,收发器在发射时,必须屏蔽自己的接收中断,发射结束后再开放中断。 多机通信过程为: $)主机*.’:--的属性.?@@2AB3M “,("",*,<,$”,所有从机的.*!M$,处于地址帧接收状态。 !) 主机发送一帧地址信息,其中包含<位地址,第,位为“$”,与所需的从机进行联络。 G ) 从机接收到地址信息后,各自将其与自己的地址相比较;对于地址相符的从机使>=M",;7

单片机与pc串口通信

课程设计报告书课程名称:MCS-51单片机课程设计题目:单片机与PC机之间的通信 姓名:高永强 学号:010700830 学院:电气工程与自动化学院专业:电气工程与自动化 年级:2007级 指导教师:张丽萍

目录 1.引言与系统结构 (2) 2.硬件实现 2.1.AT89C52 (2) 2.2.MAX232芯片 (3) 2.3. 9针串口 (5) 3.虚拟串口调试 (7) 4.Proteus仿真原理图及元件清单 (14) 5.软件设计 (15) 6.主程序代码 (16) 7.心得体会 (18) 8.参考文献 (18)

1.引言与系统结构:利用PC 机配置的异步通信适配器,可以方便的完成 PC 机遇89C52单片机的数据通信。由于89C52单片机输入、输出电平为TTL 电平,而PC 机配置的是RS-232标准串行接口,二者的电器规范不一致,因此采用MXA232单芯片 实现89C52单片机于PC 机的RS-232标准接口通信电路。 如今,在很多场合中,要求单片机不仅能独立完成单机的控制任务,还要能与其他数据控制设备(单片机、PC 机等)进行数据交换。串口通讯对单片机而言意义重大,不但可以实现将单片机的数据传输到电脑端,而且也能实现电脑对单片机的控制,比如可以很直观地把红外遥控器键值的数据码显示在电脑上,可以使编写红外遥控程序时方便不少,起到仿真器的某些功效。 89C52有一个全双工的串行通讯口,所以单片机和电脑之间可以方便地进行串口通讯。进行串行通讯时要满足一定的条件,比如电脑的串口是RS232电平的,而单片机的串口是TTL 电平的,两者之间必须有一个电平转换电路,我们采用了专用芯片MAX232进行转换,虽然也可以用几个三极管进行模拟转换,但是还是用专用芯片更简单可靠。我们采用了三线制连接串口,也就是说和电脑的9针串口只连接其中的3根线:第5脚的GND.第2脚的RXD.第3脚的TXD 。 图 1 系统结构 2.硬件实现: 2.1 .AT89C52: AT89C52是51系列单片机的一个型号,它是ATMEL 公

单片机串口通信C程序及应用实例

一、程序代码 #include//该头文件可到https://www.doczj.com/doc/9e2292614.html,网站下载#define uint unsigned int #define uchar unsigned char uchar indata[4]; uchar outdata[4]; uchar flag; static uchar temp1,temp2,temp3,temp; static uchar R_counter,T_counter; void system_initial(void); void initial_comm(void); void delay(uchar x); void uart_send(void); void read_Instatus(void); serial_contral(void); void main() { system_initial(); initial_comm(); while(1) { if(flag==1) { ES = 0; serial_contral(); ES = 1; flag = 0; } else read_Instatus(); } } void uart_send(void) { for(T_counter=0;T_counter<4;T_counter++) { SBUF = outdata[T_counter]; while(TI == 0);

TI = 0; } T_counter = 0; } uart_receive(void) interrupt 4 { if(RI) { RI = 0; indata[R_counter] = SBUF; R_counter++; if(R_counter>=4) { R_counter = 0; flag = 1; } } } void system_initial(void) { P1M1 = 0x00; P1M0 = 0xff; P1 = 0xff; //初始化为全部关闭 temp3 = 0x3f;//初始化temp3的值与六路输出的初始值保持一致 temp = 0xf0; R_counter = 0; T_counter = 0; } void initial_comm(void) { SCON = 0x50; //设定串行口工作方式:mode 1 ; 8-bit UART,enable ucvr TMOD = 0x21; //TIMER 1;mode 2 ;8-Bit Reload PCON = 0x80; //波特率不加倍SMOD = 1 TH1 = 0xfa; //baud: 9600;fosc = 11.0596 IE = 0x90; // enable serial interrupt TR1 = 1; // timer 1 RI = 0; TI = 0; ES = 1; EA = 1; }

C51单片机和电脑串口通信电路图

C51单片机和电脑串口通信电路图与源码 51单片机有一个全双工的串行通讯口,所以单片机和电脑之间可以方便地进行串口通讯。进行串行通讯时要满足一定的条件,比如电脑的串口是RS232电平的,而单片机的串口是TTL电平的,两者之间必须有一个电平转换电路,我们采用了专用芯片MAX232进行转换,虽然也可以用几个三极管进行模拟转换,但是还是用专用芯片更简单可靠。我们采用了三线制连接串口,也就是说和电脑的9针串口只连接其中的3根线:第5脚的GND、第2脚的RXD、第3脚的TXD。这是最简单的连接方法,但是对我们来说已经足够使用了,电路如下图所示,MAX232的第10脚和单片机的11脚连接,第9脚和单片机的10脚连接,第15脚和单片机的20脚连接。 串口通讯的硬件电路如上图所示 在制作电路前我们先来看看要用的MAX232,这里我们不去具体讨论它,只要知道它是TTL和RS232电平相互转换的芯片和基本的引脚接线功能就行了。通常我会用两个小功率晶体管加少量的电路去替换MAX232,可以省一点,效果也不错,下图就是MAX232的基本接线图。

按图7-3加上MAX232就可以了。这大热天的拿烙铁焊焊,还真的是热气迫人来呀:P串口座用DB9的母头,这样就可以用买来的PC串口延长线进行和电脑相连接,也可以直接接到电脑com口上。

为了能够在电脑端看到单片机发出的数据,我们必须借助一个WINDOWS软件进行观察,这里我们利用一个免费的电脑串口调试软件。本串口软件在本网站https://www.doczj.com/doc/9e2292614.html,可以找到 软件界面如上图,我们先要设置一下串口通讯的参数,将波特率调整为4800,勾选十六进制显示。串口选择为COM1,当然将网站提供的51单片机实验板的串口也要和电脑的COM1连接,将烧写有以下程序的单片机插入单片机实验板的万能插座中,并接通51单片机实验板的电源。

基于单片机的串口通信模块设计

1 绪论 1.1 研究背景 通信是指不同的独立系统利用线路互相交换数据,它的主要目的是将数据从一端传送到另一端,实现数据的交换。在现代工业控制中,通常采用计算机作为上位机与下层的实时控制与监测设备进行通讯。现场数据必须通过一个数据收集器传给上位机,同样上位机向现场设备发命令也必须通过数据收集器。串行通信因其结构简单、执行速度快、抗干扰能力强等优点,已被广泛应用于数据采集和过程控制等领域。 计算机与外界的信息交换称为通信。基本的通信方式有并行通信和串行通信两种。串行通信是指一条信息额各位数据被逐位按顺序传送的通信方式。串行通信的特点是:数据位传送,按位顺序进行,最少只需要一根传输线即可完成,成本低但传送速度快,串行通信的距离可以从几米到几千米。 随着计算机技术尤其是单片微型机技术的发展,人们已越来越多地采用单片机来对一些工业控制系统中如温度、流量和压力等参数进行监测和控制。PC机具有强大的监控和管理能力,而单片机则具有快速及灵和的控制特点,通过PC 机的RS-232串行接口与外部设备进行通信,是许多测控系统中常用的一种通信解决方案。而随着USB接口技术的成熟和使用的普及,由于USB 接口有着 RS-232(DB-9)串口无法比拟的优点,RS-232(DB-9)串口正在逐步地为USB 接口所替代。而在现在的大多数笔记本电脑中,出于节省物理空间和用处不大等原因,RS-232(DB-9)串口已不再设置,这就约束了基于RS-232(DB-9)串口与PC 机联络的单片机设备的使用围。当前USB接口逐步取代RS-232(DB-9)串口已是大势所趋,单片机同计算机的USB通信在实际工作中的应用围也将越来越广。本文所介

51单片机与串口通信(含代码)

51单片机与串口通信(含代码) 串口调试 1. 发送:向总线上发命令 2. 接收:从总线接收命令,并分析是地址还是数据。 3. 定时发送:从内存中取数并向主机发送. 经过调试,以上功能基本实现,目前可以通过上位机对单片机进行实时控制。 程序如下: //这是一个单片机C51串口接收(中断)和发送例程,可以用来测试51单片机的中断接收 //和查询发送,另外我觉得发送没有必要用中断,因为程序的开销是一样的 #i nclude #i nclude #i nclude #define INBUF_LEN 4 //数据长度 unsigned char inbuf1[INBUF_LEN]; unsigned char checksum,count3 , flag,temp,ch; bit read_flag=0; sbit cp=P1^1; sbit DIR=P1^2; int i; unsigned int xdata *RAMDATA; /*定义RAM地址指针*/ unsigned char a[6] ={0x11,0x22,0x33,0x44,0x55,0x66} ; void init_serialcomm(void) { SCON=0x50; //在11.0592MHz下,设置串行口波特率为9600,方式1,并允许接收

PCON=0x00; ES=1; TMOD=0x21; //定时器工作于方式2,自动装载方式TH0=(65536-1000)%256; TL0=(65536-1000)/256; TL1=0xfd; TH1=0xfd; ET0=1; TR0=1; TR1=1; // TI=0; EA=1; // TI=1; RAMDATA=0x1F45; } void serial () interrupt 4 using 3 { if(RI) { RI=0; ch=SBUF; TI=1; //置SBUF空 switch(ch) { case 0x01 :printf("A"); TI=0;break; case 0x02 :printf("B"); TI=0;break; case 0x03 :printf("C"); TI=0;break; case 0x04 :printf("D"); TI=0;break; default :printf("fg"); TI=0;break; } }

实验单片机与PC机串口通信

实验单片机与PC机串口通信(C51编程)实验 要求: 1、掌握串行口的控制与状态寄存器SCON 2、掌握特殊功能寄存器PCON 3、掌握串行口的工作方式及其设置 4、掌握串行口的波特率(bondrate)选择 任务: 1、实现PC机发送一个字符给单片机,单片机接收到后即在个位、十位数码管上进行显示,同时将其回发给PC机。要求:单片机收到PC机发来的信号后用串口中断方式处理,而单片机回发给PC机时用查询方式。 采用软件仿真的方式完成,用串口调试助手和KEIL C,或串口调试助手和PROTEUS分别仿真。 需要用到以下软件:KEIL,VSPDXP5(虚拟串口软件),串口调试助手,Proteus。 (1)虚拟串口软件、串口调试助手和KEIL C的联调 首先在KEIL里编译写好的程序。

打开VSPD,界面如下图所示:(注明:这个软件用来进行串口的虚拟实现。在其网站上可以下载,但使用期为2周)。 左边栏最上面的是电脑自带的物理串口。点右边的addpair,可以添加成对的串口。一对串口已经虚拟互联了,如果添加的是COM3、COM4,用COM3发送数据,COM4就可以接收数据,反过来也可以。 接下来的一步很关键。把KEIL和虚拟出来的串口绑定。现在把COM3和KEIL绑定。在KEIL中进入DEBUG模式。在最下面的COMMAND命令行,输入 modecom39600,0,8,1 %分别设置com3的波特率、奇偶校验 位、数据位、停止位 assigncom3sout %把单片机的串口和COM3绑定到一 起。因为所用的单片机是

(以上参数设置注意要和所编程序中设置一致!) 打开串口调试助手 可以看到虚拟出来的串口COM3、COM4,选择COM4,设置为波特率9600,无校验位、8位数据位,1位停止位(和COM3、程序里的设置一样)。打开COM4。 现在就可以开始调试串口发送接收程序了。可以通过KEIL发送数据,在串口调试助手中就可以显示出来。也可以通过串口调试助手发送数据,在KEIL中接收。 实验实现PC机发送一个字符给单片机,单片机接收到后将其回发给PC机。在调试助手上(模拟PC)发送数据,单片机收到后将收到的结果回送到调试助手上。 2、以下在Proteus和串口调试助手实现的结果: 将编译好的HEX程序加载到Proteus中,注意这里需要加上串口模块,用来进行串行通信参数的设置。 点击串口,可以对串口进行设置: 用串口调试助手发送数据,即可看到仿真结果。 实验参考程序源文件在exp2-comm文件夹中。

基于51单片机的双机串行通信课程设计 1000110061

基于AT89C51单片机的双机串行通信设计 姓名:杨应伟 学号:100110061 专业:机械设计制造及其制动化 班级:机电二班

前言 单片机广泛应用于仪器仪表、家用电器、医用设备、航空航天、专用设备的智能化管理及过程控制等领域随着计算机技术的发展及工业自动化水平的提高, 在许多场合采用单机控制已不能满足现场要求,因而必须采用多机控制的形式,而多机控制主要通过多个单片机之间的串行通信实现。串行通信作为单片机之间常用的通信方法之一, 由于其通信编程灵活、硬件简洁并遵循统一的标准, 因此其在工业控制领域得到了广泛的应用。 在测控系统和工程应用中,常遇到多项任务需同时执行的情况,因而主从式多机分布式系统成为现代工业广泛应用的模式。单片机功能强、体积小、价格低廉、开发应用方便,尤其具有全双工串行通讯的特点,在工业控制、数据采集、智能仪器仪表、家用电器方面都有广泛的应用。同时,IBM-PC机正好补充单片机人机对话和外围设备薄弱的缺陷。各单片机独立完成数据采集处理和控制任务,同时通过通信接口将数据传给PC机,PC机将这些数据进行处理、显示或打印,把各种控制命令传给单片机,以实现集中管理和最优控制。串行通信是单片机的一个重要应用,本次课程设计就是要利用单片机来完成一个系统,实现爽片单片机床航通信,通信的结果使用数码管进行显示,数码管采用查表方式显示,两个单片机之间采用RS-232进行双击通信。 在通信过程中,使用通信协议进行通信。在测控系统和工程应用中,常遇到多项任务需同时执行的情况,因而主从式多机分布式系统成为现代工业广泛应用的模式。单片机功能强、体积小、价格低廉、开发应用方便,尤其具有全双工串行通讯的特点,在工业控制、数据采集、智能仪器仪表、家用电器方面都有广泛的应用。同时,IBM-PC机正好补充单片机人机对话和外围设备薄弱的缺陷。各单片机独立完成数据采集处理和控制任务,同时通过通信接口将数据传给PC机,PC机将这些数据进行处理、显示或打印,把各种控制命令传给单片机,以实现集中管理和最优控制。 串行通信是单片机的一个重要应用,本次课程设计就是要利用单片机来完成一个系统,实现爽片单片机床航通信,通信的结果使用数码管进行显示,数码管采用查表方式显示,两个单片机之间采用RS-232进行双击通信。在通信过程中,使用通信协议进行通信。

单片机之间的串行通讯

桂林电子科技大学微机与单片机接口 设 计 报 告 指导教师:吴兆华 学生:王晓鹏 学号:092011211 2010 年6月25日

一、设计题目 单片机之间的串行通讯 二、设计内容与要求 实现两个单片机之间的串行通讯,并用数码管分别显示两个单片机的数据,以验证通讯是否成功。 三、设计目的意义 当前,各种简单实用的通讯系统,使其达到数据传送稳在测控系统和工程应用中,常遇到多项任务需同时执行的情况,即主从式多机分布式系统成为现代工业广泛应用的模式。由于单片机功能强、体积小、价格低廉、开发应用方便,尤其具有全双工串行通讯的特点,在工业控制、数据采集、智能仪器仪表等方面都有广泛的应用。利用单片机的串行通信技术设计一定可靠,使用方便,可扩展为DCS系统应用于工业领域,将有广泛的实际应用价值。单片机除了需要外围器件完成特定的功能外,在很多的应用中单片机之间通讯及单片机和外围器件之间的数据交换,多年来国内外在信息的处理特别是控制和信息传输通讯领域有着十分广泛的应用。 四、系统硬件原理图 图 1 系统硬件原理图 五、程序流程图与源程序 软件的设计是重要的。它的好坏直接关系设计的成功与否。软件是用C

语言完成的,需要能熟练的掌握C语言,还要熟悉AT89S52单片机。从程序流程图、通信协议、波特率计算、编写程序、编译、和烧入软件的操作,到最后的调试,是很复杂的。下面作详细介绍: 1、程序流程图 图2 程序流程图 2、 C语言程序 (1)主机的程序 #include /********变量说明***********/ unsigned char i,j,k,KEY,flag; unsigned char time1,time2,time3; unsigned int code ; a[11]={0x00,0x3F,0x7D,0x5B,0x5B,0x00,0x76,0x79,0x38,0x38,0x3f

单片机与PC机串口通信实现正文

毕业设计(论文)课题:单片机与PC机串口通信实现 学生: 孙波系部: 通信工程 班级: 通信1301 学号: 2013120325 指导教师: 童华 装订交卷日期: 2016年x月x日 装订顺序: (1)封面(2)毕业设计(论文)成绩评定记录(3)标题、中文摘要及关键词(4)正文(5)附录(6)参考文献

毕业设计(论文)成绩评定记录表 注:1.此表适用于不参加毕业答辩学生的毕业设计(论文)成绩评定; 2.平时成绩占40%、卷面评阅成绩占60%,在上面的评分表中,可分别按40分、60分来量化评分,二项相加所得总分即为总评成绩,总评成绩请转换为优秀、良好、中等、及格、不及格五等级计分。 教务处制

重庆电子工程职业学院 毕业设计(论文)开题报告 系别通信工程专业通信技术班级通信1301 学生姓名孙波学号2013120325 指导教师童华 一、毕业设计的内容和意义: 目前,随着计算机和微电子技术的高速发展,单片机在国民经济的各个领域的智能化控制中得到了非常广泛的应用。单片机已成为信息处理、物联网络、通信设备、工业控制、家用电器等各个领域不可缺少的智能部件。在一些工业控制中,经常需要以单片机作为下位机执行对被控对象的直接控制,以PC机为上位机完成复杂的数据处理,组成主从式控制系统。 为了提高系统管理的先进性,计算机工业自动控制和监测系统越来越多的采用主从式系统。较为常见的形式是由一台做管理用的上位机计算机(主机)和一台直接参与控制检测的下位机单片机(从机)构成的主从式系统,主机和从机之间以通讯的方式来协调工作。主机的作用一是向从机发送各种命令及参数;二是要及时收集、整理和分析从机发回的数据,供进一步的决策。从机被动的接收、执行主机发

单片机串行通信实验

单片机实验报告 实验名称:串行通信实验 姓名:高知明 学号: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 void main(void) { SCON=0X40; //设置串口为接受,REN=0 PCON=0; //波特率不倍频 REN=1; TMOD=0X20; //启动定时器1的方式2 TH1=0XFD; TL1=0XFD; //初值:0XFD TR1=1; //启动定时器1 while(1) {SBUF='U'; while(!TI); TI=0; //发送中断清0 }} 2)硬件图:

2、接受装置: 1)C51程序: #include char s[32]; void main(void) { char a,b=0; SCON=0X40; //设置串口为接受,REN=0 PCON=0; //波特率不倍频 REN=1; TMOD=0X20; //启动定时器1的方式2 TH1=0XFD; TL1=0XFD; //初值:0XFD TR1=1; //启动定时器1 a=32; for(;b

相关主题
文本预览
相关文档 最新文档