51单片机 串口

一、串口基本认知概念

串口是一种用于在计算机或其他设备之间进行数据传输的通信接口。串口传输是通过发送和接收数据位来进行的,通常是一个字节一个字节地传输。串口通常有多种参数设置,比如波特率、数据位、校验位和停止位等,这些参数需要在通信的双方设备之间进行匹配才能确保正常的数据传输。串口常用于连接计算机与外围设备(比如打印机、调制解调器、传感器等),或者在嵌入式系统中进行设备之间的通信。串口通常分为RS-232、RS-485、RS-422等不同的标准,每种标准有不同的应用场景和特点。

RS-232

也称标准串口,最常用的一种[串行通讯接口,比如我们的电脑主机的9针串口 ,最高速率为20kb/s

RS-232是为点对点(即只用一对收、发设备)通讯而设计的,其传送距离最大为约15米。所以RS-232适合本地设备之间的通信RS-422

由于接收器采用高输入阻抗和发送驱动器比RS232更强的驱动能力,故允许在相同传输线上连接多个接收节点,最多可接10个节点。即一个主设备(Master),其余为从设备(Slave),从设备之间不能通信,所以RS-422支持点对多的双向通信。

RS-422的最大传输距离为1219米,最大传输速率为10Mb/s。平衡双绞线的长度与传输速率成反比

RS-485

是从RS-422基础上发展而来的,无论四线还是二线连接方式总线上可多接到32个设备

二、

三、程序

3.1 发送数据

cpp 复制代码
#include "reg52.h"
#include "intrins.h"

sbit ledOne = P3^7;
sfr AUXR =0X8E;

void Delay1000ms()		//@11.0592MHz
{
	unsigned char i, j, k;

	i = 8;
	j = 1;
	k = 243;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}

void UartInit(void)		//9600bps@11.0592MHz
{
	PCON &= 0x7F;		//波特率不倍速
	SCON = 0x50;		//8位数据,可变波特率
	AUXR &= 0xBF;		//定时器1时钟为Fosc/12,即12T
	AUXR &= 0xFE;		//串口1选择定时器1为波特率发生器
	TMOD &= 0x0F;		//清除定时器1模式位
	TMOD |= 0x20;		//设定定时器1为8位自动重装方式
	TL1 = 0xFD;		//设定定时初值
	TH1 = 0xFD;		//设定定时器重装值
	ET1 = 0;		//禁止定时器1中断
	TR1 = 1;		//启动定时器1
}


void main()
{
  char buf_msg = 'U';
	ledOne = 0;
  UartInit();
  
  while(1) {
    Delay1000ms();
    SBUF = buf_msg;
  
  }
}

3.2 发送字符串

cpp 复制代码
#include "reg52.h"
#include "intrins.h"

sbit ledOne = P3^7;
sfr AUXR =0X8E;

void Delay1000ms()		//@11.0592MHz
{
	unsigned char i, j, k;

	i = 8;
	j = 1;
	k = 243;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}

//void UartInit(void)		//9600bps@11.0592MHz
//{
//	PCON &= 0x7F;		//波特率不倍速
//	SCON = 0x50;		//8位数据,可变波特率
//	AUXR &= 0xBF;		//定时器1时钟为Fosc/12,即12T
//	AUXR &= 0xFE;		//串口1选择定时器1为波特率发生器
//	TMOD &= 0x0F;		//清除定时器1模式位
//	TMOD |= 0x20;		//设定定时器1为8位自动重装方式
//	TL1 = 0xFD;		//设定定时初值
//	TH1 = 0xFD;		//设定定时器重装值
//	ET1 = 0;		//禁止定时器1中断
//	TR1 = 1;		//启动定时器1
//}

void UartInit(void)		//9600bps@11.0592MHz
{
  SCON =  0x40;
  TMOD &= 0XF0;
  TMOD |=0X20;
  TH1 = 0XFD;
  TL1 = 0XFD;
  TR1 = 1;
}

void sendbuf(char data_msg)
{
    SBUF = data_msg;
    while(!TI);
    TI = 0;
}

void sendstr(char* str)
{
  while(*str != '\0')
  {
    sendbuf(*str);
    str++;
  }
}


void main()
{
  char buf_msg = '8';
	ledOne = 0;
  UartInit();
  
  while(1) {
    Delay1000ms();
//    sendbuf(buf_msg);
    sendstr("shua\r\n");
  }
}

3.3 发送指令控制LED

cpp 复制代码
#include "reg52.h"
#include "intrins.h"

sbit ledOne = P3^7;
sfr AUXR =0X8E;
char cmd;

void Delay1000ms()		//@11.0592MHz
{
	unsigned char i, j, k;

	i = 8;
	j = 1;
	k = 243;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}

//void UartInit(void)		//9600bps@11.0592MHz
//{
//	PCON &= 0x7F;		//波特率不倍速
//	SCON = 0x50;		//8位数据,可变波特率
//	AUXR &= 0xBF;		//定时器1时钟为Fosc/12,即12T
//	AUXR &= 0xFE;		//串口1选择定时器1为波特率发生器
//	TMOD &= 0x0F;		//清除定时器1模式位
//	TMOD |= 0x20;		//设定定时器1为8位自动重装方式
//	TL1 = 0xFD;		//设定定时初值
//	TH1 = 0xFD;		//设定定时器重装值
//	ET1 = 0;		//禁止定时器1中断
//	TR1 = 1;		//启动定时器1
//}

void UartInit(void)		//9600bps@11.0592MHz
{
  AUXR = 0x01;
  SCON =  0x50;
  TMOD &= 0XF0;
  TMOD |=0X20;
  TH1 = 0XFD;
  TL1 = 0XFD;
  TR1 = 1;
  EA =1;
  ES =1;
}

void sendbuf(char data_msg)
{
    SBUF = data_msg;
    while(!TI);
    TI = 0;
}

void sendstr(char* str)
{
  while(*str != '\0')
  {
    sendbuf(*str);
    str++;
  }
}


void main()
{
  char buf_msg = '8';
	ledOne = 1;
  UartInit();
  
  while(1) {
    Delay1000ms();
//    sendbuf(buf_msg);
    sendstr("shua\r\n");
    

  }
}

void Uart_Handler()  interrupt 4
{
  if(RI)
  {
    RI = 0;
    cmd = SBUF;
    if(cmd == 'o') {
      ledOne= 0;
    }
   
     if(cmd == 'c') {
      ledOne= 1;
    }
  }
  
  if(TI);
}
相关推荐
云伴枫轻舞10 分钟前
我对 OTA 的理解随记,附GD32/STM32例程
stm32·单片机·嵌入式硬件
Aczone281 小时前
硬件(五) 存储、ARM 架构与指令系统
arm开发·嵌入式硬件·架构
LS·Cui1 小时前
单片机按键示例功能
单片机
【ql君】qlexcel2 小时前
MCU上电到运行的全过程
单片机·嵌入式硬件·mcu·启动过程
搞一搞汽车电子2 小时前
S32K3平台eMIOS 应用说明
开发语言·驱动开发·笔记·单片机·嵌入式硬件·汽车
pQAQqa2 小时前
FreeRTOS项目(2)摇杆按键检测
stm32·单片机·嵌入式硬件·freertos
小莞尔3 小时前
【51单片机】【protues仿真】基于51单片机停车场的车位管理系统
c语言·开发语言·单片机·嵌入式硬件·51单片机
一川月白7095 小时前
51单片机---硬件学习(跑马灯、数码管、外部中断、按键、蜂鸣器)
单片机·学习·51单片机·外部中断·蜂鸣器·数码管·跑马灯
月阳羊5 小时前
【硬件-笔试面试题-69】硬件/电子工程师,笔试面试题(知识点:电机驱动电路的反馈电路)
java·经验分享·嵌入式硬件·面试
weixin_468466857 小时前
树莓派32位与64位系统安装teamviewer远程软件
linux·单片机·自动化·树莓派·远程控制·vnc·teamviewer