51单片机学习记录——串口通信

本文详细介绍了串口的基本概念、在单片机中的应用、硬件电路设计、电平标准选择、全双工/半双工/单工通信区别,以及STC89C52单片机的UART模式。还涉及如何通过串口与电脑交互,以及控制LED的中断函数编写。
摘要由CSDN通过智能技术生成

串口

        串口的简介

        1.串口是一种应用十分广泛的通讯接口,串口成本低、容易使用、通信线路简单,可实现两个设备的互相通信;

        2.单片机的串口可以使单片机与单片机、单片机与电脑、单片机与各式各样的模块互相通信,极大的扩展了单片机的应用范围,增强了单片机系统的硬件实力;

         3.51单片机内部自带UART(Universal Asynchronous ReceiverTransmitter,通用异步收发器),可实现单片机的串口通信

        硬件电路

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

            其电路示意图:

                    

       电平标准

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

       相关术语

          全双工:通信双方可以在同一时刻互相传输数据半双工

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

常见的通信接口比较        

            STC89C52有1个UART,其中有四种模式

            模式0:同步移位寄存器

            模式1:8位UART,波特率可变(常用)

            模式2:9位UART,波特率固定

            模式3:9位UART,波特率可变

                                                         

        此寄存器相关串口的配置的问题,在使用串口的时候会需要编辑各个寄存器的状态,各个功能可参考手册,利用STC-ISP也可以快速生成配置代码。

串口向电脑发送数据

        在使用串口之前,我们需要再运行的时候将串口进行初始化,以确定我们要使用的串口的功能,然后在while循环里面每秒向电脑返回一个数据,所以也需要用到Delay函数,假如把串口的原理搞懂之后,代码还是很容易写的,其相关代码如下:

main函数

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

void	main()
{
		UART_Init();//串口初始化
		
		while(1)
		{
			UART_SendByte(Sec);
			Sec++;
			Delay(1000);
		}
}

 UART.c

#include <REGX52.H>

void UART_Init()//4800bps@11.0592MHz串口初始化
{
		SCON=0x40;//如果需要将数据写入单片机就为50
		PCON|=0x80;
		TMOD &= 0x0F;		//设置定时器模式
		TMOD |= 0x20;		//设置定时器模式
		TL1 = 0xF4;		//设定定时初值
		TH1 = 0xF4;		//设定定时器重装值
		ET1=0;
		TR1 = 1;
}


//串口发送一个字节的数据
void UART_SendByte(unsigned char Byte)
{
		SBUF=Byte;//直接写串口数据
		while(TI==0);//检测是否完成
		TI=0;
}

UART.h

#idndef __UART_H__
#define __UART_H__

void UART_Init();
void UART_SendByte(unsigned char Byte);

#endif

下载到板子上面后利用SIC-IPS可以查看电脑返回的数据,会发现每秒会递增加一

电脑通过串口控制LED

        如果要使用串口去控制LED,这就需要编写中断函数,中断函数里面的逻辑一班耦合性就比较强,所以一班放到main.c文件里面,在中断函数里面,得先判断RI是否被写入,不然中断函数会换脸,然后再将P2赋值就可以了。

       main.c

       

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

void	main()
{
		UART_Init();//串口初始化
		
		while(1)
		{
			
		}
}


void UART_Routine() interrupt 4
{
	if(RI==1)
		{
				P2=~SBUF;
				UART_SendByte(SBUF);
				RI=0;
		}			
}

总结

        今天学的串口的知识将电脑和单片机进行一个互动,对开发手册的熟练度比较高,这关乎到串口的初始化,所以在课后我打算没事的时候会多去阅读开发文件,熟悉一下各个寄存器分别控制的是啥,以便加深对串口的理解,希望以后能够有能力去使用更多的串口,比如蓝牙模块,USB模块等等,加油!

  • 34
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值