【单片机】51单片机串口的收发实验,串口程序

news2024/9/29 15:19:45

在这里插入图片描述
这段代码是使用C语言编写的用于8051单片机的串口通信程序。它实现了以下功能:

引入必要的头文件,包括reg52.h、intrins.h、string.h、stdio.h和stdlib.h。

定义了常量FSOC和BAUD,分别表示系统时钟频率和波特率。

定义了一个发送数据的函数send,该函数将数据发送到串口,等待数据发送完成后清除发送中断标志。

定义了一个打印字符串的函数Print_Str,该函数将一个以空字符结尾的字符串发送到串口。

定义了串口初始化函数SerInit,该函数配置串口通信的相关寄存器,包括设置波特率、串口模式、定时器模式等。

定义了一个延时函数delay_ms,用于产生指定毫秒数的延时。

定义了全局变量Txd_data,用于保存接收到的数据。

定义了串口中断服务函数Uart_isr,当接收到数据时会触发串口中断,该函数将接收到的数据发送回去。

在main函数中,首先调用SerInit进行串口初始化,然后开启总中断,延时一段时间,接着使用Print_Str函数发送一些字符串。

在main函数的主循环中,程序会一直循环执行。

总体来说,这段代码配置了8051单片机的串口通信功能,使其能够接收和发送数据。通过串口,你可以与外部设备进行数据交换和通信。

#include "reg52.h"
#include <intrins.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>

#define FSOC	11059200L
#define BAUD	9600

void send(unsigned char dat) {
	SBUF = dat;
	while (!TI);
	TI = 0;
}

void Print_Str(unsigned char *s) {
	while (*s != '\0') {
		send(*s++);
	}
}


void SerInit(void) {
	SCON = 0x50;
	TMOD = 0x20;
	TCON = 0x40;
	TH1 = -(FSOC / BAUD / 12 / 16);
	TL1 = -(FSOC / BAUD / 12 / 16);
	PCON = 0x80;
	RI = 0;
	TI = 0;
	ES = 1;
}


void delay_ms(unsigned int t) {
	unsigned char ttt;
	while (t--) {
		for (ttt = 0; ttt < 125; ttt++);
	}
}

unsigned char Txd_data;
void Uart_isr() interrupt 4 {
	if (RI) {
		Txd_data = SBUF;
		RI = 0;
		send(Txd_data);
	}
}


void main(void) {
	SerInit();
	EA = 1;
	delay_ms(200);
	Print_Str("zheng dian bao shi ");
	Print_Str("\r\n");

	while (1) {
	}
}

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

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

相关文章

基于web特产店销售管理系统的设计与实现(论文+源码)_kaic

摘要 农业是我国国民经济的重要组成部分&#xff0c;随着信息化的普及&#xff0c;4G网络、光纤以及5G网络也日益完善&#xff0c;农业信息化的发展成为了必然。同时&#xff0c;由于本年疫情原因&#xff0c;导致农作物积压销售&#xff0c;甚至腐烂造成不必要的浪费&#xff…

k8s ingress获取客户端客户端真实IP

背景 在Kubernetes中&#xff0c;获取客户端真实IP地址是一个常见需求。这是因为在负载均衡架构中&#xff0c;原始请求的源IP地址会被替换成负载均衡器的IP地址。 获取客户端真实IP的需求背景包括以下几点&#xff1a; 安全性&#xff1a;基于客户端IP进行访问控制和认证授…

Java阶段五Day20

Java阶段五Day20 文章目录 Java阶段五Day20项目推进完成订单OrderServerService && MessageTransSenderRepositoryMessageTransRepoImplLocalTransactionLisetner 结算订单业务流程图远程调用 画时序图 项目推进 完成订单 通过分布式消息事务解决本地事务和发消息的一…

精选5个AI绘画工具,灵感与创意迸发!

伴随着AI技术的发展&#xff0c;AI绘画工具也走进了人们的视线&#xff0c;今天本文将为大家推荐5个最近火爆的AI绘画神器&#xff0c;一起来看看吧&#xff01; 1、即时灵感 即时灵感是一个国产的AI绘画神器&#xff0c;非常受国内设计师的欢迎。它支持设计师使用中文描述词…

面向视频会议场景的 H.266/VVC 码率控制算法研究

文章目录 面向视频会议场景的 H.266/VVC 码率控制算法研究个人总结摘要为什么要码率控制码率控制的关键会议类视频码率控制研究背景视频会议系统研究现状目前基于 R-λ模型的码率控制算法的问题文章主要两大优化算法优化算法1&#xff1a;基于视频内容相关特征值的码率控制算法…

网安周报|CISA对梭鱼ESG攻击中使用的潜艇后门发出警告

1、CISA对梭鱼ESG攻击中使用的潜艇后门发出警告 美国网络安全与基础设施安全局&#xff08;CISA&#xff09;发布了一条针对恶意软件变体的警报&#xff0c;该变体被追踪为SUBMARINE Backdoor&#xff0c;用于利用该漏洞进行攻击 CVE-223-2868在Barracuda电子邮件安全网关&…

斯坦福大学提出在类别层级对多零件多关节三维拼装新方法

来源&#xff1a;投稿 作者&#xff1a;橡皮 编辑&#xff1a;学姐 paper&#xff1a;https://arxiv.org/pdf/2303.06163.pdf 背景&#xff1a; 形状装配通过排列一组简单或基本的零件几何图形来组成复杂的形状几何图形。许多重要的任务和应用都依赖于形状装配算法。 计算机…

redis初级

Redis 课程内容 Redis入门Redis数据类型Redis常用命令在Java中操作RedisRedis持久化机制 1. Redis入门 1.1 Redis简介 Redis是一个基于内存的key-value结构数据库。Redis 是互联网技术领域使用最为广泛的存储中间件。 **官网&#xff1a;**https://redis.io **中文网&…

推荐前端开发者提升效率的工具

是否掌握新的技术很大程度决定着你是否被淘汰。 虽然应用程序试图将网站替代&#xff0c;但前端 Web 开发业务仍在快速变化和增长&#xff0c;前端开发人员的功能并没有消失。以下介绍一款前端开发者提升效率的工具。 目录 一、低代码工具前景 二、如何理解低代码工具 三、前端…

直播预告|还在说做不出、改不好地图贴图?一次直播包教包会!

在EasyV中&#xff0c;地图组件通常会作为可视化大屏中的「主视觉」部分&#xff0c;用户通过地图组件的使用&#xff0c;可以极大程度上提高搭建的效率以及视觉效果。正因如此&#xff0c;我们的素材广场中大多模板也将「地图」作为核心部分&#xff0c;以此来方便用户快速套用…

203. 移除链表元素

203. 移除链表元素 题目方法1递归方法2迭代 题目 给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链表中所有满足 Node.val val 的节点&#xff0c;并返回 新的头节点 。 方法1递归 class Solution { public:ListNode* removeElements(ListNode* head, in…

IO进程线程day7(2023.8.4)

一、Xmind整理&#xff1a; 二、课上练习&#xff1a; 练习1&#xff1a;创建两个线程&#xff1a;其中一个线程拷贝前半部分&#xff0c;另一个线程拷贝后半部分。 只允许开一份资源&#xff0c;且用互斥锁方式实现。 提示&#xff1a;找临界区--->找临界资源。 #includ…

关于compose AndroidView更新及生命周期的监听。

有时候需要在compose中使用原生view体系&#xff0c;那么将会用到AndroidView这个控件。 从源码中可以看出有三个参数&#xff0c;factory就是要添加的view控件&#xff0c;在update中对控件进行更新。 以添加地图为例&#xff1a; 对地图进行更新及对生命周期的监听&#xff1…

探索Android应用架构模式:选择适合你的开发之路

探索Android应用架构模式&#xff1a;选择适合你的开发之路 通过这篇文章&#xff0c;读者将能够更好地理解不同的Android应用架构模式&#xff0c;为他们的项目选择最适合的架构模式&#xff0c;并在开发过程中更高效地构建稳健的应用程序。 引言 在今天的移动应用开发领域…

MongoDB 6.0.8 安装配置

一、前言 MongoDB是一个基于分布式文件存储的数据库。由C语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。在高负载的情况下&#xff0c;添加更多的节点&#xff0c;可以保证服务器性能。 MongoDB 将数据存储为一个文档&#xff0c;数据结构由键值(key>value…

vue-cli3项目优化

首先添加两个量化的插件&#xff0c;方便对项目目前的情况进行分析&#xff1a; 1.添加speed-measure-webpack-plugin插件 —量化的指标可以看出前后对比 使用步骤&#xff1a; 安装speed-measure-webpack-plugin依赖 npm install speed-measure-webpack-plugin -D配置vue.c…

React安装ant design组件库,并使用

ant design是一个很棒的组件库&#xff0c;官方地址&#xff1a;快速上手 - Ant Design 但是如何在React里面用起来&#xff0c;好像并不是很顺畅&#xff0c;没有像Vue里面那么友好&#xff0c;因为我踩过这个坑&#xff0c;虽然安装很简单&#xff0c;但是想要出样式&#x…

【Spring】Spring中的设计模式

文章目录 责任链模式工厂模式适配器模式代理模式模版方法观察者模式构造器模式 责任链模式 Spring中的Aop的通知调用会使用责任链模式责任链模式介绍 角色&#xff1a;抽象处理者&#xff08;Handler&#xff09;具体处理者&#xff08;ConcreteHandler1&#xff09;客户类角…

ARM裸机-13(SDRAM和重定位relocate)

1、汇编写启动代码之关看门狗 1.1、什么是看门狗 看门狗(watch dog timer&#xff0c;看门狗定时器)。大家想象这样一个场景:家门口有一只狗&#xff0c;这个狗定时会饿(例如说2小时一饿)&#xff0c;够饿了会胡乱咬死人。人进进出出要想保证安全必须提前喂狗(必须在上次喂过后…

【夜深人静学习数据结构与算法 | 第十二篇】动态规划——背包问题

目录 前言&#xff1a; 01背包问题&#xff1a; 二维数组思路&#xff1a; 一维数组思路&#xff1a; 总结&#xff1a; 前言&#xff1a; 在前面我们学习动态规划理论知识的时候&#xff0c;我就讲过要介绍一下背包问题&#xff0c;那么今天我们就来讲解一下背包问题。 在这…