STC15软串口的使用
  
 
📖在没有使用定时器资源的情况下,根据波特率位传输时间,利用STC-ISP工具自动计算出位延时函数。

- ✨在官方所提供的库函数中位传输时间函数,仅适用于使用波特率为:9600的串口数据传输:
void BitTime(void)
{
	u16 i;
	i = ((MAIN_Fosc / 100) * 104) / 130000L - 1;		//根据主时钟来计算位时间
	while(--i);
}
- 🔰根据STC-ISP工具,自己计算位时间,可以灵活的调整波特率。
🌼波特率数据传输位时间计算
- 🚩波特率为9600表示的是串口每秒钟可以传输9600bit,每传输1bit所需时间:
1 s / 9600bit= 1000000 (us) / 9600 ( bit) = 1000 / 9.6 = 104.1667us 
那么8bit就是 104.1667 ∗ 8 = 833.3336 u s 104.1667*8 =833.3336us104.1667∗8=833.3336us
串口通信时数据格式是一般为:
起始位+8位数据+奇偶校验位+停止位,一般都没有奇偶校验位,所以是10位,也就是一个字节的时间为:104.1667 ∗ 10 = 1041.667us
- 🌿波特率为19200每传输1bit所需时间:
1 s / 19200bit= 1000000 (us) / 19200 (bit) = 1000 / 19.2 = 52.0833us
- 🌿波特率115200每传输1bit所需时间:
1 s / 115200bit = 1000000 (us) / 115200 (bit) = 1000 / 115.2 = 8.6806us
⚡波特率位时间计算的越准确,数据传输乱码率越低。
📝软串口示例代码
- 🛠波特率位时间函数
//========================================================================
// 函数: void	BitTime(void)
// 描述: 位时间函数。
// 参数: none.
// 返回: none.
// 版本: VER1.0
// 日期: 2013-4-1
// 备注: 
//========================================================================
void	BitTime(void)
{
	/***使用11.0592MHz,波特率:9600 位延时时间:104us延时时间***/
//	u16 i;
//	i = ((MAIN_Fosc / 100) * 104) / 130000L - 1;		//根据主时钟来计算位时间
//	while(--i);
/***使用11.0592MHz,波特率:19200 位延时时间:52us延时时间***/	
//	unsigned char i;
//	_nop_();
//	i = 141;
//	while (--i);
	/***使用22.1184MHz,波特率:19200 位延时时间:52us延时时间***/
		unsigned char i, j;
	_nop_();
	_nop_();
	i = 2;
	j = 26;
	do
	{
		while (--j);
	} while (--i);
}
- 📑主程序代码
#include "config.h"
#include "soft_uart.h"
#include "delay.h"
void main()
{
	while(1)
	{
		PrintString("perseverance51 \n\r");
		delay_ms(250);delay_ms(250);delay_ms(250);delay_ms(250);
	}
	
}
-  🍁工程架构 
  
-  📜串口打印信息: 
  
📚程序源码
复制这段内容后打开百度网盘手机App,操作更方便哦
链接: https://pan.baidu.com/s/1kYShK7PnzE5UzkgnVIxsxg
提取码: itwv












![[SSD固态硬盘技术 15] FTL映射表的神秘面纱](https://img-blog.csdnimg.cn/img_convert/c1213fdcabb34ef2af8cb706aa6ae2b7.png)





