利用单片机实现波特率自检测的设计

摘要

高速发展的计算机业需要新型人才,需要具有创新的技术、专业的知识和富有团队作业能力的人才,踏着豪迈的脚步我们随着时间走进了21世纪,21世纪科学技术的飞快发展,人们不但在学习,工作方面有了更高的追求。他们已经不再局限于仅能做到,而是追求着更高的质更高飞跃和省时,省事,低成本成本的快捷方式。在当今社会,各种智能化控制系统均离不开数据信息的传输。其中波特率自动检测应用技术在单片机应用中占有很重要的一部分。通过学习单片机技术,解决实际生活中波特率自动检测的一种方案,性能,特点等,从而应用到实际当中去.通过对单片机的学习,开发出一个完整的系统.包括硬件设计,制作,独立运行及调试的软件及编程。

关键词:波特率检测

目录

摘要 (1)

1. 前言 (3)

1.1课题简介 (3)

1.2单片机的生产与发展 (4)

1.3单片机的特点及应用 (5)

1.4AT89S51系列单片机介绍 (6)

1.4.1 基本特性 (6)

3. 总体设计电路图及工作原理 (7)

2.1机型及器件的选择 (7)

2.2软、硬件功能划分 (7)

3. 系统硬件设计 (8)

3.1系统硬件电路设计 (8)

3.2硬件设计电路原理图 (9)

3.3各元件说明 (9)

3.3.1 AT89S51芯片 (9)

3.3.2 MAX232CPE芯片 (10)

4. 系统软件设计 (13)

4.1编程思路 (13)

4.1.1 详细设计 (15)

4.1.2 编写程序 (15)

4.2七段数码显示电路 (16)

4.2.1 接口及写入电路 (16)

总结 (17)

致谢...................................................... 错误!未定义书签。参考文献. (18)

附录1 (19)

附录2 (20)

利用单片机实现波特率自检测

1. 前言

1.1 课题简介

此课题的设计的目的和意义是以实用性的产品为设计对象,通过完整的设计和制作过程,使我们进一步清楚了解波特率自检测设计制作的流程和特点。

该设计项目采用了AT89S51芯片和MAX232CPE系列芯片.以往设计波特率自检测产品常常需要相应的自动检测专业知识和昂贵的专业设备,而且传统的电路方案不是电路太复杂就是调试困难而令人们望而却步,以致影响了用户的使用和新产品的开发研制工作.自从波特率MCU的出现,使人们摆脱了传统的自动检测产品设计的困扰.波特举MCU性能优异,小巧灵活,价格低廉等,其显著特点是所需外围元件少,线路简单.因而设计非常方便.该系统不仅可以很轻松的实现波特举的自动检测,而且可以使用于不同的单片机上.

随着电子技术的发展,由单片机构成的测控系统,利用PC机的串口测试模拟系统进行定时,灵活的控制以成为测控技术发展的一个方向.针对实际工作系统中存在的串口波特率自检测问题.提出了利用MAX232CPE来解决的一种实现波特率自检测的方法.

工作原理通是过本课题的研究,可以让我们了解到AT89S51芯片,并且深刻了解由AT89S51芯片和MAX232CPE芯片性能,特点等,从而应用到实际当中去.通过对单片机的学习,开发出一个完整的系统.包括硬件设计,制作,独立运行及调试的软件的编程。

串行通信是终端和主机之间的主要通信方式,通信波特率一般选择1800、4800、9600和 19200等。终端的类型有很多种,其通信速率也有很多种选择。主机怎样确定终端的通信速率呢?本文给出了一种简单、易行的方法:设定主机的接收波特率(以9600波特为例),终端发送一个特定的字符(以回车符为例),主机根据接收到的字符信息就可以确定终端的通信波特率。

通讯线上的字符是按位传送的,每一位信号持续的时间是由数据传送速率决定的既为波特率。

89S51的波特率的计算公式是波特率=定时器的溢出率*2smod/32

由上面公式可知我们只要得到传送数据中一位的持续时间,那么波特率就可以求出来。

在方案确定之前我们已经了解本项目的目的和意义,本次设计可能用到的知识和可以使用的芯片等元件,要进一步的了解。介绍一些可以使用的芯片类型。对项目有一个初步的了解。接下来查阅资料,比较各种方案,同时到市场上查询元器件,从而确定一套最优的方案。针对课题,实现所涉及到的应用软件讲解和项目设计所容易出现的问题进行分析:即在项目实施过程中,在调试过程中加以具体研究和学习。尤其对于在电路调试运行过程中出现的问题,请教老师共同探讨解决。

在本课题中,自检测芯片主要担当测控系统中单片机和微机之间的数据传输中的波特率进行检测出来.可以说,自检测芯片相当于是单片机测控系统中的一个特殊的执行元件.

单片机与微机之间的数据传输过程是:单片机处理需要发送的数据,利用串口将数据传输到数据传输模块的发送端,数据接收后进行自动检测出波特率数值并计算其数值并显示出来。

按照系统设计功能的要求初步确定设计系统包括初始化,接收发送和校验等功能模块,可以在各种复杂的工业现场高效而准确地进行计算出波特率数据。

主控芯片采用51系列AT89S51单片机.自检测芯片采用MAX232CPE芯片,是自检测科技推出的一种产品。

其要求是PC能够完成发出信号的组织和处理时,由MAX232CPE芯片进行检测波特率数据,计算并显示出来.根据我们得到的数值即波特率。

1.2 单片机的生产与发展

电子计算机是20世纪人类最伟大的发明之一.自从1946年第一台电子计算机诞生以来,计算机得到了飞速的发展与广泛的应用,对人类社会起到了极大的推动作用.然而,使计算机的应用能够真正深入到社会的各方面,促使人类社会大步跨入电脑时代的一个重要原因,是微型计算机的生产和发展。

随着半导体技术的发展,集成电路的集成度越来越高.1971年11月,Intel公司成功的将运算部分和逻辑控制功能集成在一起,制成了第一片中央处理器——Intel4004微处理器。由此揭开了微型计算机发展的序幕。

随着集成电路集成度的提高.微处理器的发展除了不断增强芯片的处理能力,提高产品的性能价格比,发展高性能的通用微型计算机之外,还在一块芯片上不断提高集成更多的功能部件,从而使微型计算机的硬件系统更加简化,使得微型计算机以但片机控制系统的形式不断的深入仪器仪表,家用电器,设备控制等领域。

早期的4位单片机,内部结构简单,功能较少,主要用于简单的控制。

1974年12月仙童公司首先推出了8位单片计算机F8.随后各公司纷纷推出了各自的8位单片机产品,有Intel公司的MCS-48型系列,Zilog公司的Z-8系列,Rockwell公司的6500系列等.这时的单片机性能有所提高,主要应用在简单的工业控制和早期智能仪器仪表及计算机外部设备。

1980年Intel公司开发出MCS-51型系列单片机,这种芯片带有串行口,定时/计数器,寻址范围64KB,被称为高档8位单片机.这些芯片功能强,适用范围宽,成为单片机的主流产品。

在8位单片机之后,16位单片机也陆续开发出来.1983年Intel公司推出MCS-96型单片机产品,与8位单片机相比,8096单片机不仅字长曾加一倍,而且还集成了10位A/D转换电路,其性能也有了很大提高1988年Iintel公司推出了具有8位的价格16位机性能的8098芯片.由于有极高的性能价格比,8098的芯片应用越来越广。

进入90年代,各厂家又推出更加强大的单片机。

现在可以说单片机是百花齐放,百家争鸣的时期,世界上各大芯片制造公司都推出了自己的单片机,从8位、16位到32位,数不胜数,应有尽有,有与主流C51系列兼容的,也有不兼容的,但它们各具特色,互成互补,为单片机的应用提供广阔的天地。

纵观单片机的发展过程,可以预示单片机的发展趋势,大致有:

1) 低功耗CMOS化

MCS-51系列的8031推出时的功耗达630mW,而现在的单片机普遍都在100mW左右,随着对单片机功耗要求越来越低,现在的各个单片机制造商基本都采用了CMOS(互补金属氧化物半导体工艺)。象80C51就采用了HMOS(即高密度金属氧化物半导体工艺)CHMOS(互补高密度金属氧化物半导体工艺)。CMOS虽然功耗较低,但由于其物理特征决定其工作速度不够高,而CHMOS则具备了高速和低功耗的特点,这些特征,更适合于在要求低功耗象电池供电的应用场合。所以这种工艺将是今后一段时期单片机发展的主要途径。

2) 微型单片化

现在常规的单片机普遍都是将中央处理器(CPU)、随机存取数据存储(RAM)、只读程序存储器(ROM)、并行和串行通信接口,中断系统、定时电路、时钟电路集成在一块单一的芯片上,增强型的单片机集成了如A/D转换器、PMW(脉宽调制电路)、WDT(看门狗)、有些单片机将LCD(液晶)驱动电路都集成在单一的芯片上,这样单片机包含的单元电路就更多,功能就越强大。甚至单片机厂商还可以根据用户的要求量身定做,制造出具有自己特色的单片机芯片。

此外,现在的产品普遍要求体积小、重量轻,这就要求单片机除了功能强和功耗低外,还要求其体积要小。现在的许多单片机都具有多种封装形式,其中SMD(表面封装)越来越受欢迎,使得由单片机构成的系统正朝微型化方向发展。

1)主流与多品种共存

现在虽然单片机的品种繁多,各具特色,但仍以8051为核心的单片机占主流,兼容其结构和指令系统的有PHILIPS公司的产品,ATMEL公司的产品和中国台湾的Winbond系列单片机。所以C8051为核心的单片机占据了半壁江山。而Microchip公司的PIC精简指令集(RISC)也有着强劲的发展势头,中国台湾的HOLTEK公司近年的单片机产量与日俱增,与其低价质优的优势,占据一定的市场分额。此外还有MOTOROLA公司的产品,日本几大公司的专用单片机。在一定的时期内,这种情形将得以延续,将不存在某个单片机一统天下的垄断局面,走的是依存互补、相辅相成、共同发展的道路。

1.3 单片机的特点及应用

由于单片机是把微型计算机主要部件都集成在一块芯片上,既一块芯片就是一个微型计算机。因此有以下特点。

1) 片内存储量小,受集成度限制,片内存储器容量小,但可在芯片外扩展。

2) 可靠性好,通常按工业要求设计,抗噪声能力强。

3) 易扩展

4) 控制能力强

5) 系统内无监控或系统管理程序。

单片机的主要应用领域有:

1) 机电一体化产品

2) 智能仪表

3) 测控系统

4) 只能中端

5) 智能化通信产品

6) 智能化家电

单片机应用的意义不仅在它的广阔范围及所带来得经济效益。更重要的意义在于,单片机的应用从根本上改变了传统的控制系统设计思想和设计方案。以前采用电路实现的大部分控制功能,正在用单片机通过软件方法来实现。

1.4 AT89S51系列单片机介绍

1.4.1 基本特性

AT89S51一个低功耗,高性能CMOS 8位单片机,片内含4k Bytes ISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,功能强大的微型计算机的AT89S51可为许多嵌入式控制应用系统提供高性价比的解决方案。

51型单片机一般采用双列直插封装。40个引脚大致分四类;电源、时钟、控制和I/O 口引脚。引脚功能如下:

1) 电源

Vcc:电源电压

GND:地

2) 时钟

XTAL1,XTAL2—晶体震荡电路反相输入端和输出端.使用内部震荡电路时,外接石英晶体;外震荡输入时XTAL1接地,XTAL2接外震荡脉冲。

3) 控制线

控制线共有4根,其中3根是复用线。

a. ALE/PROG 地址锁存允许/编程脉冲。正常使用时为ALE功能,用来锁存PO口送出的8位地址.PROG,当8751单片机在片内EPROM编程期间。此引脚输入编程脉冲。

b. PSEN---外ROM读选通信号。在51型单片机读外ROM是,每个机器周期内PSEN两次有效输出。也可以驱动8个LSTTL门电路。

c. RST/Vpd---复位/备用电源。正常工作时,RST端为复位信号输入端,只要在该引脚上连续保持2个机器周期以上的高电平,51型单片机芯片既实现复位操作,复位后一切从头开始,CPU从0000开始执行命令。在VCC掉电的情况下,该引脚还可接上备用电源,由VPD 向内RAM供电,以保持内RAM中的数据不丢失。

d. EA/Vpp---内外ROM选择/EPROM编程电源.正常工作时,EA为内ROM选择端。对8751芯片,在内EPROM编程期间,此引脚用于施加编程电源。

e. I/O线

51型单片机共有4个8为并行I/O端口,共32个引脚。

P0口:8位双向I/O口,也即地址/数据总线复用口。作为输出口用时,每位能驱动8个TTL逻辑门电路,对端口写1可作为高阻抗输入端用。

在访问外部数据存储器或程序存储器时,这组口线分时转换地址(底八位)和数据总线复用,在访问期间激活内部上拉电阻。

P1口: 8位准双向I/O口片。

P2口: 8位准双向I/O口片。在访问外部存储器时,P2口用来传送高8位地址。

P3口 8位准双向I/O口片。可做一般I/O用,同时还具有第二功能用于特殊信号输入输出和控制信号.第二功能如下:

P3.0---RXD:串行输入端;

P3.1---TXD:串行输出端;

P3.2---INTO:外部中断0请求输入端;

P3.4---TO:定时/计数器0外部信号输入端;

P3.5---T1:定时/计数器1外部信号输入端;

P3.6---WR:外RAM写选通信号输出端;

P3.7---WD:外RAM读选通信号输出端;

上述4个I/O口,各有各的用途,在一般情况下,P0口专用来传送底8为地址信号和8位数据信号,P2口专用来传送高8位地址信号,P3口根据需要常用于第二功能。

3. 总体设计电路图及工作原理

电路设计工作原理图

见附录一

2.1 机型及器件的选择

1) 单片机单片机采用ATMEL公司生产的AT89S51单片机,该芯片与MCS51系列单片机兼容。内含:2 kB Flash E2PROM、128 B RAM、15根I/O引线、2个16位定时器/计数器、1个5向量两级中断结构、1个全双工串行口和1个精密模拟电压比较器等。

2) 串行E2PROM 由于基于SRAM工艺的可编程逻辑器件(CPLD/FPGA)的配置数据在掉电后会丢失,需要外加存储器以保存配置数据。为了尽量减小电路板的面积,选用8脚的串行。AT24C256是ATMEL公司生产的2线制串行电可擦写只读存储器,具有自定时写周期特性,容量32 kB。该器件特别适合于对功耗有严格要求的应用场合。

3) 通信接口采用MAXIM公司生产的串行接口芯片MAX232将PC机与下载配置电路连接起来。下载配置电路通过该串口接收PC机下传的命令,执行相应的操作再将处理结果上传到PC机。MAX232是通用+5 V供电的多通道RS232总线收发器,尤其适合在电池供电的系统中应用。

2.2 软、硬件功能划分

单片机应用系统的硬件设计包括两大部分内容:一是单片机系统的扩展部分设计。它包括存储器扩展和接口扩展。二是各功能模块的设计。如信号测量功能模块、信号控制功能模块、人机对话功能模块、通信功能模块以及根据各功能块要求配置相应的A/D、D/A、键盘、显示器、打印机等外围设计。

软件设计是设计控制系统的应用程序。其任务是在总体设计和硬件设计的基础上,确定程序结构,分配内RAM资源,划分功能模块,然后进行主程序和各模块程序的设计,最后连接起来成为一个完整的应用程序。

3. 系统硬件设计

3.1 系统硬件电路设计

硬件电路大致上可分成单片机系统及外围电路,驱动电路两部分.

单片机采用AT89S51或其兼容系列的芯片,采用12MHZ或更高频率的晶振,以获得较高的刷新频率,使显示更稳定.单片机的串口与驱动电路相连,用来送显示数据.AT89S51是一个12分频的指令系统,它的机器周期=121FOSC,其中FOSC是晶振频率。

通过定时器对一位数据持续时间定时。得到得计数值就是这位数据所持续的机器周期。假设该数值为N可得:N*12/FOSC=波特率的例数。所以我们能够得到N值也就得到了波特率,也就确定了定时器的时间常数。再根据时间常数去确定波特率。以实现正确的数据传输。

硬件设计应主意的几个方面。

1) 尽量选择标准化、模块化的典型电路,提高设计的成功率和结构的灵活性。

2) 尽量选用功能强,集成度高的电路和芯片。可以减少元件数量、接插件和相互连线,增加系统的可靠性,也可以降低材料成本。

3) 尽量采用新技术、新工艺具有先进的性能。

4) 在满足应用系统功能的要求上,适当留有余地,以备修改,扩展。

5) 充分考虑应用系统各部分间驱能力和阻抗能力。

6) 工艺设计,包括机箱、面板、连线、接插件等,设计时要充分考虑安装、调试、维修的方便。

3.2 硬件设计电路原理图

3.3 各元件说明

3.3.1 AT89S51芯片

AT89S51具有如下特点:40个引脚,4k Bytes Flash片内程序存储器,128 bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,1个全双工串行通信口,看门狗(WDT)电路,检测电路等.片内时钟振荡器。

此外,AT89S51设计和配置了振荡频率可为0Hz并可通过软件设置省电模式。空闲模式下,CPU暂停工作,而RAM定时计数器,串行口,外中断系统可继续工作,掉电模式冻结振荡器而保存RAM的数据,停止芯片其它功能直至外中断激活或硬件复位。同时该芯片还具有PDIP、TQFP和PLCC等主要功能特性:

兼容MCS-51指令系统

4k可反复擦写(>1000次)ISP Flash ROM

32个双向I/O口

4.5-

5.5V工作电压

2个16位可编程定时/计数器

时钟频率0-33MHz

全双工UART串行中断口线

128*8内部RAM

2个外部中断源

低功耗空中断唤醒省电模式

中断唤醒省电模式

3级加密位

软件设置空闲和省电功能

灵活的ISP字节和分页编程

双数据寄存器指针

3.3.2 MAX232CPE芯片

MAX232芯片是MAXIM公司生产的、包含两路接收器和驱动电路的IC芯片,其内部结构有一个电源电压变换器,可以把输入的+5V电压变成为RS—232C输出电平所需的±10V 电压。所以,采用此芯片接口的串行通信系统只需单一的+5V电源就可以了。

MAX232芯片的引脚结构如图所示

MAX232芯片的典型工作电路如图

MAX232工作电路图中上部分电容C1、C2、C3、C4及V+,V-是电源变换部分。在实际应用中,器件对电源噪声很敏感。因此,Vcc对地必须要加去耦电容C5,其值为0.1uf。电容C1、C2、C3、C4取同样数值的电解电容1.0uf/16V,用于提高抗干扰能力。

其下半部分为发送和接收部分。实际应用中,T1in,T2in可直接接TTL/CMOS电平的MCS—51型单片机的串行接收端TXD;R1OUT,R2OUT可直接接TTL/CMOS电平的MCS —51型单片机的串行接收端RXT;T1our=t,T2out可直接接PC机的RS-232串口的接收端RXD;R1in,R2in可直接接PC机的RS—232串口的发送端TXD。

实际应用中,可从MAX232芯片中两路发送接收器中任选一路作为接口,但要主意其发送和接收的引脚必须对应。如使T1in接单片机的发送端TXD,则PC机的RS-232的接收端RXD一定要对应T1out引脚。同时,R1out接单片机的RXD引脚,PC机的RS-232的发送端TXD对应接R1in引脚。

4. 系统软件设计

4.1 编程思路

串行通信是终端和主机之间的主要通信方式,通信波特率一般选择1800、4800、9600和 19200等。终端的类型有很多种,其通信速率也有很多种选择。主机怎样确定终端的通信速率呢?本文给出了一种简单、易行的方法:设定主机的接收波特率(以9600波特为例),终端发送一个特定的字符(以回车符为例),主机根据接收到的字符信息就可以确定终端的通信波特率。本文对这种方法予以详述。

1) 基本方法

回车符的ASCII值为0x0D。串行通信时附加一个起始位和终止位,位的传输顺序一般是先传低位再传高位。此时回车符的二进制表示方式为:

图1 回车符的位序列

串行通信中一个二进制位的传输时间(记为T)取决于通信的波特率,9600波特时一

个二进制位的传输时间是19200波特时一个二进制位传输时间的两倍,即:2*T

19200=T

9600

因此,9600波特时一个位的传输时间,19200波特时可以传输两个位。同样地,9600波特传输两个位的时间在4800波特时只能传送一个位。主机设定接收波特率为9600,终端只有也以9600波特发送的字符,主机才能正确地接收。发送波特率高于或低于9600都会使主机接收到的字符发生错误。接收波特率为9600,终端以不同的波特率发送回车符时,主机接收到的二进制序列如表1所示。

从表1中可以看出,除了19200和1800波特时两种特例情况,其他情形的二进制序列都是 9600波特时二进制序列的变换。取前十个二进制位与9600波特时的二进制位相对应。忽略缺少停止位‘1’引发的数据帧错误,把接收到的字符表示成字节方式(如表1的最右列所示)。例如:在发送速率为1200波特,接收速率为9600波特时,主机得到的字节是0x80,而不是正确的回车符0x0D。因为在不同的发送速率下(9600,4800,2400,1200)得到的字节不同,所以通过接收字符的判定就可以确定发送波特率。

发送波特率为19200时,其发送速度正好是接收速度(9600波特)的两倍,因此发送端的两个二进制位会被接收端看作一个。取决于不同的串行接口硬件,‘01’和‘10’这两种二进制位组合可能被认为是‘1’或者‘0’。幸运的是,只有0~4位存在这样的歧义问题,后面的位因为都是停止位,所以都是‘1’。因此,发送速率为19200波特时接收到的字符其高半个字节为0xF。低半个字节可能是多个值中的一个,但不会是0x0,因为0x0D中有相邻的两个‘1’,这就会至少在低半个字节中产生一个‘1’。因此,整个字节的形式为0xF?,且低半个字节不为0。

T 1800=T

9600

*16/3,

而16/3不是整数,接收端二进制位的状态转换时刻和9600波特不一一对应,引起在接收端的一个位接收周期内有状态发生变化的可能。表1中给出的第六个位(表示为x)就是这种情况。因为x有可能被看作‘1’,也有可能被看作‘0’,所以发送速率为1800波特时接收到的字节可能是0xE0或者0xF0。波特率为3600和7200时也有同样的问题,也可以采用同样的方法,但不确定的位数会增加,需要检测的字节种类也会更多。3600波特和7200波特的传输速率几乎不采用,因此这个问题并不严重。只要发送波特率在1200~19200之间,我们都可以通过接收到的一个字符对此波特率进行唯一的判定。

2) 低波特率的检测

当发送速率低于1200波特时,接收端收到的字节都是0x00,因此只能确定其速率低于12 00波特,而不可能再得到更多的信息。为了解决这个问题,可以在9600波特的速率下继续接收下一个字节信息。发送速率为600波特或更低时,一个位的发送时间要大于9600波特时整个字节的接收时间。因此,发送端每一个从‘1’(终止位)到‘0’(起始位)的跳变都会让接收端认为一个新的字节开始了。表2所示为600波特或更低的传输速率时接收端回车符的二进制序列(只给出开始的一些位)。

表2

600

端得到字节0x00。第二个跳变在初始化(16+16)*T

9600

秒以后发生,这会让接收端认为另

外一个字节开始接收了。一个二进制位的接收时间是T

9600

,所以串行接口电路会在第一个

跳变以后10* T

9600秒提示第一个字节接收完毕,在(16+16+10)* T

96 00

秒以后提示第二个字

节接收完毕。因此600波特时,第一个字节接收完毕和第二个字节接收完毕的时间差是

(16+16+10-10)* T

9600=32* T

9600

秒。表2的第三列所示是把这个时间差以T

9600

的个数表示。

因为T

9600

=1/9600秒=104.16毫秒,相乘可以得到两个字节接收完毕的实时间差。不同发送波特率的时间差如表2的最后一列所示。有了这个时间差信息,就可以确定低传输速率时的波特率了:测定第一个和第二个字节的接收时间差,然后在时间差常数表(表2)里查出哪个波特率下的时间差与之最相近,对应的就是终端发送波特率。即使测定的时间差有些误差,一般也可以正确地确定波特率。

3) 实现方式

通过以上分析,各种波特率都可以通过回车符的发送和接收信息来测定,算法实现的伪代码在本文的最后给出。应用实践证明了这种方法的有效性。

4.1.1 详细设计

根据针对实际生活工作系统中存在的串口波特率自检测问题,提出了利用串行口电路芯片MAX232来实现波特率自检测的一种方式。

以单片机为核心的测控系统与上位计算机之间的数据交换通常采用

串行通信方式,在实际工作系统中,人们常常忽略或不知道PC机所发出数据中波特率的数值,往往不能正常工作。因此,本课题的设计目的是利用单片机及串口电路MAX232芯片设计一种波特率自检测电路,而切适用与不同的单片机上.4.1.2 编写程序

主程序流程图如图4-1所示。

见附录2

4.2 编程流程框图

4.2 七段数码显示电路

4.2.1 接口及写入电路

总结

本人在指导教师的悉心指导下,阅读了大量的资料,尝试了各种相关实验,终于设计了一个波特率自检测系统、程序和显示为一体系的系统,从结果上来看,本设计比较简单适用,能够实现简单的波特率自检测,另外能够准确的采集到当前的波特率并且能够清晰的将波特率当前的工作数值显示出来。

单片机应用系统的设计,面临的是选择单片机的机型。从性能价格比、开发工具、设计人员熟悉程度等因素考虑来选择单片机

单片机应用系统中,软件设计与硬件设计是紧密相关、互补互依的。有时,硬件的任务可由软件完成,软件的任务可由硬件完成,根据具体情况,选择最佳方案,达到最佳性价比。

整个设计过程分三大部分,第一部分是硬件的选用与设计,第二部分是软件编程,第三部分为系统调试部分。

此次设计首先根据任务书设计要求设计出电路原理图,然做出PROTEL图,同时计算各种相关数据,选择好合适的元器件,以保证本设计能够正确而顺利的设计成功。元件和电路图都准备好后开始焊接电路。

当硬件电路正确搭接好后,开始进行软件设计。根据电路图中I/O口的分配,以及本设计所要达到的各种功能要求开始逐步设计汇编程序,首先将本设计分成两部分,将波特率检测出来为本设计的第一部分,将检测出来的波特率显示出来做为第二部分,将两部分融合在一起,使两部分相互配合完成一个整体的程序控制系统,达到任务书所要求的各种功能。

当软硬件都设计完成后开始对系统进行调试。本次设计的调试方式如下:

首先,为主电路板通入5V直流电。然后,软件程序采用WAVE编程软件,将所编程序转化成“.HEX”文件,采用用WH-500_800Programmer编程加密器将汇编好的机器码通过写入器写入单片机。最后观看效果,按下相应的控制键确认各种控制是否与我们想要达到的效果相符,如果有出入,通过所呈现的不同异常效果认真分析,找出原因改正,进行下一次调试,直至调试成功。

另外,本设计也有许多缺点和改进的地方。比如说,只能检测比较简单的波特率;显示方面只能显示数字及不能语音报告;在主控方面,没有工作状态的显示,虽然此设计重点不在于次,但控制系统方面也是此设计的关键之所在,也是最容易改进的地方,如果真正有条件有能力了,可以加装工作状态的显示及其语音说明及报告。

设计调试成功后将本设计产品在当前市场中的地位,同类产品的发展情况,做此设计的意义,设计中所用到的各种知识,以及整个设计的原理,等都进行整理归纳。最后写入本毕业论文之中。

参考文献

[1] 李光飞,胡佳文.单片机课程设计实例指导.北京:北京航空航天大学出版,2004

[2] 张志良.单片机原理与控制技术. 北京:机械工业出版社,2004

[3] 赵亮,侯国锐.单片机C言编程与实例.人民邮电出版社,2003

[4] 何立民.单片机应用系统设计. 北京:北京航空航天大学出版社,2001

[5] 徐凤霞,赵成安.AT89C51单片机温度控制系统.齐齐哈尔大学学报.2004,20(1)

ORG 0000H

LJMP MAIN

ORG 0050H

MAIN: MOV SP,#60H

MOV BaudRt,#00H

ACALL AutoBaud

ACALL BAUDZH

ACALL SZZH

ACALL CHADUANMA

DISLOOP:ACALL DISPLAY

SJMP DISLOOP

BAUDZH:PUSH ACC

MOV A,BaudRt

CJNE A,#0,BZHN1

SETB RANGOUT

SJMP BZHRET

BZHN1: MOV A,BaudRt

CJNE A,#1,BZHN2

CLR RANGOUT

MOV BTLZ,#84 ;38400 SJMP BZHRET

BZHN2: MOV A,BaudRt

CJNE A,#2,BZHN3

CLR RANGOUT

MOV BTLZ,#92 ;19200 SJMP BZHRET

nop

nop

nop

nop

nop

nop

nop

BZHN3: MOV A,BaudRt

CJNE A,#3,BZHN4

CLR RANGOUT

MOV BTLZ,#96 ;9600 SJMP BZHRET

8051的串口波特率的计算(笔记版)

8051的串口波特率的计算 1、方式0的波特率,固定为晶振频率的十二分之一。 2、方式2的波特率,取决于PCON寄存器的SMOD位。PCON是一个特殊的寄 存器,吹了最高位SMOD位,其他位都是虚设的。计算方法如下: SMOD=0,波特率为晶振的1/64; SMOD=1,波特率为晶振的1/32. 3、方式1与方式3的波特率都是由定时器的溢出率决定的。 公式为: BR=(2SOMD/32)*(定时器TI的溢出率) 通常情况下,我们使用定时器的方式2,即比率发生器,自动重载计数常数。 溢出的周期为: T=(256-X)*12/fosc 溢出率为溢出周期的倒数,即 T1=1/T 所以: 式中:SMOD是所选的方式,fosc是晶振频率。X是初始值。 51单片机模拟串口波特率计算方法 1.计算波特率位间隔时间(即定时时间,其实就是波特率的倒数) 位间隔时间(us)=10(6)(us)/波特率(bps)

2.计算机单片机指令周期: 指令周期(us)=12/晶振频率(Mhz) 补充问题:做串口通信时,为什么要把晶振频率设为11.0592,为什么要把波特率设为9600? 先说波特率。波特率从300到115200都可以,甚至更高或更低。一般规范的波特率都是3的倍数,比如9600、19200、38400;但是并不是一定的,波特率也可以是10000或者10001、10002,只要你的设备能产生符合这个要求的频率,尤其是自己用时,波特率都是很随意的,没有限制。只是多数时候为了和电脑配合,波特率才规范为固定的几个值,且为了传输稳定,用9600。 用11.0592晶振的原因是51单片机的定时器导致的。通常用11.0592M晶振是为了得到标准的无误差的波特率。举例说来,如我们要得到的9600的波特率,晶振为11.0592M和12M,定制器1为2SMOD设为1,分别看看那所求的TH1为何值。代入公式: 11.0592M 9600=(2/32)*((11.0592M/12)(256-TH1)) TH 1=250 12M 9600=(2/32)*((12M/12)(256-TH1)) TH1=249.49

波特率计算公式

一、波特率概念 波特率即调制速率,指的是信号被调制以后在单位时间内的波特数,即单位时间内载波参数变化的次数。它是对信号传输速率的一种度量,通常以“波特每秒”(Bps)为单位。波特率表示每秒钟传送的码元符号的个数,它是对符号传输速率的一种度量,它用单位时间内载波调制状态改变的次数来表示,1波特即指每秒传输1个符号。波特(Baud,单位符号:Bd)这一单位是以法国电讯工程师埃米尔·博多(英语:émile Baudot)(1845-1903)的姓氏来命名的,他是数位通讯的先驱之一,是电传与博多式电报机的发明人。 波特率有时候会同比特率混淆,实际上后者是对信息传输速率(传信率)的度量。波特率可以被理解为单位时间内传输码元符号的个数(传符号率),通过不同的调制方法可以在一个码元上负载多个比特信息。因此信息传输速率即比特率在数值上和波特率有这样的关系。 计算机内部采用二进制的方式计数,那么它为什么又能识别十进制数和各种字符、图形呢?其实,不论是数值数据还是文字、图形等,在计算机内部都采用了一种编码标准。通过编码标准可以把它转换成二进制数来进行处理,计算机将这些信息处理完毕再转换成可视的信息显示出来。常用的字符代码是ASCII码,它原来是美国的国家标准,1967年被定为国际标准。 二、波特率计算公式有哪些? 在串行通信中,收发双方对发送或接收的数据速率要有一定的约定,我们通过软件对MCS—51串行口编程可约定四种工作方式。其

中,方式0和方式2的波特率是固定的,而方式1和方式3的波特率是可变的,由定时器T1的溢出率决定。 串行口的四种工作方式对应着三种波特率。由于输人的移位时钟的来源不同,所以,各种方式的波特率计算公式也不同。 1、方式0的波特率 方式0时,移位时钟脉冲由56(即第6个状态周期,第12个节拍)给出,即每个机器周期产生一个移位时钟,发送或接收一位数据。所以,波特率为振荡频率的十二分之一,并不受PCON寄存器中SMOD的影响,即:方式0的波特率=fosc/12 2、方式2的波特率 串行口方式2波特率的产生与方式0不同,即输入时钏源的频率不同,控制接收与发送的移位时钟由振荡频率Foec的第二节拍P2(即Foec/2)给出,所以,方式2波特率取决于PCON中SMOD 位的值,当SMOD=0时,波特率为Foec的六十四分之一;若SMOD=1,则波特率为Foec的三十二分之一,即:方式2的波特率=2smod/64*Foec。 3、方式l和方式3的波特率 方式1和方式3的移位时钟脉冲由定时器T1的溢出率决定,故波特宰由定时器T1的溢出率与SMOD值同时决定,即:方式1和方式3的波特率=2SMOD/32?T1溢出率。 其中,溢出率取决于计数速率和定时器的预置值。计数速率与TMOD寄存器中C/T的状态有关。当C/T=0时,计数速率=fosc/2;

波特率自适应的RS-485中继器设计

麓!誊萋囊霉毫螽囊篓蔷要毫曩囊枣鼍鬟蔓一鬻薹萋j鼍雾冀簪耋薹攀羔。川篓囊萋i薹鬻波特率自遁应的RS一485中继嚣设计 ■河北理工大学张习加李成群 引言 RS一485收发器采用平衡发送和差分接收,因此具有 抑制共模干扰的能力;加上接收器具有高灵敏度,能检测 低达200mV的电压,故传输信号能在千米以外得到恢 复。使用RS一485总线,一对双绞线就能实现多站联网, 构成分布式系统,且设备简单、价格低廉,能进行长距离通 信,因而得到了广泛的应用。由于在双绞线上的电平损 耗,RS一485标准通信的最大传输距离是1200m,因此更 远距离的应用中必须使用中继器。网络节点数与所选芯 片驱动能力和接收器的输入阻抗有关。RS一485标准规 定了最大总线负载为32个单位负载,若应用中总线负载 大于32个单位负载则必须使用中继器。 1RS一485中继器原理[1’2] Rs一485是半双工方式,两线双向传送差分信号,具 有多点、双向通信能力,即允许多个发送器和接收器连接 到同一条总线上,传输线上信号的传输方向不定。因此, 识别和控制好传输线上的信号传递方向是设计RS~485 中继器的关键。 RS一485标准规定:数据信号采用差分传输方式 (differential出ivermode),也称为“平衡传输”。它使用一 对双绞线,将其中一根线定义为A,另一根线定义为B,如 图1所示。 使能 A B f痞 I稍 f瘤 I自 +6V 许电平范围 +2V A—B电平范围 一2V 许电平范围 一6V 图1RS一485发送器的示意图 通常情况下,RS一485发送器A、B之间的正电平在+2~+6V,是一种逻辑状态;负电乎在一6~一2V,是另一种逻辑状态。在RS一485发送器件中,一般有一个“使能”控制信号,用于控制发送器与传输线的切断和连接。当“使能”端为低电平时,发送器输出处于高阻状态,称作“第三态”。它是有别于逻辑“1”与“o”的第三种状态。 对于RS一485接收器,也作出与发送器相对的规定,收、发端通过平衡双绞线将A—A与B—B对应相连。当在接收端A、B之间有大于+200mV的电平时,输出为正逻辑电平;小于一2。omV时,输出为负逻辑电平。在接收器的接收平衡线上,电平范围通常为200mV~6V,如图2所示。 A B 使能 电平范围 传输电平范围 图2RS一485接收器的示意图 RS一485接收器同样定义逻辑1(正逻辑电平)为B>A的状态,逻辑o(负逻辑电平)为A>B的状态,A、B之间的压差不小于200mV。在RS~485接收器件中,一般也有一个“使能”控制信号,用于控制接收器与传输线的切断和连接。当“使能”端为高电平时,接收器与传输线切断,接收器输出为高电平;当“使能”端为低电平时,接收器输出电平与总线信号的逻辑电平一致。 RS一485中继器原理图如图3所示。正常工作时主要有三个状态:空闲状态,数据从RS一485收发器Ul边的总线往RS一485收发器U2边的总线传送(简称“数据右传状态”),数据从RS一485收发器U2边的总线往RS一485收发器U1边的总线传送(简称“数据左传状态”)。(1)空闲状态 当中继器上电启动运行或总线上没有数据传送时,中继器工作在空闲状态。RS一485收发器U1、U2均为接收数据状态,U1、U2的ENl、EN2引脚均为低电平。 (2)数据右传状态 当RS一485收发器U1边检测到连接其A、B引脚总 62《牛I;机与嵌入式系'毛应用》adv@mesnet.com.cn(广告专用) 万方数据

51单片机串口通信及波特率设置

51单片机串口通信及波特率设置 MCS-51单片机具有一个全双工的串行通信接口,能同时进行发送和接收。它可以作为UART(通用异步接收和发送器)使用,也可以作为同步的移位寄存器使用。 1. 数据缓冲寄存器SBUF SBUF是可以直接寻址的专用寄存器。物理上,它对应着两个寄存器,即一个发送寄存器一个接收寄存器,CPU写SBUF就是修改发送寄存器;读SBUF就是读接收寄存器。接收器是双缓冲的,以避免在接收下一帧数据之前,CPU未能及时的响应接收器的中断,没有把上一帧的数据读走而产生两帧数据重叠的问题。对于发送器,为了保持最大的传输速率,一般不需要双缓冲,因为发送时CPU是主动的,不会产生重叠问题。 2. 状态控制寄存器SCON SCON是一个逐位定义的8位寄存器,用于控制串行通信的方式选择、接收和发送,指示串口的状态,SCON即可以字节寻址也可以位寻址,字节地址98H,地址位为98H~9FH。它的各个位定义如下: MSB LSB SM0 SM1 SM2 REN TB8 RB8 TI RI SM0和SM1是串口的工作方式选择位,2个选择位对应4种工作方式,如下表,其中Fosc是振荡器的频率。 SM0 SM1 工作方式功能波特率 0 0 0 8位同步移位寄存器Fosc/12 0 1 1 10位UART 可变 1 0 2 11位UART Fosc/64或Fosc/32 1 1 3 11位UART 可变 SM2在工作方式2和3中是多机通信的使能位。在工作方式0中,SM2必须为0。在工作方式1中,若SM2=1且没有接收到有效的停止位,则接收中断标志位RI不会被激活。在工作方式2和3中若SM2=1且接收到的第9位数据(RB8)为0,则接收中断标志RB8不会被激活,若接收到的第9位数据(RB8)为1,则RI置位。此功能可用于多处理机通信。 REN为允许串行接收位,由软件置位或清除。置位时允许串行接收,清除时禁止串行接收。 TB8是工作方式2和3要发送的第9位数据。在许多通信协议中该位是奇偶位,可以按需要由软件置位或清除。在多处理机通信中,该位用于表示是地址帧还是数据帧。 RB8是工作方式2和3中接收到的第9位数据(例如是奇偶位或者地址/数据标识位),在工作方式1中若SM2=0,则RB8是已接收的停止位。在工作方式0中RB8不使用。 TI 为发送中断标志位,由硬件置位,软件清除。工作方式0中在发送第8位末尾由硬件置位;在其他工作方式时,在发送停止位开始时由硬件置位。TI=1时,申请中断。CPU 响应中断后,发送下一帧数据。在任何工作方式中都必须由软件清除TI。 RI为接收中断标志位,由硬件置位,软件清除。工作方式0中在接收第8位末尾由硬件置位;在其他工作方式时,在接收停止位的中间由硬件置位。RI=1时,申请中断,要求CPU取走数据。但在工作方式1中,SM2=1且未接收到有效的停止位时,不会对RI置位。在任何工作方式中都必须由软件清除RI。 系统复位时,SCON的所有位都被清除。 控制寄存器PCON也是一个逐位定义的8位寄存器,目前仅仅有几位有定义,如下所示:MSB LSB

STM32单片机的串口通信波特率计算方法

STM32单片机的串口通信波特率计算方法 1. 什么是波特率 不管是什么单片机,在使用串口通信的时候,有一个非常重要的参数:波特率。什么是波特率:波特率就是每秒传送的字节数。双方在传输数据的过程中,波特率一致,这是通讯成功的基本保障。下面以STM32单片机为例,讲解一下串口波特率的计算方法。 2. STM32波特率相关的寄存器 STM32单片机设置波特率的寄存器只有一个:USART_BRR寄存器,如下图所示。 该寄存器的有效位数为16位,前4位用于存放小数部分,后12位用于存放整数部分。将波特率算出来后,数值填入这个波特率就可以了。下面介绍如何计算。 3. 波特率计算方法 STM32的数据手册给出了计算方法,有一个公式,如下图所示: 在这个公式上,共有三个变量,其中两个我们是知道的,Fck和Tx/Rx波特率这两个是已知的,USARTDIV是未知的。通过该公式的描述可以看出如果使用USART1的话,那Fck 就是PCLK2=72MHz,否则就是PCLK1=36MHz,Tx/Rx波特率这个参数是已知的。只需要计算出USARTDIV的值赋值给USART_BRR寄存器就可以了。以115200为例,将公式变形后得到:USARTDIV = 72×1000000/(16×115200) = 39.0625。即将39.0625写入USART_BRR即可。 前文说过,USART_BRR的前4位存放小数部分,后12位存放整数部分。 那小数部分DIV_Fraction = 0.0625×16 = 1 = 0x01;那整数部分DIV_Mantissa = 39 = 0x27;那USART_BRR = 0X271; 数据手册给我们提供了一张数据表: 在这张数据表上,已经算出了常用的波特率值,我们可以拿来直接用。但是如果我们想把

第7章PIC单片机串行口及串行通信技术.pdf

第7章PIC18FXX2串行口及串行通信技术 ?教学目标 串行通信基本知识 串行口及应用 PIC18FXX2与PC机间通信软件的设计

本章知识点概要 ? 1.什么是串行通信,串行通信有什么优点? ? 2.串行通信协议 ? 3.什么是波特率? ? 4.PIC18FXX2中的串行口工作方式及应用 ? 5.PIC18FXX2点对点通信 ?针对PIC18FXX2串行口而言,概括为以下问题: 1、波特率设计,初始化SPBRG 2、设定通信协议(工作方式选择,SYNC) 3、如何启动PIC18FXX2接收、发送数据? 4、如何检查数据是否接收或发送完毕?

7.1 7.1 串行通信基本知识串行通信基本知识 ?在实际工作中,计算机的CPU 与外部设备之间常常要进行信息交换,一台计算机与其他计算机之间也要交换信息,所有这些信息交换均可称为通信。 ?通信方式有两种,即并行通信和串行通信。 ?采用哪种通信方式?----通常根据信息传送的距离决定例如,PC 机与外部设备(如打印机等)通信时,如果距离小于30 m ,可采用并行通信方式;当距离大于30 m 时,则要采用串行通信方式。PIC18FXX2单片机具有并行和串行二种基本通信方式。

并行通信 ?并行通信是指数据的各 位同时进行传送(发送 或接收)的通信方式。 ?优点:传送速度快; ?缺点:数据有多少位, 就需要多少根传送线。 ?例如,右图PIC18FXX2 单片机与外部设备之间 的数据传送就属于并行 通信。

串行通信 ?串行通信是指数据一位(bit)一位按顺序传送的通信方式。?优点:只需一对传输线(利用电话线就可作为传输线),大大降低了传送成本,特别适用于远距离通信; ?缺点:传送速度较低。假设并行传送N位数据所需时间为T,那么串行传送的时间至少为N*T,实际上总是大于N*T。 接收设备发送设备 D2 D1 D0 D3 D7 D6 D5 D4

波特率计算

波特率选择 在串行通讯中,收发双方的数据传送率(波特率)要有一定的约定。在8051串行口的四种工作方式中,方式0和2的波特率是固定的,而方式1和3的波特率是可变的,由定时器T1的溢出率控制。 方式0 方式0的波特率固定为主振频率的1/12。 方式2 方式2的波特率由PCON 中的选择位SMOD 来决定,可由下式表示: 波特率=2的SMOD 次方除以64再乘一个fosc,也就是当SMOD=1时,波特率为1/32fosc,当SMOD=0时,波特率为1/64fosc 3.方式1和方式3 定时器T1作为波特率发生器,其公式如下: 波特率=定时器T1溢出率 产生溢出所需的周期数/计数率T 132 2=溢出率T 1mod ?s 式中T1计数率取决于它工作在定时器状态还是计数器状态。当工作于定时器状态时,T1计数率为fosc/12;当工作于计数器状态时,T1计数率为外部输入频率,此频率应小于fosc/24。产生溢出所需周期与定时器T1的工作方式、T1的预置值有关。 定时器T1工作于方式0:溢出所需周期数=8192-x 定时器T1工作于方式1:溢出所需周期数=65536-x 定时器T1工作于方式2:溢出所需周期数=256-x 因为方式2为自动重装入初值的8位定时器/计数器模式,所以用它来做波特率发生器最恰当。 当时钟频率选用11.0592MHZ 时,取易获得标准的波特率,所以很多单片机系统选用这个看起来“怪”的晶振就是这个道理。 下表列出了定时器T1工作于方式2常用波特率及初值。 常用波特率 Fosc(MHZ) SMOD TH1初值 19200 11.0592 1 FDH 9600 11.0592 0 FDH 4800 11.0592 0 FAH 2400 11.0592 0 F4h 1200 11.0592 0 E8h 例如9600 11.0592 0 FDH 溢出率T 1定时时32 2 =波特率mod ?s T1溢出率= T1计数率/产生溢出所需的周期数 产生溢出所需的周期数=256-FD(253)=3 SMOD=0 11059200/12*3 *1/32=9600

用CPLD实现串行通信时的波特率自动侦测

用CPLD实现串行通信时的波特率自动侦测 杨李莎1朱华福 2 (1.长安大学研究生部,陕西西安 710064;2.云南昆船设备有限公司昆明 650236) 摘要:本文介绍了一种利用CPLD实现波特率自动侦测的方法,文章最后给出其仿真结果关键词:串行通信波特率自动侦测复杂可编程逻辑器件 Abstract: In this paper, it introduces a way to automatically detect baud rate by using CPLD, and in the end indicates it’s emulation results . Key words: serial communication baud rate auto detected CPLD 1、引言 串行数据通信是应用极为广泛的技术,通过数据传输控制或监测中心可以对远端设备进行控制和监测设备的工作状态。串行外设都会用到RS-232C 异步串行接口.传统上采用专用的集成电路即UART实现,如TI、EXAR、EPIC 的550、452等系列,但是我们一般不需要使用完整的UART的功能,而且对于多串口的设备或需要加密通讯的场合使用UART也不是最合适的。如今的许多的电器都有串口,主要用于软件的升级或者用于自诊断。通常单机设备的串行通信波特率设置都是采用硬件拨码的方式进行的,对于一些拨码开关特别多的设备来说难于记忆,因此能否寻求一种波特率自适应的方法来解决这个问题呢?回答是肯定的,本文就介绍一种用复杂可编程逻辑器件来实现波特率自动侦测的方法。系统只设计了数据接收模块,利用VHDL语言对其进行编程,最后给出其仿真结果。 2、系统设计 2.1系统介绍 图1所示为数据接收模块结构框图,数据接收模块由波特率发生基准时钟、开始位下降沿检测、接收控制、串并转换器、锁存器、缓冲器等部分组成。为了能准确地侦测出接收数据的波特率,数据接收模块中采用了波特率发生基准时钟,首先用基准时钟对RXD端的数据进行接收采样,然后按波特率自动侦测原理进行波特率自动侦测,最后产生一个与发送端发送的数据相同的波特率,利用波特率进行通信。 1【作者简介】杨李莎(1981—)女,长安大学研究生部04级交通信息工程及控制专业硕士研究生,主要从事高速公路和城市道路的交通控制及管理研究。

第06章单片机串行通信系统习题解答

第6章单片机串行通信系统习题解答 一、填空题 1.在串行通信中,把每秒中传送的二进制数的位数叫波特率。 2.当SCON中的M0M1=10时,表示串口工作于方式 2 ,波特率为 fosc/32或fosc/64 。 3.SCON中的REN=1表示允许接收。 4.PCON 中的SMOD=1表示波特率翻倍。 5.SCON中的TI=1表示串行口发送中断请求。 6.MCS-51单片机串行通信时,先发送低位,后发送高位。 7.MCS-51单片机方式2串行通信时,一帧信息位数为 11 位。 8.设T1工作于定时方式2,作波特率发生器,时钟频率为,SMOD=0,波特率为时,T1的初值为 FAH 。 9.MCS-51单片机串行通信时,通常用指令 MOV SBUF,A 启动串行发送。 10.MCS-51单片机串行方式0通信时,数据从引脚发送/接收。 二、简答题 1.串行口设有几个控制寄存器它们的作用是什么 答:串行口设有2个控制寄存器,串行控制寄存器SCON和电源控制寄存器PCON。其中PCON中只有的SMOD与串行口的波特率有关。在SCON中各位的作用见下表: 2.MCS-51单片机串行口有几种工作方式各自的特点是什么 答:有4种工作方式。各自的特点为:

3.MCS-51单片机串行口各种工作方式的波特率如何设置,怎样计算定时器的初值 答:串行口各种工作方式的波特率设置: 工作方式O :波特率固定不变,它与系统的振荡频率fosc 的大小有关,其值为fosc/12。 工作方式1和方式3:波特率是可变的,波特率=(2SMOD/32)×定时器T1的溢出率 工作方式2:波特率有两种固定值。 当SM0D=1时,波特率=(2SM0D/64)×fosc=fosc/32 当SM0D=0时,波特率=(2SM0D/64)×fosc=fosc/64 计算定时器的初值计算: 4.若fosc = 6MHz ,波特率为2400波特,设SMOD =1,则定时/计数器T1的计数初值为多少并进行初始化编程。 答:根据公式 N=256-2SMOD ×fosc /(2400×32×12)= ≈243 =F3H TXDA: MOV TMOD,#20H ;置T1定时器工作方式2 MOV TL1,#0F3H ;置T1计数初值. MOV TH1,#0F3H B f B f N OSC SMOD OSC SMOD ??-=???-=384225612322256

单片机波特率的计算方法

51单片机波特率计算的公式和方法 51单片机芯片的串口可以工作在几个不同的工作模式下,其工作模式的设置就是使用SCON寄存器。它的各个位的具体定义如下: SM0SM1SM2REN TB8RB8TI RI SM0、SM1为串行口工作模式设置位,这样两位可以对应进行四种模式的设置。串行口工作模式设置。 波特率在使用串口做通讯时,一个很重要的参数就是波特率,只有上下位机的波特率一样时才可以进行正常通讯。波特率是指串行端口每秒内可以传输的波特位数。这里所指的波特率,如标准9600不是每秒种可以传送9600个字节,而是指每秒可以传送9600个二进位,而一个字节要8个二进位,如用串口模式1来传输那么加上起始位和停止位,每个数据字节就要占用10个二进位,9600波特率用模式1传输时,每秒传输的字节数是9600÷10=960字节。 51芯片的串口工作模式0的波特率是固定的,为fosc/12,以一个12M的晶振来计算,那么它的波特率可以达到1M。模式2的波特率是固定在fosc/64或fosc/32,具体用那一种就取决于PCON寄存器中的SMOD位,如SMOD为0,波特率为focs/64,SMOD为1,波特率为focs/32。 模式1和模式3的波特率是可变的,取决于定时器1或2(52芯片)的溢出速率,就是说定时器1每溢出一次,串口发送一次数据。那么我们怎么去计算这两个模式的波特率设置时相关的寄存器的值呢?可以用以下的公式去计算。

上式中如设置了PCON寄存器中的SMOD位为1时就可以把波特率提升2倍。通常会使用定时器1工作在定时器工作模式2下,这时定时值中的TL1做为计数,TH1做为自动重装值,这个定时模式下,定时器溢出后,TH1的值会自动装载到TL1,再次开始计数,这样可以不用软件去干预,使得定时更准确。在这个定时模式2下定时器1溢出速率的计算公式如下: 溢出速率=(计数速率)/(256-TH1初值) 溢出速率=fosc/[12*(256-TH1初值)] 上式中的“计数速率”与所使用的晶体振荡器频率有关,在51芯片中定时器启动后会在每一个机器周期使定时寄存器TH的值增加一,一个机器周期等于十二个振荡周期,所以可以得知51芯片的计数速率为晶体振荡器频率的1/12,一个12M的晶振用在51芯片上,那么51的计数速率就为1M。通常用11.0592M 晶体是为了得到标准的无误差的波特率,那么为何呢?计算一下就知道了。如我们要得到9600的波特率,晶振为11.0592M和12M,定时器1为模式2,SMOD 设为1,分别看看那所要求的TH1为何值。代入公式: 11.0592M 9600=(2÷32)×((11.0592M/12)/(256-TH1)) TH1=250

MCS-51单片机串行口工作方式与波特率计算举例

MCS-51单片机串行口工作方式与波特率计算举例 1)方式0 方式0是外接串行移位寄存器方式。工作时,数据从RXD串行地输入/输出,TXD 输出移位脉冲,使外部的移位寄存器移位。波特率固定为fosc/12(即,TXD每机器周期输出一个同位脉冲时,RXD接收或发送一位数据)。每当发送或接收完一个字节,硬件置TI=1或RI=1,申请中断,但必须用软件清除中断标志。 实际应用在串行I/O口与并行I/O口之间的转换。 2)方式1 方式1是点对点的通信方式。8位异步串行通信口,TXD为发送端,RXD为 接收端。一帧为10位,1位起始位、8位数据位(先低后高)、1位停止位。波特率由T1或T2的溢出率确定。 在发送或接收到一帧数据后,硬件置TI=1或RI=1,向CPU申请中断;但必须用软件清除中断标志,否则,下一帧数据无法发送或接收。 (1)发送:CPU执行一条写SBUF指令,启动了串行口发送,同时将1写入 输出移位寄存器的第9位。发送起始位后,在每个移位脉冲的作用下,输出移位寄存器右移一位,左边移入0,在数据最高位移到输出位时,原写入的第9位1的左边全是0,检测电路检测到这一条件后,使控制电路作最后一次移位,/SEND 和DATA无效,发送停止位,一帧结束,置TI=1。 (2)接收:REN=1后,允许接收。接收器以所选波特率的16倍速率采样RXD 端电平,当检测到一个负跳变时,启动接收器,同时把1FFH写入输入移位寄存器(9位)。由于接、发双方时钟频率有少许误差,为此接收控制器把一位传送时间16等分采样RXD,以其中7、8、9三次采样中至少2次相同的值为接收值。接收位从移位寄存器右边进入,1左移出,当最左边是起始位0时,说明已接收8位数据,再作最后一次移位,接收停止位。此后: A、若RI=0、SM2=0,则8位数据装入SBUF,停止位入RB8,置RI=1。

波特率自适应

波特率自适应方案 一、波特率自适应概念 电表检测PC 机通信的波特率,并自动匹配通信。 二、方案 1、 点对点自适应通信,即PC 机与单一电表进行自适应通信。 如果我们想利用PC 机(波特率为1200bps )对未知波特率的电表通信,则需要进行下面几个步骤。 1.1 第一步:PC 机需要以1200bps 发送“ 55H 55H ” 1.2 第二步:等待未知波特率的电表应答。如果自适应成功则应答字符为:“80H ”,这时未知波特率的电表将更波特率为1200bps 。如果无应答,应答字符有误,或者在500ms 内未应答则此次自适应过程失败。重复第一步和第二步,重复三次都未应答则自适应失败。 1.3 第三步:成功自适应则可以利用1200bps 对电表进行通信。自适应失败只能将电表的波特率修改成1200bps 才能通信。 如果想用其他的波特率通信,请重复上面步骤 流程图 PC (1200)发送5555H → 电表回复80H → 1200正常通讯 →若要修改波特率 ↑ ↓ ← 电表未回复80H 2、 点对多自适应通信,即广播方式让总线上的电表统一波特率 流程图 3、 电表单片机自适应波特率原理 在不同波特率下发送一位数据的时间是不一样的,利用这个原理,确认在1200、2400、4800、9600状态下发送一个字节所需要的时间段B1、B2、B3、B4,将其存储到单片机中。 PC 机以广播方式1200bps 发送5555H 等待500ms 再次广播 发送55H 等待500m PC 机以 1200bps 抄读系统表

当PC机发送数据到电表时,单片机利用定时器测量接收一个字节的时间A,然后将A与B1,B2,B3,B4进行比对,假如A在B1范围内,那么单片机将电表波特率设置为1200,修改波特率结束。 流程图如下所示: 广播或者PC发送5555H(1200波特率) 单片机接收到第一个字节数据 55H,产生接收中断1 定时器开始工作,每产生一次定 时器中断就对变量A进行累加 单片机接收到第二个字节数据 55H,产生接收中断2 关闭定时器,将变量A与 B1/B2/B3/B4进行比对,确认A 属于范围B1 单片机将电表波特率改为1200 波特率修改成功

基于51单片机的波特率自动识别系统程序

#include #define uint unsigned int #define uchar unsigned char #define disp_off 0x3e //关显示 #define disp_on 0x3f //开显示 #define disp_x 0xb8 //页地址 #define disp_z 0xc0 //行地址 #define disp_y 0x40 //列地址 #define comm 0 //命令标志 #define dat 1 //数据标志 #define data_ora P0 //MCU P0<------> LCM sbit cs1=P2^0; //cs1=L,选择左半屏 sbit cs2=P2^1; //cs2=L,选择右半屏 sbit rs =P2^2; //H:写数据,L:写指令 sbit rw =P2^3; //H:读,L:写 sbit e =P2^4; //读写使能 sbit bf =P0^7; //执行操作标志 sbit res=P0^4; //复位初始化标志 uchar uart_data,temp,baud_set=0x00; uchar dispnum[90]; uchar baud[5]={0x00,0x09,0x06,0x00,0x00}; uchar r_dat[4]={0x00,0x10,0x00,0x00}; uchar code baudrate[7][5]={ {0x00,0x00,0x03,0x00,0x00}, {0x00,0x00,0x06,0x00,0x00}, {0x00,0x01,0x02,0x00,0x00}, {0x00,0x02,0x04,0x00,0x00}, {0x00,0x04,0x08,0x00,0x00}, {0x00,0x09,0x06,0x00,0x00}, {0x01,0x04,0x04,0x00,0x00}, }; //波特率大小 uchar code hz11[]={ /*-- 隶书12; 此字体下对应的点阵为:宽x高=16x16 --*/ /*-- 文字: 发--*/ 0x00,0x00,0x00,0xE0,0xA0,0x80,0x80,0xF0, 0x80,0xA0,0xB0,0x80,0x00,0x00,0x00,0x00, 0x00,0x08,0x08,0x08,0x1C,0x14,0x13,0x1B, 0x0D,0x07,0x0B,0x18,0x18,0x30,0x10,0x00, /*-- 文字: 送--*/

单片机与PC机串行通信中波特率的确定

单片机与PC机串行通信中波特率的确定 关键字:单片机 PC机串行通信波特率 1 单片机异步通信口的特点及波特率的选定 MSC51系列单片机有一个全双工的异步通信口,他利用其RXD和TXD与外界进行通信,其内部有2个物理上完全独立的接收、发送缓冲器SBUF,可同时发送和接收数据。异步串行通信发送和接收数据的速率与移位脉冲同步。一般用51系列的T1定时器作为波特率发生器,T1的溢出率经二分频(或不分频)后又经十六分频作为串行发送或接收的移位脉冲,移位脉冲的速率即波特率。单片机的异步通信波特率与串行口的工作方式、主振频率Fosc及定时器T1的工作方式有关。一般通信中使T1工作于方式2(可重装时间常数方式),若Fosc取6 MHz,则波特率的计算公式如下: 其中:SMOD是可编程的(即PCON的第8位),由此公式计算出的波特率是不标准的波特率。? 2 PC机异步通信口及其波特率的设置 由于UART(通用异步接收/发送器)的产品型号很多,PC机和XT机都采用的是INS8250芯片, AT机采用的是NSI16450芯片,他们二者是兼容的。因此这里以8250芯片为例来说明PC机异步通信波特率的设定方法。PC机中有2个异步通信口,一个是COM1,其端口地址范围是3F8H~3 FFH,另一个是COM2,其端口地址是2F8H~2FFH。其与MODEM配合可以实现远距离通信。其波特率是标准波特率50~9 600 b/s。 8250内部有10个寄存器端口,其中有一个除数锁存器,可以通过编程除数的大小来确定异步通信的波特率。8250使用的频率是1843 2 MHz的基准时钟输入信号,所以必须用分频的方法产生所需要的波特率(移位脉冲)。除数锁存器的值必须在8250初始化时设置,即把通信线路控制器的最高位(DLAB)置1,然后分两次把除数锁存器的高8位和低8位分别写入端口地址3F8H和3F9H(COM1),8250传送或接收串行数据时使用的时钟信号的频率是数据传输波特率的16倍,即波特率=16×除数/1 843 200。由此公式可以计算出几种标准波特率与除数的对应值如下:对应于波特率为1 200 b/s的除数锁存器的低8位值为60H;对应于波特率为2 400 b/s的除数锁存器低8位的值为30H;对应于波特率为4 800 b/s的除数锁存器低8位的值为18H;对应于波特率为9 600 b/s的除数锁存器低8位的值为0CH。 3 用PC机的汇编语言设计的串行通信程序中波特率的设定 PC机的ROM BIOS串行通信管理程序为14H号中断处理程序,他可支持DTE与DCE间的通信,也能支持两个DTE间用MODEM连接方式的RS232C接口通信。BIOS串行通信管理程序的功能是:串行口初始化、发送数据字符、接收数据字符和取串行口状态。他是利用查询方式来实现数据字符的接收和发送,但当查询超时一定时间后就不再继续查询,而认为是线路故障或对方未准备好,并通过返回参数中的超时标志来表示操作失败。 BIOS INT 14H的中断功能调用的入口和出口参数如下: 例如要设计用COM1来发送字符,波特率为1200 b/s,8 个数据位,1个停止位,采用查询方式无效验位,则初始化程序如下: 4 利用Turbo C编写的PC机通信程序中波特率的设定 Turbo C函数库中提供了专门的调用BIOS串行软中断的函数Bioscom(int cmd,char byte,int pure),其中:参数cmd用来设置通信类型,cmd=0,初始化串行口pure;cmd=1,发送一个字符;cmd=2,接收一个字符;cmd=3返回串口当前状态。参数byte用来确定串行口的异步

STM32_CAN波特率计算

一般设置CAN_SJW = 1,总结程序发现!!! can时钟是RCC_APB1PeriphClock(APB1从APB2而来,分频系数不同,导致APB1不同,mini版中一般是APB2为72Mhz,APB1是36MHz),你要注意CAN时钟频率 CAN波特率= RCC_APB1PeriphClock/(1+CAN_BS1+CAN_BS2)/CAN_Prescaler ; 另外尽可能的把采样点设置为CiA 推荐的值: 75% when 波特率> 800K 80% when 波特率> 500K 87.5% when 波特率<= 500K 所以对于100K 的波特率(假定使用8MHz 时钟) 可以修改该BS1 BS2 为: CAN_InitStructure.CAN_Prescaler=5; CAN_InitStructure.CAN_BS1=CAN_BS1_13tq; CAN_InitStructure.CAN_BS2=CAN_BS2_2tq; (1+13) / (1+13+2) = 87.5% CAN波特率计算—网友总结 STM32里的CAN 支持2.0A,2.0B, 带有FIFO,中断等, 这里主要提一下内部的时钟应用. bxCAN挂接在APB1总线上,采用总线时钟,所以我们需要知道APB1的总线时钟是多少. 我们先看看下图,看看APB1总线时钟:

APB1时钟取自AHB的分频, 而AHB又取自系统时钟的分频, 系统时钟可选HSI,HSE, PLLCLK, 这个在例程的RC设置里都有的, 然后再看看有了APB1的时钟后,如何算CAN的总线速率, 先看下图: 有了上边的这个图,基本就清楚了. 总线时钟MHz (3+TS1+TS2)*(BRP+1) ===================================================下面是我的计算:

52单片机串口波特率设置函数

52单片机串口波特率设置函数 波特率设置太麻烦了吧,用函数设置吧,不必东奔西走的找了,个人自己写的代码,欢迎使用,不需要金币,好用就评价一下吧 注意了,仅用于52系列单片机,代码如下: /*----------52单片机波特率设置函数-------------- ------------------------------------------------ 作者:wenguang.li Email:liwg@https://www.360docs.net/doc/5518884419.html,//wenguang.li@https://www.360docs.net/doc/5518884419.html, MCU: *52 Cristal frequency unit MHz 晶体频率单位MHz Baudrate as you desired Example: set52_baudrate(11.0592,57600) Use Timer2 使用定时器2 ------------------------------------------------ ----------------------------------------------*/ //if osc=11.0592M //can set baudrate 110,300,600,1200,2400,4800,9600,19200,38400,57600,115200bps void set52_baudrate(float frequency,long int baudrate) { unsigned int itmp; unsigned char tlow,thigh; itmp=(int)(65536-(frequency*1000000)/(baudrate*32)); thigh=itmp/256; tlow=itmp%256; SCON=0x56; T2CON=0x30; RCAP2H=thigh; RCAP2L=tlow; TH2=thigh; TL2=tlow; TR2=1; //set ok } /////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////

计算机网络原理公式及计算题

计算机网络原理公式及计算题 第三章物理层 公式一:数据传输速率的定义和计算 每秒能传输的二进制信息位数,单位为位/秒(bits per second),记作bps或b/s R=1/T*Log2N(bps) T为一个数字脉冲信号的宽度(全宽码情况)或重复周期(归零码情况)单位为秒. N一个码元所取有效离散值个数,也称调制电平数,取2的整数次方值公式二: 信号传输速率(码元速率、调制速率或波特率)定义和计算单位时间内通过信道传输的码元个数,也就是信号经调制后的传输速率,单位为波特(Baud)。 B=1/T (Baud) 公式三:调制速率与数据传输速率的对应关系式 R=B*Log2N(bps) 公式四:奈奎斯特公式 奈奎斯特(Nyquist)定理奈奎斯特首先给出了无噪声情况下码元速率的极限值B与信息带宽H的关系 B=2*H H是信道的带宽,单位为Hz 信道传输能力的奈奎斯特公式: C=2*H*Log2N

公式五:香农公式 受随机噪声干扰的信道情况,给出了计算信道的香农公式: C=H*Log2(1+S/N)(bps) 其中,S表示信号功率,N为噪声功率,S/N则为信噪比。由于实际使用的信道的信噪比都要足够大,故常表示成10*log10 (S/N),以分贝(dB)为单位来计算,在使用时要特别注意 公式六:误码率 误码率是衡量数据通信系统在正常工作情况下的工作情况下的传输可靠性的指标,它定义为二进制数据传输出错的概率。设传输的二进制数据总数为N位,其中出错的位数为Ne,则误码率表示为; Pe= Ne/N 公式七:采样定律 采样定理 ?Fs(= 1/Ts )≥ 2Fmax 或Fs≥2Bs ?Fs是采样频率,Fmax 是原始信号最大频率,Ts 为采样周期,Bs(= Fmax- Fmin)为原始信号的带宽。 ?量化级是2的整数倍,用来生成每次采样的二进制码的个数,?2二进制码个数=量化级,比如量化级为128,则每次采样二进制码为7个 ?信号传输速率=采样频率*每次采样的二进制码个数 ?R(数据传输率)=1/T*log2N

51单片机晶振与波特率的关系

51 单片机晶振与波特率的关系 在串行通信中, MCS — 51 串口可约定四种工作方式。其中,方式 0 和方式 2 的波特率是固定的,而方式 1 和方式 3 的波特率是可变的,由定时器 T1 的溢出率决定。波特率是指串行端口每秒内可以传输的波特位数。这里所指的波特率,如标准9600 不是每秒种可以传送 9600 个字节,而是指每秒可以传送9600 个二进位,而一个字节要 8 个二进位,如用串口模式 1 来传输,那么加上起始位和停止位,每个数据字节就要占用 10 个二进位, 9600 波特率用模式 1 传输时,每秒传输的字节数是9600 - 10=960字节。一、方式0 和方式 2的波特率 方式0的波特率是固定的,为fosc/12 ,以一个12M的晶振来计算,那么它的波特率可以达到 1M。 方式2的波特率是固定在fosc/64或fosc/32,具体用那一种就取决于 PCON 寄存器中的 SMOD 位,如 SMOD 为 0,波特率为 focs/64,SMOD 为 1 ,波特率为 focs/32 。二、方式 1 和方式3 的波特率 模式 1 和模式 3 的波特率是可变的,取决于定时器 1 或 2(对于 52 芯片)的溢出速率,就是说定时器 1 每溢出一次,串口 发送一次数据。可以用以下的公式去计算:上式中如设置了 PCON 寄存器中的 SMOD 位为 1 时就可以把波特率提升 2 倍。通常会使用定时器 1工作在定时器工作模式 2 下,这时定时值中的 TL1

做为计数, TH1 做为自动重装值,这个定时模式下,定时器溢出后, TH1 的值会自动装载到 TL1 ,再次开始计数,这样可以不用软件去干预,使得定时更准确。在这个定时模式 2 下定时器 1 溢出速率的计算公式如下:溢出速率 =(计数速率 )/(256-TH1 初值 ) 溢出速率 =fosc/[12*(256-TH1 初值 )] 上式中的“计数速率”与所使用的晶体振荡器频率有关,在 51 芯片中定时器启动后会在每一个机器周期使定时寄存器 TH 的值加 1,一个机器周期等于十二个振荡周期,所以可以得知 51 芯片的计数速率为晶体振荡器频率的 1/12 ,一个 12M 的晶振用在 51 芯片上,那么 51 的计数速率就为 1M 。通常用 11.0592M 晶体是为了得到标准的无误差的波特率,那么为何呢?计算一下就知道了。如我们要得到 9600 的波特率,晶振为 11.0592M 和 12M ,定时器1 为模式 2,SMOD 设为 1 ,分别看看那所要求的 TH1 为何值。代入公式: 11.0592M : 9600=(2 + 32) X ((11.0592M/12)/(256-TH1)) TH1=250 12M : 9600=(2 + 32) X ((12M/12)/(256-TH1)) TH1? 249.49 上面的计算可以看出使用 12M 晶体的时候计算出来的 TH1 不为整数,而 TH1 的值只能取整数,这样它就会有一定的误差存在不能产生精确的 9600 波特率。当然一定的误差是可以在使用中被接受的,就算使用 11.0592M 的晶体振荡器也会因晶体本身所存在的误差使波特率产生误差,但晶体本身的误差对

相关文档
最新文档