串口通信

今天,我们来说一说串口通信。

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

单片机的串口可以使单片机与单片机、单片机与电脑、单片机与各式各样的模块互相通信。

简单双向串口通信有两根通信线,一个是发送端(TXD),一个是接收端(RXD)。TXD与RXD要交叉连接。但当只需要单向传输时,可以只接一根通信线。(如果电平标准不同,需要加电平转换芯片!)

 一般有如下三种电平标准

我们单片机一般常用TTL电平 。

一般常见的通信接口有如下几种

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

 半双工:通信双方可以互相传输数据,但只能共用一根线。

  异步:通信双方各自约定通信速率。

  同步:通信双方靠一根时钟线来约定通信速率。

一般的UART有四种模式,但我们常用模式1。

这是串口通信的模式图。可以看到这有两个SBUF(两个独立的寄存器,一个是发送寄存器,一个是接收寄存器)。

这是中断系统 ,当他发送或接收时,就会触发中断,即当R1或T1为1。

 这是串行口相关的寄存器。

其相关代码为

UART

#include <REGX52.H>
/**
   * @brief   串口初始化
   * @param   无
   * @retval  无
   */
void UART_Init()
{
  PCON &= 0x7F;		//波特率不倍速
	SCON = 0x50;		//8位数据,可变波特率
	TMOD &= 0x0F;		//清除定时器1模式位
	TMOD |= 0x20;		//设定定时器1为8位自动重装方式
	TL1 = 0xFA;		//设定定时初值
	TH1 = 0xFA;		//设定定时器重装值
	ET1 = 0;		//禁止定时器1中断
	TR1 = 1;		//启动定时器1
	ES=1;
	EA=1;


}
/**
   * @brief   串口发送一个字节数据
   * @param   Byte 要发送一个字节数据
   * @retval  无
   */
void UART_SendByte(unsigned char Byte)
{
  SBUF=Byte;
	while(TI==0);
	TI=0;
}

/* 串口中断函数模板
void UART_Routine() interrupt 4
{
  if(RI==1)
	{
	  P2=~SBUF;
		UART_SendByte(SBUF);
		RI=0;
	}

}
*/

main

#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;
		UART_SendByte(SBUF);
		RI=0;
	}

}

这就是关于串口通信的相关知识了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值