单片机通过串口向电脑发送字符串

server/2024/9/23 10:39:44/

1.TTL电平

TTL Transistor-Transistor Logic ,即晶体管 - 晶体管逻辑的简称,它是计算机处理器控制的设备
内部各部分之间通信的标准技术。 TTL 电平信号应用广泛,是因为其数据表示采用二进制规定,
+5V 等价于逻辑 ”1” 0V 等价于逻辑 ”0”
数字电路中,由 TTL 电子元器件组成电路的电平是个电压范围,规定:
输出高电平 >=2.4V ,输出低电平 <=0.4V
输入高电平 >=2.0V ,输入低电平 <=0.8V
笔记本电脑通过 TTL 电平与单片机通信
TX 发送线(端口) 3.1
RX 接收线 ( 端口) 3.0
USB TTL ,使用 ch340 通信

 2.串口接线方式及配置

RXD :数据输入引脚,数据接受; STC89 系列对应 P3.0
TXD :数据发送引脚,数据发送; STC89 系列对应 P3.1 口 
接线方式

 

输入 / 输出数据缓冲器都叫做 SBUF , 都用 99H 地址码,但是是两个独立的 8 位寄存器
代码体现为: 想要接收数据 char data = SBUF 想要发送数据 SBUF = data

 

发送数据过程:

 发送数据时,发送时钟的下降沿将数据串行移位输出;

 接收数据的过程:

接收数据时,接收时钟的上升沿开始对数据位采样。


串行数据缓冲器SBUF:

有两个物理上独立的接收、发送缓冲器SBUF,它们占用同一地址99H。
串行发送数据时,CPU向SBUF写入数据,此时99H表示发送SBUF;串行接收数据时,CPU从SBUF读出数据,此时99H表示接收SBUF。

 发送数据:

SBUF=0x88;        //向SBUF写入数据,即将发送

接收数据:

unsigned char c;//char c;
while (!RI); //等待接收数据
RI=0; //需要软件清标志位
c=SBUF; //读取数据

由于UART是异步串行接口,通信双方的时钟频率不同,因为硬件不同所以就要约束他们的通信速度,就叫波特率 

 

3. 数据的收发时序图

字符 'a' 是如何从单片机上传到 PC
a ASSII 码是 97 16 进制就是 0x61, 二进制是 01010001 ,这个 8 位就是数据位
串口工作模式 1 ,一帧数据有 10 位,起始位( 0 ),数据位,停止位( 1
那么 a 的一帧数据就是 0 1000 1010 1 起始位, a 的低位到高位,停止位
他们将依次的从低位到高位进行收发

4.代码实现

#include <REGX52.H>
#include "intrins.h"//#define SIZE 12
sfr AUXR = 0x8E;
sbit D5 = P3^7;
void UartInit(void)		//9600bps@11.0592MHz
{AUXR = 0x01;SCON = 0x50; //配置串口工作方式1,REN使能接收TMOD &= 0x0F;//按位与,高四位清零低四位不变TMOD |= 0x20;//按位或定时器1工作方式位8位自动重装TH1 = 0xFD;TL1 = 0xFD;//9600波特率的初值TR1 = 1;//启动定时器EA = 1;//开启总中断ES = 1;//开启串口中断
}void Delay1000ms()		//@11.0592MHz
{unsigned char i, j, k;_nop_();i = 8;j = 1;k = 243;do{do{while (--k);} while (--j);} while (--i);
}void sendByte(char data_msg)
{SBUF = data_msg;while(!TI);  //TI发送中断请求标志位,检测是否发送完TI = 0;  //TI为1,表示发送完数据
}void sendString(char* str)
{while( *str != '\0'){sendByte(*str);str++;}
}void main()
{D5 = 1;  //LED1熄灭//配置C51串口的通信方式UartInit();while(1){Delay1000ms();//往发送缓冲区写入数据,就完成数据的发送sendString("hello the world!\r\n");  //串口显示换行}
}

 注意串口换行\r\n,

发送数据时,内部数据并行写入SBUF(发),然后再串行送出。

接收数据时,外部数据串行送入移位寄存器,之后再并行送入SBUF(收) 。

发送缓冲器只能写入而不能读出,接收缓冲器只能读出而不能写入,因而两个缓冲器可共用一个地址码(99H)


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

相关文章

Unity 热更 之 【YooAsset 热更】Unity 可以进行热更的资源管理系统,并 【Android 端简单实现·案例热更】

Unity 热更 之 【YooAsset 热更】Unity 可以进行热更的资源管理系统&#xff0c;并 【Android 端简单实现案例热更】 目录 Unity 热更 之 【YooAsset 热更】Unity 可以进行热更的资源管理系统&#xff0c;并 【Android 端简单实现案例热更】 一、简单介绍 二、YooAsset 引…

KRTS网络模块:UDP通信

KRTS网络模块:UDP通信 目录 KRTS网络模块:UDP通信UDP简介KRST UDP简介核心特性界面设计 核心代码运行实例稳定性测试 UDP简介 UDP&#xff08;User Datagram Protocol&#xff0c;用户数据报协议&#xff09;是一种无连接的传输层协议&#xff0c;它位于OSI七层模型中的传输层…

LTE PSS主同步信号搜索 MATLAB实现

本期带来PSS相关检测说明和MATLAB实现&#xff0c;本期只讲相关方面的&#xff0c;所以MATLAB实现也是相关的部分&#xff0c;频偏估计方面的待下期开讲。 LTE 4G PSS搜索分为TDD搜索和FDD搜索&#xff0c;但是对于 TDD 和 FDD 而言&#xff0c;PSS同步信号的结构是完全一样的&…

【前端面试】leetcode指针解法javascript

最大盛水 https://leetcode.cn/problems/container-with-most-water/ var maxArea = function(height) {// 左右指针靠拢let left = 0;let right = height.length-1;let maxArea = 0; while(left<right){// 计算出 当前的容积 与最大容积比较,取出最大的const currentAre…

数据结构————栈、队列

系统栈与数据结构中的栈 数据结构的栈系统栈定义与性质特殊的线性表&#xff0c;后进先出操作系统空间中的一块区域&#xff0c;用于保存中断现场、调用参数等操作入栈&#xff08;push&#xff09;、出栈&#xff08;pop&#xff09;、查看栈顶&#xff08;top&#xff09;由…

06_React ajax

React ajax 一、理解1、前置说明2、常用的 ajax 请求库浏览器插件推荐 二、axios1、跨域实际上是请求发出了&#xff0c;但是没有接收到数据。使用代理服务器进行解决2、React 脚手架配置代理2.1 前端项目在 package.json 中的文件添加配置&#xff0c;可以解决跨域2.2 方式二2…

Node.js发票识别接口助力企业实现发票的精准高效管理

在金融和会计领域&#xff0c;随着数字化进程的加速&#xff0c;大量的纸质发票处理已经成为了企业效率提升的一个瓶颈。发票文字识别接口的出现&#xff0c;被视为解决这一问题的关键技术创新。通过高精度的图像识别与机器学习技术&#xff0c;将繁琐的手动输入工作转化为自动…

谷歌计划在越南设立首个美国科技数据中心

据一位知情人士透露&#xff0c;Alphabet 子公司谷歌正在考虑在越南建立一个大型数据中心。 如果实现&#xff0c;这将标志着美国科技巨头在东南亚国家首次进行此类大规模投资。 据一位匿名人士透露&#xff0c;谷歌正在评估在越南南部经济中心胡志明市附近建立一个“超大规模…