【AT89C52】串口通信

UART是一种广泛应用的串行异步通信协议,通过两根通信线TXD和RXD进行数据传输。波特率设置在初始化UART时至关重要,文中示例展示了4800bps的配置方法。在单片机中,UART用于电脑控制LED,中断服务子函数处理接收到的数据并显示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

通用异步收发传输器(Universal Asynchronous Receiver/Transmitter,通常称作UART) 是一种串行异步收发协议,应用十分广泛。UART工作原理是将数据的二进制位一位一位的进行传输。在UART通讯协议中信号线上的状态位高电平代表’1’低电平代表’0’。当然两个设备使用UART串口通讯时,必须先约定好传输速率和一些数据位。
在这里插入图片描述

简单双向串口通信有两根通信线(发送端TXD接收端RXD)
TXD与RXD要交叉连接
当只需要单向数据传输时,可以直接一根通信线
一个TXD支持多个RXD(一发多收)
当电平标志不一致时,需要加电平转换芯片
在这里插入图片描述
在这里插入图片描述


在这里插入图片描述

波特率设置:

void UartInit(void)		//4800bps@11.0592MHz   [UART_Init()]
{
	PCON |= 0x80;		//使能波特率倍速位SMOD
	SCON = 0x50;		//8位数据,可变波特率
	TMOD &= 0x0F;		//清除定时器1模式位
	TMOD |= 0x20;		//设定定时器1为8位自动重装方式
	TL1 = 0xF4;		//设定定时初值
	TH1 = 0xF4;		//设定定时器重装值
	ET1 = 0;		//禁止定时器1中断
	TR1 = 1;		//启动定时器1
}

数据显示模式:

这里是引用
编码即ASCII码

电脑通过串口控制LED

#include <REGX52.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;  //有数据即存在SBUF中,赋值给P2 LED指示数据
		UART_SendByte(SBUF);  
		RI = 0;   //硬件只负责置1,T1和R1需要软件复位置0
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值