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);
}
相关推荐
纳祥科技12 小时前
Switch快充方案,内置GaN,集成了多个独立芯片
单片机
资料,小偿12 小时前
4.1.2基于51单片机汇编语言出租车计价器proteus仿真出租车计价器,汇编语言51单片机
汇编·51单片机·proteus
单片机日志13 小时前
【单片机毕业设计】【mcugc-mcu826】基于单片机的智能风扇系统设计
stm32·单片机·嵌入式硬件·毕业设计·智能家居·课程设计·电子信息
松涛和鸣14 小时前
从零开始理解 C 语言函数指针与回调机制
linux·c语言·开发语言·嵌入式硬件·排序算法
小曹要微笑21 小时前
STM32F7 时钟树简讲(快速入门)
c语言·stm32·单片机·嵌入式硬件·算法
XINVRY-FPGA21 小时前
XCVP1802-2MSILSVC4072 AMD Xilinx Versal Premium Adaptive SoC FPGA
人工智能·嵌入式硬件·fpga开发·数据挖掘·云计算·硬件工程·fpga
沐欣工作室_lvyiyi21 小时前
家用按摩椅控制系统设计(论文+源码)
单片机·物联网·毕业设计·按摩椅控制系统
天天爱吃肉82181 天前
电机控制技术深度解析:从基础原理到前沿实战
python·嵌入式硬件·汽车
学习路上_write1 天前
FREERTOS_互斥量_创建和使用
c语言·开发语言·c++·stm32·单片机·嵌入式硬件
czhaii1 天前
单片机RTOS“实时响应时间”的定义与测量方法
单片机