晶振频率22.1184M,想得到115200的波特率,端口方面是这样设的:
P0MDIN = 0x3F;
P0MDOUT = 0x18;
P0SKIP = 0xC8;
XBR0 = 0x01;
XBR1 = 0x40
晶振的设置如下:
OSCXCN = 0x67; // External 22.1184M Oscillator
for (i = 0; i < 3000; i++);
while ((OSCXCN & 0x80) == 0);
CLKMUL = 0x02;
CLKSEL = 0x01;
OSCICN = 0x03;
时钟部分这样设置的
TMOD = 0x21;
CKCON = 0x10;
TH1 = 0xF8;
波特率我是这样算的,参考C8051F340的data sheet, UART0波特率 115200: = [(22118400/12)/(256 - 0xF8)]/2
但是用51波特率计算器来计算的时候,看到它要用倍频,初始值要设成0xFF,请问究竟哪种方法是对的?
------解决方案--------------------
波特率太高了,理论上是没问题的,不知道C8051能行吗?
------解决方案--------------------
波特率高会造成传输丢失数据
------解决方案--------------------
晶振都是有误差的,低波特率下偏点没关系,高了的话影响很大
115200下一位8.6805555555555555us
22.1184MHZ下一个周期0.54253472222222222222222222222222us
加倍的话计数个数为8.6805555555555555555*2/0.54253472222222222222222222222222
=32.
不加倍是16,楼主加倍算得8
我怎么加倍算出了32
反正FF是不对的
还有参考楼上的,51的话波特率不要太高,因为晶振的生产是有误差的,波特率越高影响越大
------解决方案--------------------
C8051 有可视化配置软件 生成代码加入到你工程中就可以使用