打印

请教关于80C51波特率问题

[复制链接]
2063|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
发霉的味道|  楼主 | 2007-2-1 09:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
maychang| | 2007-2-1 10:11 | 只看该作者

还差一个因数,16或8

溢出16次或8次发送一个bit位。

只要知道bit位时间,就可以计算波特率,这二者互为倒数。

使用特权

评论回复
板凳
发霉的味道|  楼主 | 2007-2-1 11:03 | 只看该作者

!!

那就是说  256 - 每BIT的时间/32(OR16) = T1的定时初始值 啦.
是这样吗?

使用特权

评论回复
地板
szzhengjin| | 2007-2-1 16:32 | 只看该作者

给你个宏,全齐了

//外晶振值定义
#define OSC_FREQ                22118400L
//串行通讯波特率定义
#define UART_BAUD_115200        256 - (OSC_FREQ/192L)/115200L   // 255
#define UART_BAUD_57600            256 - (OSC_FREQ/192L)/57600L    // 254
#define UART_BAUD_38400            256 - (OSC_FREQ/192L)/38400L    // 253
#define UART_BAUD_28800            256 - (OSC_FREQ/192L)/28800L    // 252
#define UART_BAUD_19200            256 - (OSC_FREQ/192L)/19200L    // 250
#define UART_BAUD_14400            256 - (OSC_FREQ/192L)/14400L    // 248
#define UART_BAUD_9600            256 - (OSC_FREQ/192L)/9600L     // 244
#define UART_BAUD_7200            256 - (OSC_FREQ/192L)/7200L        // 240
#define UART_BAUD_4800            256 - (OSC_FREQ/192L)/4800L        // 232
#define UART_BAUD_2400            256 - (OSC_FREQ/192L)/2400L        // 208
#define UART_BAUD_1800            256 - (OSC_FREQ/192L)/1800L        // 192
#define UART_BAUD_1200            256 - (OSC_FREQ/192L)/1200L        // 160
#define UART_BAUD_600            256 - (OSC_FREQ/192L)/600L        // 64

使用特权

评论回复
5
duanhnhy| | 2007-2-1 16:35 | 只看该作者

RE

应该是T1的溢出率才是每BIT位的发送时间,
T1的溢出率=1/[(256-初始计数值)*12/所使用晶振的频率]
如果工作在串行口方式1和方式3下溢出32次才发送一个bit位.所以再除以32就得到了串行口方式1和方式3下的波特率.其它方式下计算方法可不一样哦.

以上就是我的见解,欢迎大家指正.

使用特权

评论回复
6
xwj| | 2007-2-1 16:37 | 只看该作者

不同模式下公式有差异,

LS的是波特率加倍的,仅作参考

LZ自己去仔细看书,就那么1、2页内容

使用特权

评论回复
7
发霉的味道|  楼主 | 2007-2-1 18:26 | 只看该作者

!!

我是想知道每个BIT位和波特率的时间关系,然后用截取串口单个脉冲的方式来自动设定通迅波特率.

使用特权

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

本版积分规则

7

主题

58

帖子

0

粉丝