51单片机--串口通信

基本介绍

  • 串口是一种应用十分广泛的通讯接口,串口成本低、容易使用、通信线路简单,可实现两个设备的互相通信。
  • 单片机的串口可以使单片机与单片机单片机与电脑单片机与各式各样的模块互相通信,极大的扩展了单片机的应用范围,增强了单片机系统的硬件实力。
  • 51单片机内部自带UART(Universal Asynchronous Receiver Transmitter,通用异步收发器),可实现单片机的串口通信。

基本接线

  • 简单双向串口通信有两根通信线(发送端TXD和接收端RXD)
  • TXD与RXD要交叉连接
  • 当只需单向的数据传输时,可以直接一根通信线
  • 当电平标准不一致时,需要加电平转换芯片

电平标准

电平标准是数据1和数据0的表达方式,是传输线缆中人为规定的电压与数据的对应关系,串口常用的电平标准有如下三种:

  • TTL电平:+5V表示1,0V表示0
  • RS232电平:-3-15V表示1,+3+15V表示0
  • RS485电平:两线压差+2+6V表示1,-2-6V表示0(差分信号)

常见通信接口比较

名称 引脚定义 通信方式 特点
UART TXD、RXD 全双工、异步 点对点通信
I²C SCL、SDA 半双工、同步 可挂载多个设备
SPI SCLK、MOSI、MISO、CS 全双工、同步 可挂载多个设备
1-Wire DQ 半双工、异步 可挂载多个设备

51单片机的UART

  • STC89C52有1个UART
  • STC89C52的UART有四种工作模式:
    模式0:同步移位寄存器
    模式1:8位UART,波特率可变(常用)
    模式2:9位UART,波特率固定
    模式3:9位UART,波特率可变

串口模式图

SBUF:串口数据缓存寄存器,物理上是两个独立的寄存器,但占用相同的地址。写操作时,写入的是发送寄存器,读操作时,读出的是接收寄存器

串口和中断系统

串口相关寄存器

SCON配置

SCON:串行控制寄存器,可位寻址,用于选择串行通信的工作方式和某些控制功能。

  • SM0,SM1按下列组合确定串行口的工作方式:


我们一般选择方式1,所以SM0=0,SM1=1.

  • REN:1则启动串行接收器RXD,开始接收信息,0为禁止接收,我们先设置为1。
  • TI:发送中断请求标志位,发送数据时,由内部硬件自动置1,响应中断后由软件复位为0。
  • RI:接收中断请求标志位,接收数据时,由内部硬件自动置1,响应中断后由软件复位为0。

这里配置SCON的八位分别为:01010000,十六进制0x50

PCON配置

PCON:电源控制寄存器,不可位寻址

这里配置PCON的八位分别为:10000000,十六进制0x50

中断寄存器配置

程序配置

波特率可通过软件进行生成

程序操作

串口向电脑发送数据

#include <REGX52.H>
#include "Delay.h"
#include "UART.h"
unsigned char num;

void main(){
	
	UartInit();
	while(1){
		UART_SendBype(num++);
		Delay(1000);
	}
}

#include <REGX52.H>

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

void UART_SendBype(unsigned char Byte)
{
		SBUF=Byte;
		while(TI==0);
		TI=0;
}

电脑通过串口控制单片机

需要接受定时器SCON的REN为1,和发送不通,接收要配置串口中断,串口中断号为4

#include <REGX52.H>
#include "Delay.h"
#include "UART.h"

unsigned char num;

void main(){
	
	UartInit();
	while(1){
		
	}
}

void UART_Routine() interrupt 4
{
	//判断是接收中断
	if(RI==1)
	{	
		P1=~SBUF;//点亮LED
		UART_SendBype(SBUF);
		RI=0;//清除接收中断标志
	}
	
}

数据显示

HEX模式/十六进制模式/二进制模式:以原始数据的形式显示
文本模式/字符模式:以原始数据编码后的形式显示,可发送ASCII编码表字符

posted @ 2022-03-22 15:27  今晚可以打老虎  阅读(848)  评论(0编辑  收藏  举报