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

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

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

cpp 复制代码
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;                     //发送当前数据
}

完整代码如下:

cpp 复制代码
/*************************************************
版权声明:

文件名: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
}

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

cpp 复制代码
#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

相关推荐
Bona Sun12 小时前
单片机手搓掌上游戏机(十六)—pico运行fc模拟器之程序修改烧录
c语言·c++·单片机·游戏机
Bona Sun14 小时前
单片机手搓掌上游戏机(十三)—pico运行fc模拟器之硬件准备
c语言·c++·单片机·游戏机
Bona Sun14 小时前
单片机手搓掌上游戏机(十八)—pico运行fc模拟器之更大屏幕
c语言·c++·单片机·游戏机
恒锐丰小吕15 小时前
屹晶微 EG2163 高集成度三相半桥驱动芯片技术解析
嵌入式硬件·硬件工程
freemote16 小时前
超、超、超小型温度传感器TMP118
单片机·i2c·温度传感器·tmp118·超小型温度传感器
Meraki.Zhang16 小时前
【STM32实践篇】:STM32CubeMX 的使用
stm32·单片机·嵌入式软件
yuanjj8818 小时前
域格移芯平台模块FTP下载应用
单片机·物联网·网络协议
古译汉书19 小时前
嵌入式笔记(个人总结)
数据结构·笔记·stm32·单片机·嵌入式硬件
bai54593620 小时前
STM32 定时器(Timer)
stm32·单片机·嵌入式硬件
沐欣工作室_lvyiyi1 天前
基于STM32的宠物自动喂食器(论文+源码)
stm32·嵌入式硬件·毕业设计·宠物