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

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)

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现通过串口调试发送任意字符串单片机,可以按照以下步骤进行: 1. 首先在单片机上实现串口接收功能。可以使用51单片机的UART模块,通过编程配置串口参数(波特率、数据位、停止位等)和中断服务函数来实现串口的接收功能。 2. 在PC端编写串口调试助手软件,比如使用Visual Studio开发一个Windows应用程序,或者使用Python语言编写一个串口调试脚本。通过串口调试助手软件,可以连接PC端和单片机,实现双向数据传输。 3. 在串口调试助手软件中编写发送字符串的代码。可以使用串口调试助手软件提供的API或者库函数,调用相应的函数来实现将任意字符串发送单片机。具体实现方法可以参考串口调试助手软件的开发文档。 4. 在单片机中编写串口接收中断服务函数,来接收从PC端发送过来的任意字符串。可以使用单片机的UART模块,通过编程将接收到的数据保存到缓冲区中,并在接收到一定长度的数据后触发中断服务函数来处理数据。 5. 在单片机中编写字符串处理函数,对接收到的任意字符串进行处理。可以根据具体需求,实现字符串的解析、分割、转换等操作。处理完成后,可以将处理结果通过串口发送回PC端。 需要注意的是,在实现串口通信时,需要保证PC端和单片机串口参数一致,否则会导致数据传输错误。同时,还需要注意在发送和接收数据时,要进行数据的校验和错误处理,以保证数据的正确性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值