微机原理题目。 如果选择波特率因子为16,在接受时,采用波特率的16倍频率作为接收时钟目的是什么呀?

微机原理题目。 如果选择波特率因子为16,在接受时,采用波特率的16倍频率作为接收时钟目的是什么呀?,第1张

采用了常规的16倍频采样方法:采用数据速率的16倍进行采样,采样时钟连续采样到8个低电平信号,可确定该低电平为真正的起始位,从而防止干扰信号产生的假起始位现象的发生。此后,接收器每隔16个采样时钟采样一次,并把采样到的数据作为输入数据,以移位方式存入到接收移位寄存器。16倍频对接收线的采样关系如图4所示。
图4 UART对数据的采样
起始位检测8个连续脉冲的另一个更重要的原因是,采用16倍频采样的时钟,第8个采样脉冲所对应的数据波形正好是该位数据位波形的正中点(以时钟上升沿采样),在该处读写数据应该是最安全点。

在电子通信领域,波特率即调制速率,指的是信号被调制以后在单位时间内的波特数,即单位时间内载波参数变化的次数。它是对信号传输速率的一种度量,通常以“波特每秒”(Bps)为单位。
波特率有时候会同比特率混淆,实际上后者是对信息传输速率(传信率)的度量。波特率可以被理解为单位时间内传输码元符号的个数(传符号率),通过不同的调制方法可以在一个码元上负载多个比特信息。
严谨定义:
比特率
在数字信道中,比特率是数字信号的传输速率,它用单位时间内传输的二进制代码的有效位(bit)数来表示,其单位为每秒比特数bit/s(bps)、每秒千比特数(Kbps)或每秒兆比特数(Mbps)来表示(此处K和M分别为1000和1000000,而不是涉及计算机存储器容量时的1024和1048576)。
波特率
波特率指数据信号对载波的调制速率,它用单位时间内载波调制状态改变次数来表示,其单位为波特(Baud)。 波特率与比特率的关系为:比特率=波特率X单个调制状态对应的二进制位数。
如何区分两者?
显然,两相调制(单个调制状态对应1个二进制位)的比特率等于波特率;四相调制(单个调制状态对应2个二进制位)的比特率为波特率的两倍;八相调制(单个调制状态对应3个二进制位)的比特率为波特率的三倍;依次类推。

12000 /60=200字节有效数据
200(数据位8+控制校验位1~35) =1800~2300 bps
所以波特率只要大于2300 才可以满足数据量哦
由于电脑串口波特率为固定的取值
115200,57600,56000,38400,19200,14400,9600,4800,2400,1200,600,300,110
所以 可以选择 115200,57600,56000,38400,19200,14400,9600,4800,2400这些波特率
你可以查表看一下使用12Mhz 时候的误码率 选择一个较低的就比较合适

串行口的四种工作方式对应三种波特率。由于输入的移位时钟的来源不同,所以,各种方式的波特率计算公式也不相同。
方式0的波特率 = fosc/12
方式2的波特率 =((2^SMOD)/64)• fosc
方式1的波特率 =((2^SMOD)/32)•(T1溢出率)
方式3的波特率 =((2^SMOD)/32)•(T1溢出率)
注意:SMOD为PCON寄存器的最高位(即PCOM<7>)。
T1 溢出率 = fosc /{12×[256 -(TH1)]} --将该公式代人方式1或3
最后推出公式:TH1=256-(fosc2^SMOD)/(baudrate1232);
呵呵
如果你用方式2(波特率 =((2^SMOD)/64)• fosc )的话
12M的晶振就不能得到9600波特率了(除非你改变你的晶振,但是那样的晶振好像没有卖) 所以你只能选择方式1或3
而且12M的晶振在串口传输时会有误差,就如你上面算的那样结果会有小数点
TH1又只能是整数的 所以传输时会有误差
参考:
#include<reg51h>
#define baudrate 9600UL
#define fosc 11059200UL//其中,UL是不能省略的,代表长整型。
unsigned char a,flag;
void serial_init(void)
{ unsigned char S_MOD=1;
TMOD=0x20;//T1工作在方式2
SCON=0x50;//SM0=0 SM1=1->串口通信在模式1,
//SM2=0->多级通信中使用的位,REN=1;
PCON=0;
if((PCON&0x80)==0x80) S_MOD=2;
TH1=256-(foscS_MOD)/(baudrate1232);//其中SMOD=0,
TL1=256-(foscS_MOD)/(baudrate1232);
TR1=1;ES=1;EA=1;
}

注意,这里说的高速、低速不是通常说的速度快就是高速,速度慢就是低速。这里所谓的高速、低速,指的是同一个波特率因子下的波特率的快慢。得看一下式子:
高速:波特率=fosc/16(x+1) (fosc代表外部晶振)
低速:波特率=fosc/64(x+1)
从上面的公式可以看到,对同一个X,显然用“fosc/16(x+1) ”计算得到的波特率比用“fosc/64(x+1) ”得到的波特率更快。因此上面的公式属于高速,下面的公式属于低速。
但由于波特率要用标准的,如9600,19200,因此由上面计算得到的与标准的有误差,要通过比较来确定是用高速还是低速(先误差小的)。如果高速和低速的误差一样,就随便选了。
因此不能说9600是高速还是低速!要看你用什么公式算的!

MCS-51单片机PCON是电源控制寄存器,其第7位为SMOD为波特率增倍,默认SMOD=0,你题目没有写清楚串行口的工作方式,我给你介绍一下,有以下几种:
方式0:波特率固定不变,其值为f/12,这里就是12MHZ/12,即100000
方式2:波特率有两种固定值
因为SMOD给的为0,就不说SMOD为1的情况了,SMOD=0时,波特率=(2^SMOD/64)f,这里就是1210^6/64
方式1和方式3时,波特率可变的,关键是定时器T1的溢出率
波特率=(2^SMOD/32)定时器T1的溢出率
我举个例子:
设串行口工作方式1下,SMOD=0,f=11059MHZ,T1工作在方式2下,TL1TH1,的初值为FDH(253D),求波特率
解:
T1因为工作方式2为自动重装初值的8位定时器,求
其溢出一出要的时间Tc=(256-253)12/1105910^6
根据Tc求溢出率=1/Tc=3071944
根据上面的公式求波特率=2^03071944/32=9600(位/秒)
希望我的回答能对你有用

方式0的波特率是系统时钟的十二分之一,为固定波特率,与定时器无关
定时器计算: 溢出中断的定时器 指令周期是 系统时钟的十二分之一 ,16方式
fosc=110592M
fcyc=11059200/12 , 定时时间 tmer ms
TH=(65535-timer1000/fcyc)/256
TL=(65535-timer1000/fcyc)%256


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/10316554.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-07
下一篇2023-05-07

发表评论

登录后才能评论

评论列表(0条)

    保存