当前位置: 首页 > news >正文

STC15单片机软串口的使用

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.16678 = 833.3336 u s 104.1667*8 =833.3336us104.16678=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
http://www.lryc.cn/news/2331.html

相关文章:

  • Ansible的脚本------playbook剧本
  • 实验5-计算中值及分治技术
  • dbeaver从excel导入数据笔记
  • PyTorch学习笔记:nn.MarginRankingLoss——排序损失
  • 【JavaScript】34_Date对象 ,日期的格式化
  • 计算机视觉 对比学习13篇经典论文、解读、代码
  • MySQL 选择数据库
  • 雅思经验(9)
  • java面试题(二十)中间件redis
  • JavaWEB必知必会-Servlet
  • oralce查找返回不同的值,寻找不同的表(原创)
  • Python-第四天 Python循环语句
  • spring中bean的生命周期(简单5步)
  • 10 个最难理解的 Python 概念
  • 【linux】线程概念
  • Leg转Goh引擎和架设单机+配置登陆器教程
  • idea整合svn
  • 字节青训前端笔记 | 数据可视化基础
  • ROS运行机C++程序,移动
  • C++中编译静态库与动态库
  • shell中sed命令用法
  • 【VictoriaMetrics】VictoriaMetrics启停脚本
  • 高性能网络SIG月度动态:SMC 与 IBM 就扩展协议达成一致,virtio 支持 XDP 新特性
  • 【正点原子FPGA连载】第七章程序固化实验摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Vitis开发指南
  • LeetCode-2335. 装满杯子需要的最短总时长【贪心,数学】
  • 基于 oss 框架的音频驱动
  • 【golang】如何定制化zap日志库以及如何使用
  • 如何将 Ubuntu 升级到 22.04 LTS Jammy Jellyfish
  • ubuntu20.04安装docker与docker-compose
  • 笔试题-2023-加特兰-数字IC设计【纯净题目版】