请教下这个模拟串口程序里面怎么改波特率
各位大师们,请教下这个模拟串口程序里面怎么改波特率,谢谢!程序是“STC15系列只用一个定时器的红外接收程序”例程里面的,默认是9600,想改为115200应该要怎么改呢?这部分应该就是调整延时来调整波特率的吧,就是不太清这个数值是怎么计算的。
/********************** 模拟串口相关函数************************/
void BitTime(void) //位时间函数
{
uint i;
i = ((MAIN_Fosc / 100) * 104) / 140000 - 1; //根据主时钟来计算位时间
while(--i);
}
只要能发送就行了,不需要接收。 按比例调整时间
高速通信稳定性有影响 得看接收和发生的设备
是否支持更高的速度
有可能出现乱码 就用USB转串口小板来接收,就是不知道这个比例怎么算啊
调整140000这个值吗?主要是不知道怎么计算的,难道要一个个值去试? 115200对应8.68us一个位,值需要调整BitTime(void)的时间是8.68us就可以了,这个跟主频有关,你可以简化一下:
注意要关闭全局中断,模拟串口发送不可以被打断。
void BitTime(void) //位时间函数
{
u8 i;
i = 192/3 - 2; //主时钟=22.1184MHz, 8.68*22.1184=192
// i = 208/3 - 2; //主时钟=24MHz, 8.68*24=208
while(--i);
//NOP(2); //根据实际情况添加NOP来精确调整位时间
} 梁工 发表于 2026-4-16 22:07
115200对应8.68us一个位,值需要调整BitTime(void)的时间是8.68us就可以了,这个跟主频有关,你可以简化一 ...
其它昨晚我按比例修改数值后已经可以用了,但是晶振要上到33.1776M才比较稳定没有乱码,我有空再试下这个,谢谢! i = ((MAIN_Fosc / 100) * 104) / 140000 - 1;
等价于下面的语句
i = MAIN_Fosc / 9600 / 14 - 1;
如果需要将波特率改为115200,这条语句可以改为
i = MAIN_Fosc / 115200 / 14 - 1;
需要注意:软件延时产生的波特率,波特率越高,误差越大,可能需要微调
zhp 发表于 2026-4-17 10:00
i = ((MAIN_Fosc / 100) * 104) / 140000 - 1;
等价于下面的语句
i = MAIN_Fosc / 9600 / 14 - 1;
谢谢版主的回复,就是还有一点不明白,这个14-1这个数是怎么来的,代表什么呢?
页:
[1]
2