其他分享
首页 > 其他分享> > 【STC单片机】在不同编译环境下波特率位时间计算差异

【STC单片机】在不同编译环境下波特率位时间计算差异

作者:互联网

波特率位时间计算


/**1 个起始位,8 个数据位,0 个校验位,1 个停止位,
 * :8,N,1;8 个数据位,一个停止位,无校验位。
 * 波特率:9600,位宽度:8,停止位:1
 * 传输一个字节(8 位)的数据,在总线上产生 10 个电平变换,也就是串行总线上,需要 10 位,才能发送 1 个字节数据
 * 1 秒可以发送 9600 位,那么用 9600/10 ,就是1秒可以发送 960 个字节数据,
 * 则每发送一个字节需要的时间就是:1/960 ~= 0.00104166…s ~= 1.0416667 ms。
*/

在Keil编译环境下测试

/*STC15系列库函数与例程测试版V2.0\库函数*/
void BitTime(void)
{
	u16 i;
	i = ((MAIN_Fosc / 100) * 104) / 130000L - 1;		//MAIN_Fosc主时钟晶振频率
	while(--i);
}
void	BitTime(void)
{
	u16 i;
	i = ((MAIN_Fosc / 100) * 52) / 130000L - 1;		//MAIN_Fosc主时钟晶振频率
	while(--i);
}
void	BitTime(void)
{
	u16 i;
	i = ((MAIN_Fosc / 100) * 208) / 130000L - 1;		//MAIN_Fosc主时钟晶振频率
	while(--i);
}

如果下面的8参数改为9会出现乱码。

void	BitTime(void)
{
	u16 i;
	i = ((MAIN_Fosc / 100) * 8) / 130000L - 1;		//MAIN_Fosc主时钟晶振频率
	while(--i);
}

在这里插入图片描述

VSCode PlatformIO编译环境下的位处理函数差异

void BitTime(void)
{
	 uint16_t  i;
     i = (16 * 80) / 13 - 2; //i=96
	while(--i);
}

在这里插入图片描述

void BitTime(void)
{
	 uint16_t  i;
     i = (16 * 40) / 13 - 3; //i=46
	while(--i);
}
void BitTime(void)
{
	 uint16_t  i;
     i = (16 * 160) / 13 -3; //后面捡2或者都3都可以      
	while(--i);
}

VSCode PlatformIO编译环境下,其他波特率尝试了测试了好多参数都是乱码。

综上所述,在VSCode PlatformIO编译环境下,代码执行效率要低一些,为什么这么说,在相同波特率9600情况下,位处理时间Keil环境下是104,在VSCode PlatformIO编译环境下是80

STC15库函数可以在官方的《STC15系列库函数与例程测试版V2.0》里面,\库函数

在这里插入图片描述

在这里插入图片描述

标签:9600,STC,--,void,Fosc,单片机,波特率,MAIN
来源: https://blog.csdn.net/weixin_42880082/article/details/122768436