精简版STC单片机串口程序(只有初始化和sendbyte)

news2024/11/15 9:04:39

摘要:本文分享两个函数构成的STC单片机串口发送程序,代码占用空间极小。不想调用stdio.h和printf但是还想用串口发送简单的调试信息?那就试试它吧!

直接上代码 ,核心函数只有2个,如下所示

void UartInit(void)		//115200bps@11.0592MHz
{
	SCON = 0x50;		//8位数据,可变波特率
	AUXR |= 0x01;		//串口1选择定时器2为波特率发生器
	AUXR |= 0x04;		//定时器时钟1T模式
	T2L = 0xE8;			//设置定时初始值
	T2H = 0xFF;			//设置定时初始值
	AUXR |= 0x10;		//定时器2开始计时

	TI=1;    
}

void SendData(BYTE dat)
{
    while (!TI);                    //等待前一个数据发送完成
    TI = 0;                         //清除发送标志
    SBUF = dat;                     //发送当前数据
}

完整代码如下:

/*************************************************
版权声明:

文件名:main.c

作者:花生

版本号:

完成日期:2023年10月25日13:54:54

文件描述:通过STC单片机串口定时20毫秒发送0x55的16进制数据,串口波特率是115200.

主要函数列表:void UartInit(void),void SendData(BYTE dat),void SendData(BYTE dat)

开发环境:win7 64位操作系统,编译软件,STC-ISP6.92烧录,SSCOM串口助理观察发送的信息

所需硬件:STC15W408AS,其他硬件应该也没有问题,请注意延时和串口初始化的参数需要根据芯片型号重新计算。

使用说明:
1.本文件编译成功后,会生成一个test-uart.hex文件;
2.通过USB串口连接单片机,注意TXD RXD收发要交叉连接;
3.使用STC-ISP烧录,烧录的时候,需要确认芯片时钟工作在11.0592MHz,STC单片机是有内置的时钟的,可以不用晶振就能工作起来;
4.烧录完成后,用串口助理打开对应的端口,用十六进制模式就可以看到定时发送的55 55 55 55 了

修改历史:

*************************************************/

#include "main.h"


typedef unsigned char BYTE;
typedef unsigned int WORD;


//==================================================================
//函 数 名:void UartInit(void)		//115200bps@11.0592MHz
//功能描述:芯片时钟是11.0592MHz,串口波特率是115200bps。函数这些参数是STC-ISP软件“串口波特率计算”模块计算得来的
//输入参数:无
//返 回 值:无
//作    者:STC-ISP
//日    期:
//修改记录:
//==================================================================
void UartInit(void)		//115200bps@11.0592MHz
{
	SCON = 0x50;		//8位数据,可变波特率
	AUXR |= 0x01;		//串口1选择定时器2为波特率发生器
	AUXR |= 0x04;		//定时器时钟1T模式
	T2L = 0xE8;			//设置定时初始值
	T2H = 0xFF;			//设置定时初始值
	AUXR |= 0x10;		//定时器2开始计时

	TI=1;    //花生,请注意,这个TI一定要打开,否则发送不出去
}


//==================================================================
//函 数 名:void SendData(BYTE dat)
//功能描述:通过串口发送一个字节的数据
//输入参数:unsigned char类型的一个字节的数据
//返 回 值:无
//作    者:STC-ISP
//日    期:
//修改记录:
//==================================================================
void SendData(BYTE dat)
{
    while (!TI);                    //等待前一个数据发送完成
    TI = 0;                         //清除发送标志
    SBUF = dat;                     //发送当前数据
}


//==================================================================
//函 数 名:void Delay20ms(void)	//@11.0592MHz
//功能描述:通过空语句延时20毫秒
//输入参数:无
//返 回 值:无
//作    者:STC-ISP
//日    期:
//修改记录:
//==================================================================
void Delay20ms(void)	//@11.0592MHz
{
	unsigned char data i, j;

	i = 216;
	j = 37;
	do
	{
		while (--j);
	} while (--i);
}

//==================================================================
//函 数 名:void main()
//功能描述:主函数,初始化串口之后,延时20毫秒定时通过串口发送0x55数据
//输入参数:无
//返 回 值:无
//作    者:
//日    期:
//修改记录:
//================================================================== 
void main()
{
	
	BYTE x = 0x55;
	
	UartInit(); 

	while(1)
	{		
       SendData(x);  
       Delay20ms();	

	}//while
}


去掉注释后的代码如下,您可以直接复制粘贴了

#include "main.h"


typedef unsigned char BYTE;
typedef unsigned int WORD;


void UartInit(void)		//115200bps@11.0592MHz
{
	SCON = 0x50;		//8位数据,可变波特率
	AUXR |= 0x01;		//串口1选择定时器2为波特率发生器
	AUXR |= 0x04;		//定时器时钟1T模式
	T2L = 0xE8;			//设置定时初始值
	T2H = 0xFF;			//设置定时初始值
	AUXR |= 0x10;		//定时器2开始计时

	TI=1;    //花生,请注意,这个TI一定要打开,否则发送不出去
}

void SendData(BYTE dat)
{
    while (!TI);                    //等待前一个数据发送完成
    TI = 0;                         //清除发送标志
    SBUF = dat;                     //发送当前数据
}

void Delay20ms(void)	//@11.0592MHz
{
	unsigned char data i, j;

	i = 216;
	j = 37;
	do
	{
		while (--j);
	} while (--i);
}

void main()
{
	
	BYTE x = 0x55;
	
	UartInit(); 

	while(1)
	{		
       SendData(x);  
       Delay20ms();	

	}//while
}


 本段代码编译完成后的大小是:

Program Size: data=11.0 xdata=0 code=72

运行的截图如下所示,选择16进制显示,会一直显示55 55 55 55。其实实现这一步之后,我们需要

 

如果您需要工程文件,代码已经上传至gitee,请用下面连接下载

最纯净的STC单片机原生串口发送字节: 初始化串口后sendbyte就能完成一个字节的数据发送,代码只有三个函数,都在main.c中,要想在调试的时候添加串口信息发送,可以直接将这个代码复制到自己的工程中。芯片是STC15W408AS

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1133863.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

newstar week3 pwn

newstar week3 pwn 巩固知识,如有错误记得纠正,感谢师傅们的评阅 puts or system? Arch: amd64-64-little RELRO: Partial RELRO Stack: Canary found NX: NX enabled PIE: No PIE (0x400000)int __cdecl main(int argc, const…

springboot-scanBasePackages包扫描

目录 原因: 方式一: 方式二: 原因: 由于对rocketMq进行了一次封装,mq模块里面引用了RocketMQTemplate的bean,如果只引入jar包的依赖,启动的时候不会报错,但是在调用到 RocketMQT…

【OpenCV实现图像阈值处理】

文章目录 概要简单阈值调整自适应阈值调整大津(Otsus)阈值法Otsus 二值化是如何工作的 概要 OpenCV库中的图像处理技术,主要分为几何变换、图像阈值调整和平滑处理三个部分。 在几何变换方面,OpenCV提供了cv.warpAffine和cv.warpPerspective函数&#…

4、让电机转起来【51单片机控制步进电机-TB6600系列】

摘要:本节介绍用简单的方式,让步进电机转起来。其目的之一是对电机转动有直观的感受,二是熟悉整个开发流程。 本系列教程必要的51单片机基础包括IO口操作、中断、定时器三个部分,相关基础教程网上很多,可以自行学习 一…

VMware Ubuntu 关闭自动更新

##1. VMware 17Pro,ubuntu16.04 关闭自动更新 1.1 编辑–》 首选项–》更新–》启动时检查产品更新 2. 这里关了还不够,第二天打开的时候还是提醒系统更新,需要关闭另外的地方 3. 关闭更新检查,默认的是隔天检查一次,…

怎么修复vcomp140.dll丢失问题?5个详细的修复方法分享

在计算机使用过程中,我们经常会遇到一些错误提示,其中之一就是“vcomp140.dll丢失”。那么,vcomp140.dll是什么?它丢失会造成哪些问题呢?小编将从以下几个方面进行详细阐述。 一、vcomp140.dll是什么? vco…

如何使用透明贴图实现火焰效果

1、透明贴图的原理 透明贴图是一种纹理贴图,用于模拟物体部分或全部的透明效果。其原理基于透明度和混合技术。 在计算机图形中,如何显示透明的物体是一个具有挑战性的问题。这是因为透明物体不会像不透明物体那样完全遮挡后面的物体,而是允…

【REDIS】redis-命令大全

【REDIS】redis-命令大全 redis-命令的官方文档 键命令 序号命令及描述1DEL key 该命令用于在 key 存在时删除 key。2DUMP key 序列化给定 key ,并返回被序列化的值。3EXISTS key 检查给定 key 是否存在。4EXPIRE key seconds 为给定 key 设置过期时间&#xf…

Python爬虫核心模块urllib的学习

​ 因为在玩Python challenge的时候,有用过这个模块,而且学习这个模块之后也对系统学习网络爬虫有用。 ​ 当时查了各种资料学习,没有碰官网文档(因为还是对英语有抗拒性),但是还是官方的文档最具权威和学…

使用Java做业务开发,如何做好一个定时任务的技术选型?

1. 轻量级任务调度 Quartz Scheduler 适用场景: 单机或简单的分布式任务调度特点: 提供丰富的调度选项,如Cron表达式、固定间隔等;支持持久化,能够在应用重启后恢复任务;支持任务监听和触发器监听。建议: 如果你的应用是基于Spr…

搭建docker本地仓库

1.拉取私有仓库镜像 [rootmaster1 ~]# docker pull registry [rootmaster1 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE nginx v1 546db553f62a About an hour ago …

ftp远程连接传输的常见问题有哪些?如何一站式解决传输问题?

众多传统老行业很多已经部署了FTP传输相关系统,随着数据量和文件量的增加,一些相应的问题也出现了,些问题可能会影响传输的效率和安全性。本文将介绍FTP的常见问题和解决方法,并说明为什么大文件传输平台可以帮助企业实现更快更安…

安卓主板_MTK联发科4G低功耗安卓主板开发板方案

ZM358-DP安卓主板是一款性能功能强大的4G安卓平台。它采用了联发科MTK6737、MTK8735、MTK6753、MTK6735等芯片平台,64位四核Cortex-A53架构,主频高达1.3GHz,搭载ARM Mail-T450 MP2 GPU。 安卓主板具备多路显示屏接口,包括双LVDS、…

强劲升级,太极2.x你值得拥有!

嗨,大家好,最近桃桃没顾得上给大家分享好用好玩的软件。 还记得前段时间给大家分享的太极1.0软件? 最近大佬对软件进行了全新升级,升级后的功能更强更稳定,轻度用户使用基本功能就已经足够了,壕无人性的同学…

广州华锐互动:VR技术应用到工程项目施工安全培训的好处

随着科技的飞速发展,虚拟现实(VR)技术已经深入到各个领域。在建筑施工领域,VR技术的应用为工程项目施工安全培训带来了许多好处。本文将探讨VR技术在这方面的优势和应用。 首先,VR技术能够提供沉浸式的安全培训体验。通过VR设备,学…

cuDNN安装成功

验证方法:winR cmd进入安装目录下,再进入到 extras\demo_suite下,执行.\bandwidthTest.exe和.\deviceQuery.exe,得到下图。

蓝桥算法赛(摆玩具)

问题描述 小蓝是一个热爱收集玩具的小伙子,他拥有 n 个不同的玩具。 这天,他把 n 个玩具按照高度顺序从矮到高摆放在了窗台上,然后,他希望将这些玩具分成 k 个段,使得所有分段的极差之和尽可能小。 具体来说&…

Vue props实现父组件给子组件传递数据

Vue中的配置项Props能让组件接收外部传递过来的数据。 一、传递数据 在要传递的组件标签中配置传递信息: 属性名 "属性值" 注意:如果传递的属性值是一个表达式,要使用:属性名"属性值" 的形式。 二、接收数…

竞赛选题 深度学习动物识别 - 卷积神经网络 机器视觉 图像识别

文章目录 0 前言1 背景2 算法原理2.1 动物识别方法概况2.2 常用的网络模型2.2.1 B-CNN2.2.2 SSD 3 SSD动物目标检测流程4 实现效果5 部分相关代码5.1 数据预处理5.2 构建卷积神经网络5.3 tensorflow计算图可视化5.4 网络模型训练5.5 对猫狗图像进行2分类 6 最后 0 前言 &#…

FLStudio21汉化破解激活版下载,Fl Studio 2024中文破解版激活补丁

最新版本FL Studio 21官方中文汉化激破解版是比利时Image-Line公司开发的DAW。在去年DTM站的DAW调查中,在世界上很受欢迎,特别是作为EDM制作工具被广泛使用。从1997年以FruityLoops的名字发行的时候开始,FL Studio 21就一直作为Windows专用的…