51单片机07 串口通信

server/2025/2/7 5:05:40/

串口是一种应用十分广泛的通讯接口,串口成本低、容易使用、通信线路简单,可实现两个设备的互相通信。单片机的串口可以使单片机单片机单片机与电脑、单片机与各式各样的模块互相通信。单片机>51单片机内部自带UARTUniversal Asynchronous Receiver Transmitter,通用异步收发器),可实现单片机的串口通信。

 一、串口向电脑发送数据

 SCON=0x40; 这里用的是8位自动重装模式

#include <STC89C5xRC.H>
#include "Delay.h"void UART_Init()
{SCON=0x40;  //这里不使能 STC给的代码是50 REN位0/1PCON &= 0x7F;		//波特率不倍速TMOD &= 0x0F;		//设置定时器模式TMOD |= 0x20;		//设置定时器模式(用定时器1,8位自动重装)TL1 = 0xFA;		//设置定时初值TH1 = 0xFA;		//设置定时重装值//这里UpTL/TH两个都是0xF3,试过了不行TR1 = 1;		//定时器1开始计时ET1 = 0;		//禁止定时器1中断,确保定时器只用来控制波特率
}void UART_SendByte(unsigned char Byte)
{SBUF=Byte;while(TI==0);TI=0;//刚开始发送数据是0,发送成功自动置1,跳出while需要人工置0
}void main()
{UART_Init();while(1){UART_SendByte(0x47);Delay(500);}
}

以上代码为了方便看没有模块化。

二、电脑通过串口控制LED

SCON=0x50;单片机发送不需要中断,是因为电脑程序员可以循环读取缓冲区,接收需要中断,因为不知道什么时候接收到,因此需要通过串口接收中断来及时响应接收到的数据,接收到的时候触发中断,需要打开中断的相应配置(ESEA和优先级)。

EA=1;ES=1

测试代码(已经模块化后)

void UART_Init()
{SCON=0x50;  //这里不使能 STC给的代码是50 REN位0/1(表示接收)PCON &= 0x7F;		//波特率不倍速TMOD &= 0x0F;		//设置定时器模式TMOD |= 0x20;		//设置定时器模式(用定时器1,8位自动重装)TL1 = 0xFA;		//设置定时初值TH1 = 0xFA;		//设置定时重装值//这里UpTL/TH两个都是0xF3,试过了不行TR1 = 1;		//定时器1开始计时ET1 = 0;		//禁止定时器1中断,确保定时器只用来控制波特率EA = 1;ES = 1;
}
#include <STC89C5xRC.H>
#include "Delay.h"
#include "UART.h"unsigned char sec;void main()
{UART_Init();while(1){}
}void UART_Routine() interrupt 4
{P2=0x00;
}

问了一下GPT,它意思也可以用如下方式类似TI进行中断处理,但是会浪费大量资源。

 while(1){// 监测接收标志位 RI,等待接收到数据while(RI == 0);  // 等待数据接收完成RI = 0;  // 清除接收中断标志位unsigned char received_data = SBUF;  // 读取接收到的数据// 处理接收到的数据}

-----------------------------------------

#include <STC89C5xRC.H>
#include "Delay.h"
#include "UART.h"unsigned char sec;void main()
{UART_Init();while(1){}
}void UART_Routine() interrupt 4
{if(RI==1) //排除是发送的干扰{P2=~SBUF;UART_SendByte(SBUF); //这个不能既在主函数main出现又在中断中出现RI=0;}
}

三、波特率(TLTH)

以老师的0xF3为例,243   256溢出-每13us就溢出   1/13us:定时器T1溢出频率 0.07692Mhz

设置倍速走上面1; 0.07692除以16   就是实际波特率   0.00480769Mhz     4807.69hz

四、数据显示模式

HEX模式/十六进制模式/二进制模式:以原始数据的形式显示

文本模式/字符模式:以原始数据编码后的形式显示


http://www.ppmy.cn/server/165598.html

相关文章

React常见状态管理工具详解

了 解React常见的状态管理工具&#xff0c;需要详细解释。首先&#xff0c;我得回想一下React生态中常用的状态管理方案有哪些。React本身有useState和useContext&#xff0c;然后是第三方库比如Redux、MobX、Recoil、Zustand、Jotai、XState&#xff0c;可能还有Valtio。这些工…

宾馆民宿酒店住宿管理系统+小程序项目需求分析文档

该系统是一款专为现代酒店设计的高效、智能、易用的管理工具,旨在帮助酒店提升运营效率、优化客户体验,提升客户满意度与忠诚度,并促进业务增长。系统采用先进的云计算技术,支持小程序等多平台访问,第三方接口,确保数据安全与稳定。本系统主要针对中小型精品酒店、连锁酒…

Google Chrome-便携增强版[解压即用]

Google Chrome-便携增强版 链接&#xff1a;https://pan.xunlei.com/s/VOI0OyrhUx3biEbFgJyLl-Z8A1?pwdf5qa# a 特点描述 √ 无升级、便携式、绿色免安装&#xff0c;即可以覆盖更新又能解压使用&#xff01; √ 此增强版&#xff0c;支持右键解压使用 √ 加入Chrome增强…

Windows Docker笔记-安装docker

安装环境 操作系统&#xff1a;Windows 11 家庭中文版 docker版本&#xff1a;Docker Desktop version: 4.36.0 (175267) 注意&#xff1a; Docker Desktop 支持以下Windows操作系统&#xff1a; 支持的版本&#xff1a;Windows 10&#xff08;家庭版、专业版、企业版、教育…

redis教程

Redis 教程 Redis 是一个开源的内存数据结构存储系统&#xff0c;用作数据库、缓存和消息代理。以下是一些基础知识和常用操作。 一、简介 Redis 支持多种数据结构&#xff0c;如字符串、哈希、列表、集合、有序集合等。它具有高性能、高可用性和数据持久化的特性。 二、安…

Kotlin/Js Kotlin 编译为 JS (尝试)

Kotlin/JS 是 Kotlin 编程语言的一个目标平台&#xff0c;它允许你使用 Kotlin 编写在 JavaScript 环境中运行的代码。通过 Kotlin/JS&#xff0c;你可以将你的 Kotlin 代码编译成 JavaScript 代码&#xff0c;通常是兼容 ECMAScript 5 或更高版本的形式。这使得 Kotlin 不仅可…

flutter 专题四十四 关于MacOs Catalina “无法打开***,因为无法验证开发者...”的解决方案

关于MacOs Catalina “无法打开***&#xff0c;因为无法验证开发者...”的解决方案 今天在升级Flutter后直接flutter doctor命令&#xff0c;报了一个【无法打开Dart&#xff0c;因为无法验证开发者】的警告。可以使用下面的命令进行授权&#xff1a; sudo spctl --master-di…

Node.js 的底层原理

Node.js 的底层原理 1. 事件驱动和非阻塞 I/O Node.js 基于 Chrome V8 引擎&#xff0c;使用 JavaScript 作为开发语言。它采用事件驱动和非阻塞 I/O 模型&#xff0c;使其轻量且高效。通过 libuv 库实现跨平台的异步 I/O&#xff0c;包括文件操作、网络请求等。 2. 单线程事…