80C51系列单片机波特率自动检测的通用程序
基于80c51单片机自动温度测量AD转换报警按键程序

#include "reg51.h"#include "KEY.h"#include "SMG.h"#include "Vol_Measure.h"#include "X25045.h"sbit KEY = P1^5;uchar Channel=1; 默认通1uchar SETTING=0; 系统状态标志uchar SET_FLAG=0; 设置状态标志按键功能函数void Key_Func(void){static uchar count=0;char TH=0,TL=0; 山下限switch(key_scan()){case 1 ESC键{SETTING=1; 系统进入设置状态SET_FLAG=SET_TH; 默认设置上限break;}case 2 Enter键{if(SETTING) 进入系统设置状态{count++;switch(count){case 1 SET_FLAG=SET_TL;break; 第一次设置上限case 2 SETTING=0;count=0;break; 第二次退出设置}}break;}case 3{if(SETTING) 进入系统设置{if(SET_FLAG==SET_TH) 上限设置{switch(Channel){case 1{TH=Read_Data(TH1_Address,0);TL=Read_Data(TL1_Address,0);TH-=1; 上限减0.1Vif(THTL) 上限大于下限,则设置新上限Write_Data(TH,TH1_Address,0);break;}case 2{TH=Read_Data(TH2_Address,0);TL=Read_Data(TL2_Address,0);TH-=1; 上限减0.1Vif(THTL) 上限大于下限,则设置新上限Write_Data(TH,TH2_Address,0);break;}case 3{TH=Read_Data(TH3_Address,0);TL=Read_Data(TL3_Address,0);TH-=1; 上限减0.1Vif(THTL) 上限大于下限,则设置新上限Write_Data(TH,TH3_Address,0);break;}case 4{TH=Read_Data(TH4_Address,0);TL=Read_Data(TL4_Address,0);TH-=1; 上限减0.1Vif(THTL) 上限大于下限,则设置新上限Write_Data(TH,TH4_Address,0);break;}}}else if(SET_FLAG==SET_TL) 下限设置{switch(Channel){case 1{TH=Read_Data(TH1_Address,0);TL=Read_Data(TL1_Address,0);TL-=1; 下限减0.1Vif(TL=0) 下限不小于零,则设置新下限Write_Data(TL,TL1_Address,0);break;}case 2{TH=Read_Data(TH2_Address,0);TL=Read_Data(TL2_Address,0);TL-=1; 上限减0.1Vif(TL=0) 下限不小于零,则设置新下限Write_Data(TL,TL2_Address,0);break;}case 3{TH=Read_Data(TH3_Address,0);TL=Read_Data(TL3_Address,0);TL-=1; 下限减0.1Vif(TL=0) 下限不小于零,则设置新下限Write_Data(TL,TL3_Address,0);break;}case 4{TH=Read_Data(TH4_Address,0);TL=Read_Data(TL4_Address,0);TL-=1; 下限减0.1Vif(TL=0) 下限不小于零,则设置新下限Write_Data(TL,TL4_Address,0);break;}}}}else 退出系统设置{Channel--;if(Channel1){Channel=4;}Select_Channel(Channel);}break;}case 4{if(SETTING) 进入系统设置{if(SET_FLAG==SET_TH) 上限设置{switch(Channel){case 1{TH=Read_Data(TH1_Address,0);TL=Read_Data(TL1_Address,0);TH+=1; 上限加0.1Vif(TH=50) 上限不大于5.0V,则设置新上限Write_Data(TH,TH1_Address,0);break;}case 2{TH=Read_Data(TH2_Address,0);TL=Read_Data(TL2_Address,0);TH+=1; 上限加0.1Vif(TH=50) 上限不大于5.0V,则设置新上限Write_Data(TH,TH2_Address,0);break;}case 3{TH=Read_Data(TH3_Address,0);TL=Read_Data(TL3_Address,0);TH+=1; 上限加0.1Vif(TH=50) 上限不大于5.0V,则设置新上限Write_Data(TH,TH3_Address,0);break;}case 4{TH=Read_Data(TH4_Address,0);TL=Read_Data(TL4_Address,0);TH+=1; 上限加0.1Vif(TH=50) 上限不大于5.0V,则设置新上限Write_Data(TH,TH4_Address,0);break;}}}else if(SET_FLAG==SET_TL) 下限设置{switch(Channel){case 1{TH=Read_Data(TH1_Address,0);TL=Read_Data(TL1_Address,0);TL+=1; 下限减0.1Vif(TLTH) 下限小于上限,则设置新下限Write_Data(TL,TL1_Address,0);break;}case 2{TH=Read_Data(TH2_Address,0);TL=Read_Data(TL2_Address,0);TL+=1; 下限减0.1Vif(TLTH) 下限小于上限,则设置新下限Write_Data(TL,TL2_Address,0);break;}case 3{TH=Read_Data(TH3_Address,0);TL=Read_Data(TL3_Address,0);TL+=1; 下限减0.1Vif(TLTH) 下限小于上限,则设置新下限Write_Data(TL,TL3_Address,0);break;}case 4{TH=Read_Data(TH4_Address,0);TL=Read_Data(TL4_Address,0);TL+=1; 下限减0.1Vif(TLTH) 下限小于上限,则设置新下限Write_Data(TL,TL4_Address,0);break;}}}}else 退出系统设置{Channel++;if(Channel4){Channel=1;}Select_Channel(Channel);}break;}defaultbreak;}}uchar key_scan(void){static uchar key_state = 0;static uchar key_input = 0;uchar key_return = 0;uchar key_press = 0;P2=key_input;switch(key_state){case key_state_0 按键初始态。
单片机51测速程序

//实例100:电机转速表设计#include<reg51.h> //包含单片机寄存器的头文件#include<intrins.h> //包含_nop_()函数定义的头文件sbit RS=P2^0; //寄存器选择位,将RS位定义为P2.0引脚sbit RW=P2^1; //读写选择位,将RW位定义为P2.1引脚sbit E=P2^2; //使能信号位,将E位定义为P2.2引脚sbit BF=P0^7; //忙碌标志位,,将BF位定义为P0.7引脚unsigned char code digit[ ]={"0123456789"}; //定义字符数组显示数字unsigned int v; //储存电机转速unsigned char count; //储存定时器T0中断次数bit flag; //计满1秒钟标志位/*****************************************************函数功能:延时1ms(3j+2)*i=(3×33+2)×10=1010(微秒),可以认为是1毫秒***************************************************/void delay1ms(){unsigned char i,j;for(i=0;i<10;i++)for(j=0;j<33;j++);}/*****************************************************函数功能:延时若干毫秒入口参数:n***************************************************/void delay(unsigned char n){unsigned char i;for(i=0;i<n;i++)delay1ms();}/*****************************************************函数功能:判断液晶模块的忙碌状态返回值:result。
80C51单片机的程序设计(完整版)

第四章 80C51单片微机的程序设计 单片微机的程序设计
4.1概述 概述
4.1.1 汇编语言格式
1. 计算机语言 计算机语言——机器语言、汇编语言与高级语言 机器语言、 机器语言 程序就是为计算某一算式或完成某一工作的若干指令的有序 集合。计算机的全部工作概括起来, 集合。计算机的全部工作概括起来,就是执行这一指令序列的 过程。这一指令序列称为程序。为计算机准备这一指令前的过 过程。这一指令序列称为程序。 程称为程序设计。目前, 程称为程序设计。目前,可用于程序设计的语言基本上可分为 三种:机器语言、汇编语言和高级语言。 三种:机器语言、汇编语言和高级语言。 ⑴ 机器语言 在计算机中,所有的数符都是用二进制代码来表示的, 在计算机中,所有的数符都是用二进制代码来表示的,指令 也是用二进制代码来表示。这种用二进制代码表示的指令系统 也是用二进制代码来表示。 称为机器语言系统,简称为机器语言。 称为机器语言系统,简称为机器语言。直接用机器语言编写的 程序称为手编程序或机器语言程序。 程序称为手编程序或机器语言程序。
两种语句都由四个部分组成。其中每一部分称为域也称为字段, 两种语句都由四个部分组成。其中每一部分称为域也称为字段, 各字段之间用一个空格或字段定界符分隔, 各字段之间用一个空格或字段定界符分隔,常用的字段定界符有 冒号“ ”“逗号 逗号“ 和分号“ 冒号“:”“逗号“,”和分号“;”。其中方括号括起来的是 可选择部分。 可选择部分。
标号(也称为名字 标号 也称为名字) 域: 也称为名字 用来说明指令的地址。标号可以作为LJMP、AJMP、 用来说明指令的地址。标号可以作为 、 、 LCALL及ACALL等指令的操作数。 等指令的操作数。 及 等指令的操作数 • 在指令语句中,标号位于一个语句的开头位置,由字母和数 在指令语句中,标号位于一个语句的开头位置, 符组成, 字母打头,冒号“ 结束。 符组成 , 字母打头 , 冒号 “ : ” 结束 。 在 80C51单片微机的汇编 单片微机的汇编 语言中,标号中的字符个数一般不超过8个 若超过8个 语言中,标号中的字符个数一般不超过 个,若超过 个,则以前 面的8个为有效 后面字符不起作用。 个为有效, 面的 个为有效,后面字符不起作用。 • 不能使用本汇编语言中已经定义了的符号作标号, 不能使用本汇编语言中已经定义了的符号作标号,比如指令 助记符(如 及寄存器符号名称(如 助记符 如ADD) 、伪指令 (如END) 及寄存器符号名称 如PC) 。 如 • 一条语句可以有标号,也可以没有标号, 一条语句可以有标号,也可以没有标号,标号的有无取决于 程序中的其它语句是否需要访问该条语句。 程序中的其它语句是否需要访问该条语句。 伪指令语句与指令语句主要不同是在其名字后面没有冒号。 伪指令语句与指令语句主要不同是在其名字后面没有冒号。
微控制器技术复习题-

微控制器技术复习题-第一章1、计算机中最常用的字符信息编码是()(A) ASCII (B) BCD码 (C) 余3码 (D) 循环码2、单片微型计算机有CPU、存储器和I/O三部分组成。
3、除了单片机这一名称之外,单片机还可称为微控制器和嵌入式控制器。
4、在家用电器中使用单片机应属于微计算机的()(A)辅助设计应用(B)测量、控制应用(C)数值计算应用(D)数据处理应用5、80C51基本型单片机内部程序存储器容量为()。
(A)16K (B)8K (C)4K (D)2K6、 8051与8751的区别是:()(A)内部数据存储单元数目的不同(B)内部数据存储器的类型不同(C)内部程序存储器的类型不同(D)内部的寄存器的数目不同第二章1、所谓CPU是指()A、运算器和控制器B、运算器和存储器C、输入输出设备D、控制器和存储2、MCS-51单片机内部包括哪些主要逻辑功能部件?3、80C51在物理上有4个独立的存储器空间。
4、使用8031芯片时,需将/EA引脚接低电平,因为其片内无程序存储器。
5、若不用MCS-51片内存储器,引脚EA必须接地。
6、80C51单片机的EA信号有什么功能? 在使用80C51时,EA信号引脚应如何处理,程序从何处什么地址开始执行?在使用80C31时, EA信号引脚应如何处理,程序从何处什么地址开始执行?7、8051单片机片内RAM低128个存储单元划分为哪3个主要部分?各部分主要功能是什么?8、MCS-51单片机访问外部存储器时,利用ALE信号锁存来自P0口的低8位地址信号。
9、请说明80C51单片机ALE引脚的时序功能,并举例说明其在系统中有哪些应用?10、8051单片机共有40个引脚,除了4个8位的端口和2根电源共34根之外,还有6根请分别说明它们一种主要的功能。
11、在80C51单片机应用系统中,可以作为时钟输出的是()引脚。
(A)RXD (B)RST (C)ALE (D)XTAL212、通过堆栈操作实现子程序调用,首先就要把PC的内容入栈,以进行断点保护。
《单片机原理及应用》习题库及答案

《单片机原理及应用》习题库单位:广东松山职业技术学院电气工程系自动化教研室编者:田亚娟等审核:《单片机原理及应用》精品课程项目组适用专业:电气自动化技术等专业一、填空题1.单片机与普通计算机的不同之处在于其将_CPU__、存储器和__I/O_3部分集成于一块芯片之上。
2.CPU主要由运算器和控制器组成。
CPU中的布尔处理器用来处理位操作。
3.MSC-51系列单片机中,片内无ROM的机型是8031 ,有4KB ROM的机型是_8051_,而有4KB EPROM 的机型是8751 。
4.-32的补码为11100000 B,补码11011010B代表的真值为_-38__D。
5.原码数BFH=_-63_D,原码数6EH=_110_D。
6.100的补码=_64_H,-100的补码= 9C H7.在8031单片机内部,其RAM高端128个字节的地址空间称为特殊功能寄存器或SFR 区,但其中仅有_21_个字节有实际意义。
8.通常单片机上电复位时PC=_0000_H,SP=_07_H,通用寄存器则采用第_0_组,这一组寄存器的地址范围是从_00 H~_07_H。
9.若PSW为18H,则选取的是第_3__组通用寄存器。
10.8031单片机复位后R4所对应的存储单元地址为_04_H,因上电时PSW=_00_H。
11.若A中数据为63H,那么PSW的最低位(即奇偶位P)为_0_。
12.在微机系统中,CPU是按照程序计数器PC 来确定程序的执行顺序的。
13.在8031单片机中,使用P2、P0口传送地址信号,且使用了P0口来传送数据信号,这里采用的是总线复用技术。
14.堆栈遵循先进后出(或后进先出)的数据存储原则,针对堆栈的两种操作为_PUSH_和_POP_。
15.当8051地RST端上保持两个机器周期以上低电平时,8051即发生复位。
16.使用8031单片机时需将EA引脚接_低__电平,因为其片内无程序存储器。
17.8位机中的补码数80H和7EH的真值分别为_-128__和_127 。
51单片机串行通讯中波特率的自动检测

51 单片机串行通讯中波特率的自动检测本文介绍一种在80C51 串行通讯应用中自动检测波特率的方法。
按照经验,程序起动后所接收到的第1个字符用于测量波特率。
这种方法可以不用设定难于记忆的开关,还可以免去在有关应用中使用多种不同波特率的烦恼。
人们可以设想:一种可靠地实现自动波特检测的方法是可能的,它无须严格限制可被确认的字符。
问题是:在各种的条件下,如何可以在大量允许出现的字符中找出波特率的定时间隔。
显然,最快捷的方法是检测一个单独位时间(single bit time),以确定接收波特率应该是多少。
可是,在RS-232 模式下,许多ASCII 字符并不能测量出一个单独位时间。
对于大多数字符来说,只要波特率存在合理波动(这里的波特率是指标准波特率),从起始位到最后一位“可见”位的数据传输周期就会在一定范围内发生变化。
此外,许多系统采用8 位数据、无奇偶校验的格式传输ASCII 字符。
在这种格式里,普通ASCII 字节不会有MSB 设定,并且,UART总是先发送数据低位(LSB),后发送数据高位(MSB),我们总会看见数据的停止位。
在下面的波特率检测程序中,先等待串行通讯输入管脚的起始信号(下降沿),然后起动定时器T0。
在其后的串行数据的每一个上升沿,将定时器T0的数值捕获并保存。
当定时器T0溢出时,其最后一次捕获的数值即为从串行数据起始位到最后一个上升沿(我们假设是停止位)过程所持续的时间。
CmpTable 表格列出了每一波特率的最大测量时间。
这些数据是经过选择的,所以,4 个数据位时间(加上起始位时间)仍可产生正确的波特率。
使用这种方法时,必须遵守一个假设:这种技术仅取决于所接收到的一个字符,接收这个字符的波特率必须大于最低波特率。
本质上来说,这意味着这个字符必须来自正常敲击键盘时所产生的字符。
在PC上,我们不可能快速、连续地敲击两个字符,以欺骗程序。
但是,PC的功能键具有一个问题,因为它会连续发送两个紧挨着的字符,使程序检测得到错误的波特率。
80C51单片机原理

80C51单片机原理RAM地址寄存器 RAM 128B 程序地址寄存器P0驱动器 P2锁存器 P2驱动器P1锁存器 暂存器2 B 寄存器 4KB ROM暂存器1ACC SP P0锁存器 PC PC 增1 缓冲器 P3锁存器 OSC中断、串行口及定时器PSW ALU DPTRP1驱动器 P3驱动器XTAL1XTAL2 P0.0~P0.7 P2.0~P2.7 P3.0~P3.7 P1.0~P1.7 RST ALEV CCV SS定时控制 指令译码器 指令寄存器 PSEN EA表2-1 P3口各引脚与第二功能表PSW 的各位定义见表80C51 P0~P3接口功能简见大多数口线都有双重功能,介绍如下: 1、P0口具有双重功能:(1) 作为通用I/O ,外接I/O 设备。
(2) 作为地址/数据总线。
在有片外扩展存储器的系统 中,低8位地址和数据由P0口分时传送。
PSW 位地址 PS W.7PSW .6PSW .5 PSW .4 PSW .3 PSW .2 PSW .1 PSW .0 位标志CY ACF0RS1RS0OVF1P2、P1口是唯一的单功能口:作为输入/输出口,P1口的每一位都可作为输入/输出口。
3、P2口具有双重功能:(1)作为输入/输出口。
(2)作为高8位地址总线。
在有片外扩展存储器的系统中,高8位地址由P2口传送。
4、P3口具有双重功能:(1)作第一功能使用时,其功能为输入/输出口。
(2)作第二功能使用时,每一位功能定义如表2.1所示。
80C51单片机的4个I/O口都是8位双向口,这些口在结构和特性上是基本相同的,但又各具特点,以下将分别介绍之。
图2-9 P0口某位的结构图2-10 P1口某位的结构1D CPQQ MUX& T1T2锁存器地址/数据控制信号C V CC内部总线写锁存器读锁存器读引脚P0.X引脚12DCPQQ T锁存器V CC内部总线写锁存器读锁存器读引脚P1.X引脚12图2-11 P2口某位的结构图2-12 P3口某位的结构P0~P3口使用时应注意事项1、如果80C51单片机内部程序存贮器ROM 够用,不需要扩展外部存贮器和I/O接口,80C51的四个口均可作I/O 口使用。
大工11春《单片机原理及应用》在线作业

大工11春《单片机原理及应用》在线作业一一、单选题(共10 道试题,共60 分。
)V 1. 80C51单片机内工作寄存器区的地址为()。
A. 00H~1FHB. 20H~2FHC. 30H~7FHD. 00H~7FH2. 若(A)=84H,(30H)=8DH,执行指令ADD A,30H之后()。
A. (CY)=0,(OV)=0B. (CY)=0,(OV)=1C. (CY)=1,(OV)=0D. (CY)=1,(OV)=13. 指令“MOV A,R0”采用的寻址方式是()。
A. 寄存器寻址B. 直接寻址C. 寄存器间接寻址D. 立即寻址4. 80C51单片机复位后,SP为()。
A. 00HB. 07HC. FFHD. 不定5. 以下不属于特殊功能寄存器SFR的是()。
A. 程序计数器PCB. 累加器ACCC. 堆栈指针SPD. 程序状态字寄存器PSW6. 若(A)=C9H,(R2)=54H,(CY)=1,执行指令SUBB A,R2之后()。
A. (CY)=0,(OV)=0B. (CY)=0,(OV)=1C. (CY)=1,(OV)=0D. (CY)=1,(OV)=17. 80C51单片机中,晶振频率为12MHz时机器周期为()。
A. 0.5μsB. 1.0μsC. 1.5μsD. 2.0μs8. 以下关于补码说法错误的是()。
A. 在计算机中,对带符号数的运算均采用补码B. 正数的补码与其原码相同C. 负数的补码与其原码相同D. 负数的补码为其反码末位加19. 若(R0)=30H,(30H)=5AH,指令“MOV A,@R0”执行后,累加器A的内容为()。
A. 00HB. 30HC. 5AHD. 8AH10. 若(R1)=30H,(A)=20H,执行指令MOV @R1,A后,(30H)=()。
A. 10HB. 20HC. 30HD. 50H二、判断题(共10 道试题,共40 分。
)1. 80C51单片机片内RAM的地址空间为64KB。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
80C51系列单片机波特率自动检测的通用程序 An Automatic B aud R ate Detection Pro gram for the80C51Single2Chip Computer
●万新恒龚建明
Wan Xinheng
G ong Jianming
1 引言
在串行异步通讯中,常常希望从机端的波特率能随主机端的不同设置进行自动调整,这在分布式多种波特率通讯系统中可省去波特率硬件设置开关切换的不便。
软件实现波特率自动检测的设计思想常见的有以下两种:一种是当主机启动通讯程序以后,逐一选择波特率向从机发某一固定调试字符(如ASCII1),不断地重复接收和检验过程直至无误。
二是利用串行异步设计标准中文件导引区和记录字符中停止位的逻辑“1”信号,采用软件定时的方法确定出解调参数,然后,以该参数为基准,与随后采样的数据位信号中的周期值相比较以判别出数据位信号中的逻辑“1”或“0”,并将其还原成二进制数以完成整个调解进程[1]。
本文介绍另一种简单可靠的软件实现波特率自动检测的方法,并给出了程序清单及详尽的注解。
该软件方法提高了波特率解调的简捷性和兼容性。
2 编程方法
通讯开始时,从串行口RXD输入一个引导字符(如ASCII a)作为测试字符,当检测到起始位(下降沿)时启动计数器T0,在随后串行数据的每一个上升沿,“捕获”计数器的值并保存,当计数器溢出时,最后的“捕获”值则表示串行接收字符从起始位到停止位的持续计数值。
然后,将此计数值与波特率索引表中每种标准波特率所对应的数据相比较,从而检测出正确的波特率。
对每一种波特率,通过下式计算出所对应的最大计数器预置值,存入表格BdTab中:
最大定时器预置值=
晶振频率(MHz)
波特率
×
5
12以82N21通讯(8位数据位,无奇偶校检, 1位停止位)为例,上式推导如下:
最大定时器预置值=
最小识别时间
机器周期
最小识别时间=
识别位数×字节时间
9
机器周期=12/晶振频率
字节时间=9/波特率
3 程序清单
通用程序清单及详尽的注解如下:;预定义RX BIT P3.0;串行数据接收端
CharH DATA30h;保存TH0值
CharL DATA31h;保存TL0值
BdRt DATA32h;保存波特率最终检测值Display EQU P1;显示调试结果
;复位及中断向量
万新恒,现在华中理工大学固体电子学系工作。
地址:武汉武昌喻家山 邮政编码:430074收稿日期:1997年3月6日(磁盘来稿)
ORG8000h
Begin:ACALL AutoBaud;检测波特率值
MOV Display,BdRt;送波特率索引值
S J MP Begin
;波特率检测子程序
;返回ACC=波特率索引指针
AutoBaud:MOV TMOD,#01h;置T0工作方式1 MOV TH0,#0;初值写入T0
MOV TL0,#0
MOV TCON,#0
MOV CharH,#0;初始化寄存单元
MOV CharL,#0
CHK0: JB RX,CHK0;等待字符起始位
SETB TR0;启动T0
CHK1: JB TF0,CHK3;T0溢出否?
J NB RX,CHK1;检测串行数据上升沿MOV CharH,TH0;“捕获”在上升沿的T0值
MOV CharL,TL0
CHK2: JB TF0,CHK3;T0溢出否?
JB RX,CHK2;检测串行数据下降沿
S J MP CHK1;重复采样
CHK3: CL R TR0;T0溢出处理
CL R TF0;清标志,停止计数
MOV BdRt,#19;建立索引表指针Loop: MOV A,BdRt
MOV DPTR,#BdTab
MOVC A,@A+DPTR;查表比较
DEC BdRt
C J NE A,CharH,Cmp1;检查结果范围
S J MP CmpLow;高字节相等,检查低字
节
Cmp1: J C Match;若表中值<计数值,匹配
DJ NZ BdRt,Loop;表比较完否?
S J MP Match
CmpLow:MOV A,BdRt
MOVC A,@A+DPTR;查表比较
C J NE A,CharL,Cmp2;检查数据范围
SETB C;若相等,则匹配
Cmp2: J C Match;若A<结果低字节,置C
DJ NZ BdRt,Loop;表比较完否?
Match:MOV A,BdRt;比较完
CL R C;取最终波特率索引值
RRC A
MOV BdRt,A;保存
RET
;索引表保存标准波特率所对应的计数值
;晶振频率为11.0592MHZ
;排列顺序:LSB,MSB
BdTab:DB3Ch,0;02越限,值太小
DB78h,0;12波特率38400
DB0F0,0h;22波特率19200
DB0E0,01h;32波特率9600
DB0C0,03h;42波特率4800
DB80,07h;52波特率2400
DB0,0Fh;62波特率1200
DB0,1Eh;72波特率600
DB0,3Ch;82波特率300
DB0,78h;92越限,值太大
END
3 结束语
最后,需要说明的是:
(1)为确保波特率检测正确,发送一测试字符后,应使数据接收端RXD保持一段高电平,确保T0溢出时所“捕获”到的计数值,是停止位处的T0值。
(2)在实际通讯过程中,如果检测到错误,则应该重新调用该波特率自适应程序,进行波特率再校正。
(3)该软件所采用的“捕获”计数器计数值的方法,可应用到其它波形检测程序中。
■
参考文献
陈 平.串行异步通讯数据的自适应解调方法.电子技术应用,1995,No.10
80C51系列单片机波特率自动检测的通用程序万新恒 龚建明。