打印

怎么最简单得到115200Hz的方波

[复制链接]
5588|43
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lfc315|  楼主 | 2018-3-14 18:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
maychang| | 2018-3-14 19:24 | 只看该作者
11.5200MHz石英晶体很常见。产生11.5200MHz信号后,再100分频即可。

使用特权

评论回复
板凳
tyw| | 2018-3-14 19:38 | 只看该作者
本帖最后由 tyw 于 2018-3-14 19:39 编辑

用51单片机+11.0592的晶振,如何产生115200的波特率?
本来感觉这个小意思,直接初始化定时器1,程序如下:
void init_com( void )
{
SCON = 0x50 ; //串口工作方式1,8位UART,波特率可变
TMOD |= 0x20 ; //定时器1,工作方式2,自动再装入8位定时器
PCON |= 0x80 ; //SMOD=1; 波特率加倍
TH1 = 0xfa ; //波特率:9600 晶振=11.0592MHz
IE |= 0x90 ; //使能串口中断
TR1 = 1 ; // 定时器1开始
}
结果发现这样只能得到9600的波特率。。。
当SMOD=1时,K=2,波特率加倍,公式为:
波特率=K×11059200/32×12×(256-TH1)
所以,TH1=0xfa=256-(2×11059200/384×波特率) 其中波特率为9600
这时,及时令TH1=0xff,所得波特率最大只能为57600,也就是说,这样无法得到115200的波特率。。。

这样就只有采用其他方法了:
1、换晶振,用22.1184M晶振,在TH1=0xff时,刚好可以产生115200波特率。
2、采用6个时钟周期的单片机(换单片机啊。。。)
3、增强型51单片机有定时器2!(幸好偶用的是增强型。。。)
就用第三种方法啦!这时的公式如下:
波特率=11059200/32×[65535-(RCAP2H,RCAP2L)]
其中的RCAP2H,RCAP2L为自动重装值,由上式得:
RCAP2H,RCAP2L=65536-11059200/32×波特率
这样得波特率为115200时,RCAP2H,RCAP2L=0xff,0xfd,初始化程序如下:
void init_com( void )
{
     SCON=0x50; //串口工作方式1,8位UART,波特率可变  
     TH2=0xFF;           
     TL2=0xFD;    //波特率:115200 晶振=11.0592MHz
     RCAP2H=0xFF;   
     RCAP2L=0xFD; //16位自动再装入值
/*****************/
     TCLK=1;   
     RCLK=1;   
     C_T2=0;   
     EXEN2=0; //波特率发生器工作方式
/*****************/
    TR2=1 ; //定时器2开始
}
OK!这样就实现用51单片机+11.0592的晶振,产生115200的波特率了,当然老鸟看来很基本,但好长时间不用了,再复习一下~~




51单片机 设置串口波特率115200初值怎么弄 呢 单片机是11.0592的晶振
[url=][/url]




{
PCON &= 0x7f;  //波特率不倍速
SCON = 0x50;  //8位数据,可变波特率
AUXR |= 0x40;  //定时器1时钟为Fosc,即1T
AUXR &= 0xfe;  //串口1选择定时器1为波特率发生器
TMOD &= 0x0f;  //清除定时器1模式位
TMOD |= 0x20;  //设定定时器1为8位自动重装方式
TL1 = 0xFD;  //设定定时初值
TH1 = 0xFD;  //设定定时器重装值
ET1 = 0;  //禁止定时器1中断
TR1 = 1;  //启动定时器1
}

void UartInit(void)  //115200bps@11.0592MHz
{
PCON |= 0x80;  //使能波特率倍速位SMOD
SCON = 0x50;  //8位数据,可变波特率
AUXR &= 0xbf;  //定时器1时钟为Fosc/12,即12T
AUXR &= 0xfe;  //串口1选择定时器1为波特率发生器
TMOD &= 0x0f;  //清除定时器1模式位
TMOD |= 0x20;  //设定定时器1为8位自动重装方式
TL1 = 0xFF;  //设定定时初值
TH1 = 0xFF;  //设定定时器重装值
ET1 = 0;  //禁止定时器1中断
TR1 = 1;  //启动定时器1
}



使用特权

评论回复
评分
参与人数 1威望 +10 收起 理由
xyz549040622 + 10 很给力!
地板
coody| | 2018-3-14 22:30 | 只看该作者
既然是51,换STC的51吧。

STC15系列或STC8系列,定时1T模式:
    定时器重装值=65536-fosc/4/波特率=65536-11059200/4/115200=65536-24=65512。

用STC10、11、12系列的话,定时器1T模式,波特率加倍:
定时器重装值=256-fosc/16/波特率=256-11059200/16/115200=256-6=250。

对于115200的波特率,还是强烈建议跑22.1184MHZ。

使用特权

评论回复
5
cjseng| | 2018-3-15 00:44 | 只看该作者
tyw 发表于 2018-3-14 19:38
用51单片机+11.0592的晶振,如何产生115200的波特率?
本来感觉这个小意思,直接初始化定时器1,程序如下: ...

产生115200波特率,然后呢,从哪里输出方波?

使用特权

评论回复
6
tyw| | 2018-3-15 07:01 | 只看该作者
cjseng 发表于 2018-3-15 00:44
产生115200波特率,然后呢,从哪里输出方波?

在定时中断里操作I/O口来模拟通信口

使用特权

评论回复
7
mcu5i51| | 2018-3-15 08:47 | 只看该作者
115200串口发送AAH,在一个停止位时就是脉冲了

使用特权

评论回复
8
fzyuan| | 2018-3-15 08:49 | 只看该作者
上面用115200波特率的统统都错了!

115200Hz的方波需要230400bps的波特率连续发送0x55才可以。

使用特权

评论回复
9
xyz549040622| | 2018-3-15 08:58 | 只看该作者
tyw 发表于 2018-3-14 19:38
用51单片机+11.0592的晶振,如何产生115200的波特率?
本来感觉这个小意思,直接初始化定时器1,程序如下: ...

给老t叔点赞。

使用特权

评论回复
10
lfc315|  楼主 | 2018-3-15 09:36 | 只看该作者
maychang 发表于 2018-3-14 19:24
11.5200MHz石英晶体很常见。产生11.5200MHz信号后,再100分频即可。

谢谢前辈,有没有用1个常见芯片+晶体就可以产生这个频率波形的电路?

使用特权

评论回复
11
jimsboy| | 2018-3-15 09:40 | 只看该作者
随便找个单片机,带串口buf的。那种移位寄存器里有数据正在发送的时候,就可以向发送寄存器写入下一个数据的那种,比如ST家的
把波特率调在115200*2,然后不停地发送0x55,就是115200的方波了。

使用特权

评论回复
12
lfc315|  楼主 | 2018-3-15 09:43 | 只看该作者
tyw 发表于 2018-3-14 19:38
用51单片机+11.0592的晶振,如何产生115200的波特率?
本来感觉这个小意思,直接初始化定时器1,程序如下: ...

谢谢前辈,有单纯用硬件电路的办法吗?
我也想到了用1个几毛钱这样的便宜单片机+晶振,只是感觉要烧录个程序,相对麻烦一点。

使用特权

评论回复
13
gx_huang| | 2018-3-15 09:47 | 只看该作者
115200的方波,由51 MCU输出,很容易呀,程序初始化定时器后,定时器管脚直接输出方波,没有任何软件开销的,也不需要中断函数。
51的定时器,有溢出自动翻转输出功能,输出方波不要太方便了。

使用特权

评论回复
14
lfc315|  楼主 | 2018-3-15 09:49 | 只看该作者
先谢谢大家的帮助。
还想找个占PCB面积更小,或者成本更低的实现方法

使用特权

评论回复
15
lfc315|  楼主 | 2018-3-15 09:50 | 只看该作者
gx_huang 发表于 2018-3-15 09:47
115200的方波,由51 MCU输出,很容易呀,程序初始化定时器后,定时器管脚直接输出方波,没有任何软件开销的 ...

主CPU不是51的,是ST的,时钟不是115200的倍数

使用特权

评论回复
16
gx_huang| | 2018-3-15 09:57 | 只看该作者
如果要纯硬件,也很方便的,找一个1.8432M的晶体,16分频即可。
CD4000系列逻辑门,你找一下,有带晶体振荡电路和二进制分频的芯片。
比如CD4060。
几十年前,自己搭锁相环路,就是用这些芯片的,作为时钟参考源。

使用特权

评论回复
17
maychang| | 2018-3-15 10:01 | 只看该作者
lfc315 发表于 2018-3-15 09:36
谢谢前辈,有没有用1个常见芯片+晶体就可以产生这个频率波形的电路?

一片芯片内包括振荡和分频,有74HC4060。该芯片可以4级、5级、6级、7级、8级、9级、10级……12级、13级、14级二分频。但若采用石英晶体振荡,则石英晶体频率只能是1.8432MHz、3.6864MHz、7.3728MHz、14.7456MHz……这样畸零频率的石英晶体,没有成品,只能定制,而且很贵。
若对频率稳定性要求不高,倒是可以用74HC4060加两支电阻一支电容,微调电阻数值,构成RC振荡器,再经74HC若干次二分频后得到115200Hz方波。但RC振荡,频率不够稳定,而且需要手动调整频率。

使用特权

评论回复
18
maychang| | 2018-3-15 10:06 | 只看该作者
lfc315 发表于 2018-3-15 09:43
谢谢前辈,有单纯用硬件电路的办法吗?
我也想到了用1个几毛钱这样的便宜单片机+晶振,只是感觉要烧录个 ...

其实,用老tyw的办法,成本可能是最低的。

使用特权

评论回复
19
lfc315|  楼主 | 2018-3-15 10:06 | 只看该作者
gx_huang 发表于 2018-3-15 09:57
如果要纯硬件,也很方便的,找一个1.8432M的晶体,16分频即可。
CD4000系列逻辑门,你找一下,有带晶体振荡 ...

谢谢,好像CD4060比较适合,先研究一下。

使用特权

评论回复
20
mcu5i51| | 2018-3-15 10:07 | 只看该作者
fzyuan 发表于 2018-3-15 08:49
上面用115200波特率的统统都错了!

115200Hz的方波需要230400bps的波特率连续发送0x55才可以。 ...

数据是AA,”开始位“为0,之后的数据应该为1,0xAA=0b10101010,停止位为1

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

257

主题

5246

帖子

37

粉丝