ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2022-02-02 14:34:47  阅读:173  来源: 互联网

标签:9600 STC -- void Fosc 单片机 波特率 MAIN


波特率位时间计算


  • 波特率9600,数据位8,无效验,1停止位。
/**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。
*/
  • 波特率为9600位时间处理函数

在Keil编译环境下测试

/*STC15系列库函数与例程测试版V2.0\库函数*/
void BitTime(void)
{
	u16 i;
	i = ((MAIN_Fosc / 100) * 104) / 130000L - 1;		//MAIN_Fosc主时钟晶振频率
	while(--i);
}
  • 如果波特率位9600的2倍,19200的波特率那么位处理时间函数,就是将原来的104除以2

  • 波特率19200,数据位8,无效验,1停止位。

void	BitTime(void)
{
	u16 i;
	i = ((MAIN_Fosc / 100) * 52) / 130000L - 1;		//MAIN_Fosc主时钟晶振频率
	while(--i);
}
  • 波特率4800,数据位8,无效验,1停止位。
void	BitTime(void)
{
	u16 i;
	i = ((MAIN_Fosc / 100) * 208) / 130000L - 1;		//MAIN_Fosc主时钟晶振频率
	while(--i);
}
  • 波特率115200,数据位8,无效验,1停止位。也就是9600的12倍

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

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

在这里插入图片描述

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

  • 波特率9600,软串口调试模式下测试
void BitTime(void)
{
	 uint16_t  i;
     i = (16 * 80) / 13 - 2; //i=96
	while(--i);
}

在这里插入图片描述

  • 波特率19200(也就是9600的2倍速率),软串口调试模式下测试
void BitTime(void)
{
	 uint16_t  i;
     i = (16 * 40) / 13 - 3; //i=46
	while(--i);
}
  • 波特率4800(也就是9600的1/2倍速率),软串口调试模式下测试
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

  • 在以VSCode PlatformIO编译环境下开发STC系列单片机时,如果使用软串口作为调试输出,注意位处理时间不能按照在Keil环境下的相关参数照搬,否则输出将会是乱码。
  • 在以VSCode PlatformIO编译环境下开发STC系列单片机时,软串口的波特率设置最好是以波特率:9600为基准来设置,或者以9600的合适倍率的波特率进行设置。例如2倍的192004800

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

在这里插入图片描述

在这里插入图片描述

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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有