51单片机串口通信

串口

串口号需要一致

串口的介绍

总线的概念

总线是计算机系统中用于在各个组件之间传输数据、地址和控制信号的一种集成电路或物理连接。它是计算机内部各个部件之间进行通信和数据传输的重要途径。

总线可以分为数据总线、地址总线和控制总线三种类型。数据总线用于传输数据,地址总线用于指定内存或者I/O设备的地址,控制总线用于传输控制信号。这三种总线协同工作,使得不同的系统组件能够相互通信,协同工作,从而实现数据传输和协同操作。

在计算机系统中,总线连接着各个重要的组件,如中央处理器(CPU)、内存、输入输出设备(如键盘、鼠标、显示器等),使得它们能够相互通信和协同工作。总线的性能和速度直接影响了整个计算机系统的运行效率和性能。

总线的概念也在其他领域得到应用,比如在汽车电子系统中,各种传感器、执行器和控制单元之间通过总线进行通信和数据传输。总线的概念是计算机和电子系统中一个非常重要的概念,它为各种设备提供了一种统一的通信方式。

中断程序的编写

eg1:使用串口实现秒++的功能

cpp 复制代码
#include <REGX52.H>
#include <INTRINS.H>
unsigned char Sec;


void UART_Init(){
		 SCON = 0X40;
	   PCON |= 0X80;
	   TMOD &= 0X0F; // 设置定时器模式
	   TMOD |= 0X20; // 设置定时器模式
	   TL1 = 0XF3;   // 设置定时器的初始值
	   TH1 = 0XF3;   // 设置定时器的初始值
	   ET1 = 0;      // 禁止定时器1中断
	   TR1 = 1;      // 启动定时器1
}
// 串口发送函数
void UART_SendByte(unsigned char Byte){
      SBUF = Byte;
      while(TI == 0){
			  

			}
			TI = 0;

}

void Delay(unsigned int xms)		
{
	unsigned char i, j;
  while(xms){
		i = 2;
		j = 239;
		do{
		   while(--j);
		}while(--i);
	  xms--;
	}
	
}
void  main(){
	 // 串口初始化
	 UART_Init();	
   while(1){
	    	  // 发送一个数据
					UART_SendByte(Sec);
		      Sec++;
		      Delay(1000);
	 }

}

eg2:使用串口发送数据

eg2:电脑通过串口控制LED(使用模块化编程方式)

main函数文件

cpp 复制代码
#include <REGX52.H>
#include <INTRINS.H>
#include "UART.H"



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

	 }

}

// 串口中断,中断服务子函数
void UART_Routine() interrupt 4{
	 if(RI == 1){
	   P1 = ~SBUF;//读取寄存器中的数据,并存储到P2中
		 UART_SendByte(SBUF);// 函数不能同时在主函数中写然后右在中断函数中写,可能会导致函数的重入
		 RI = 0;
	 }
   //P1 = 0x00;

}

函数头文件

cpp 复制代码
#ifndef __UART_H__
#define __UART_H__
void Delay(unsigned int xms);
void UART_Init();
void UART_SendByte(unsigned char Byte);
#endif

函数c语言文件

cpp 复制代码
#include <REGX52.H>
void Delay(unsigned int xms)		
{
	unsigned char i, j;
  while(xms){
		i = 2;
		j = 239;
		do{
		   while(--j);
		}while(--i);
	  xms--;
	}
	
}
// 串口初始化
void UART_Init(){
		 SCON = 0X50;  // 接收数据
	   PCON |= 0X80;
	   TMOD &= 0X0F; // 设置定时器模式
	   TMOD |= 0X20; // 设置定时器模式
	   TL1 = 0XF3;   // 设置定时器的初始值
	   TH1 = 0XF3;   // 设置定时器的初始值
	   ET1 = 0;      // 禁止定时器1中断
	   TR1 = 1;      // 启动定时器1
	   EA = 1;       // 启动总中断
	   ES = 1;       // 启动串口中断
}

// 串口发送函数:发送一个字数据
void UART_SendByte(unsigned char Byte){
      SBUF = Byte;
      while(TI == 0){
			  

			}
			TI = 0;

}

串口波特率的计算补充

相关推荐
Jason_zhao_MR7 小时前
Linux与实时控制如何兼得
linux·嵌入式硬件·机器人·工业控制
BSD_CGQ8 小时前
FSR传感器STM32 DMA高速采样工程实现(高精度、低CPU占用)
stm32·单片机·嵌入式硬件·压力传感器·源头工厂·柔性薄膜压力传感器·可变电阻压力传感器
芯岭技术郦10 小时前
32 位 ARM® Cortex®-M0+ 内核MCU普冉MS32C001-C
单片机·嵌入式硬件
骑着毛驴数星星10 小时前
STM32 CAN波特率与采样点计算,基于HAL库
stm32·单片机·嵌入式硬件
zhangrelay11 小时前
Arduino-MEGA-ESP单片机理论课笔记02-硬件-2026
笔记·单片机·嵌入式硬件
艾芯微科技12 小时前
钰泰 ETA5055V330DD1E|SOT-223 3.3V LDO,低压差、大电流线性稳压选型分享
网络·单片机·嵌入式硬件·集成测试·51单片机
新晨单片机设计13 小时前
S023A-基于STM32单片机智能插座【Proteus仿真+Keil程序+原理图】
stm32·单片机·proteus·单片机智能插座
威嵌神州13 小时前
恩智浦 T1022 性能怎么样?QorIQ 架构中端工业嵌入式优势解析
嵌入式硬件
weixin_6906547413 小时前
龙迅#LT9611EX 现MIPI转HDMI1.4功能主推型号,分辨率高达4K30HZ,IC内置I2C无需外部12C控制。
嵌入式硬件·音视频·信号处理
EatFans13 小时前
全栈自造 Status Deck(四):硬件终于到了,从点亮屏幕到跑通第一个 Demo
单片机·物联网