51汇编 波特率判断

来源:百度知道 编辑:UC知道 时间:2024/06/03 10:39:29
51晶振12M
判断从P3.5口输入的信号的波特率
波特率表示每秒钟传送二进制数码的位数,本人曾设计过1us内传送的位数来判断波特率,最后调试没能正确判断。现在想请教高手用另一种方法判断,也就是判断传送一位二进制数码所使用的时间来判断。
能帮忙的请用汇编编一下。】

看不懂也可按下面方法帮忙编下:
判断P3.5口输入数据一位二进制的时间大小,以383us/191us/95us比较,允许浮动5%(不编也行),将比较得到的对应的值存入baudrate中。

求各位高手帮帮忙!
启动定时器一开始就是1US,拿波特率9600来说,传一位二进制数100US,所以应该能判断出传送一位二进制的时间,再根据这个时间来判断波特率,各位认为呢?

一位二进制数据的传输时间是很小,从理论上可以测试出来。

但是串口在传输数据的的时候不只是传输一位数据,而是可能常高或常低的连续好级位,如果按照你说的方法测出来的根本不是正确的波值。

比较大小的程序很多,方法都差不多,高低8位比较。

不可能完成,因为单片机不是FPGA,单片机是顺序处理事件的。也就是说,从你开始传一位二进制数到你打开定时器本身这个过程都需要时间,12M晶振也就是一条指令最短1us,到你打开定时器时早传完了。

干吗要算这个呢??
判断这个有啥意义?直接用就行了嘛

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

希望我的回答能对你有用

我知道你的想法是,设计一个频率计,
可惜的是51最快的处理速度,也就是说执行一条最简单的指令就要1US,你根本没办法检测在1US内,传送了几个数,或是说高低电平的变化。
换而言之,用51做频率计,可是可以,但检测的频率范围就窄了。
我还是说方法吧 这里空间有限