串口通信&控制LED

目录

1. 串口介绍

2. 硬件电路

3. 电平标准

4. 接口及引脚定义

5. 常见通信接口比较

6. 51单片机的UART

7. 串口参数及时序图

8. 串口模式图

9. 串口和中断系统

10. 串口相关寄存器

11. 串口向电脑发送数据

12. 电脑通过串口控制LED


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

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

3. 电平标准
  • 电平标准是数据1和数据0的表达方式,是传输线缆中人为规定的电压与数据的对应关系,串口常用的电平标准有如下三种:
  • TTL电平:+5V表示10V表示0(单片机)
  • RS232电平:-3~-15V表示1+3~+15V表示0
  • RS485电平:两线压差+2~+6V表示1-2~-6V表示0(差分信号)
4. 接口及引脚定义

5. 常见通信接口比较
名称引脚定义通信方式特点

UART

TXDRXD

全双工、异步

点对点通信

    I²C

SCLSDA

半双工、同步

可挂载多个设备

SPI

SCLKMOSIMISOCS

全双工、同步

可挂载多个设备

1-Wire

DQ

半双工、异步

可挂载多个设备

 

还有CANUSB

  • 全双工:通信双方可以在同一时刻互相传输数据
  • 半双工:通信双方可以互相传输数据,但必须分时复用一根数据线
  • 单工:通信只能有一方发送到另一方,不能反向传输
  • 异步:通信双方各自约定通信速率
  • 同步:通信双方靠一根时钟线来约定通信速率
  • 总线:连接各个设备的数据传输线路(类似于一条马路,把路边各住户连接起来,使住户可以相互交流)
6. 51单片机的UART

STC89C52有1UART

STC89C52的UART有四种工作模式:

  模式0:同步移位寄存器

  模式18UART,波特率可变(常用)

  模式29UART,波特率固定

  模式39UART,波特率可变

7. 串口参数及时序图
  • 波特率:串口通信的速率(发送和接收各数据位的间隔时间)
  • 检验位:用于数据验证
  • 停止位:用于数据帧间隔

8. 串口模式图

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

9. 串口和中断系统

这里使用的中断系统图是传统51单片机的图,STC89C52的中断系统图可参考手册

10. 串口相关寄存器

HEX模式/十六进制模式/二进制模式:以原始数据的形式显示

文本模式/字符模式:以原始数据编码后的形式显示

11. 串口向电脑发送数据
#include <REGX52.H>
#include"Delay.h"
unsigned char sec;        //main.c

void UART_Init()		
{
	PCON |= 0x80;		
	SCON = 0x40;		
	TMOD &= 0x0F;		
	TMOD |= 0x20;		
	TL1 = 0xF3;		
	TH1 = 0xF3;		
	ET1 = 0;		
	TR1 = 1;		
}

void UART_send(unsigned char a)
{
	SBUF=a;
	while(TI==0);
	TI=0;
}
void main()
{
	UART_Init();
      while(1)
   {
     UART_send(sec);
		 sec++;
		 Delay(1000);
   }
}
#include <REGX52.H>        //Delay.c


void Delay(unsigned int xms)		
	
{
	unsigned char i, j;
while(xms)
{
	i = 2;
	j = 239;
	do
	{
		while (--j);
	} while (--i);
	xms--;
}
}
#ifndef __Delay_H  //防止重定义
#define __Delay_H  //Delay.h

void Delay(unsigned int xms);	


#endif
12. 电脑通过串口控制LED
#include <REGX52.H>
#include"Delay.h"        //main.c

void UART_Init()		
{
	PCON |= 0x80;		
	SCON = 0x50;		
	TMOD &= 0x0F;		
	TMOD |= 0x20;		
	TL1 = 0xF3;		
	TH1 = 0xF3;		
	ET1 = 0;		
	TR1 = 1;	
	EA=1;
	ES=1;	
}

void UART_send(unsigned char a)
{
	SBUF=a;
	while(TI==0);
	TI=0;
}
void main()
{
		UART_Init();
		while(1)
   {
    
   }
}
void VART_Routine() interrupt 4
{
	if(RI==1)
	{
		P2=~SBUF;
		UART_send(SBUF);
		RI=0;
	}
}

谢谢观看

  • 16
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值