[[Pasted image 20250120124904.png]]
也就是通过USB等接口对单片机实现通信
简单双向串口通信有两根通信线(发送端TXD和接收端RXD)
电平标准不一致时,需要电平转换芯片
且TXD与RXD要交叉连接
![[Pasted image 20250120125636.png]]
电平标准
其实就是用不同的电压表示1与0
![[Pasted image 20250120125907.png]]
串口定义
![[Pasted image 20250120130510.png]]
- DSR:用于数据流控制
![[Pasted image 20250120131309.png]]
![[Pasted image 20250120131705.png]]
波特率计算
1/计数器溢出值 / 16 = 波特率(MHz)
![[Pasted image 20250120150138.png]]
STC89C52RC串口通信
#include "DELAY.h"
#include <REGX52.H>
#include "UART.h"
unsigned char byte;
/**
发送数据
*/
void UartRoutine(void) interrupt 4
{
P2 = ~SBUF;
if(RI == 1)
{
UartSendByte(SBUF);
RI = 0;
}
}
void main()
{
UartInit();
byte = 0x51;
while(1)
{
UartSendByte(byte);
Delay(500);
}
}
#include <REGX52.H>
void UartInit(void) //4800bps@11.0592MHz
{
PCON &= 0x7F; //波特率不倍速
SCON = 0x50; //8位数据,可变波特率
TMOD &= 0x0F; //清除定时器1模式位
TMOD |= 0x20; //设定定时器1为8位自动重装方式
TL1 = 0xFA; //设定定时初值
TH1 = 0xFA; //设定定时器重装值
ET1 = 0; //禁止定时器1中断
TR1 = 1; //启动定时器1
EA = 1;
ES = 1;
}
void UartSendByte(unsigned char byte)
{
SBUF = byte;
while(TI == 0); // 检测是否发送完成
TI = 0;
}
在发送数据时调用中断,是为了防止发送的同时接收造成混乱
标签:Pasted,image,通信,串口,byte,void,png From: https://www.cnblogs.com/surime/p/18681587