首页 > 其他分享 >12_串口通信

12_串口通信

时间:2023-11-19 13:56:54浏览次数:49  
标签:P2 __ 12 UART void 通信 串口 include

串口通信

串口介绍

image-20231109173147287

接口及引脚定义

image-20231109173843709

硬件电路

image-20231109174104169

电平标准

image-20231109174338867

常见通信接口比较

image-20231109175520844

相关术语

image-20231109180050130

51单片机的UART

image-20231109180721754

串口参数及时序图

image-20231109180811515

串口模式图

image-20231110154334107

串口和中断系统

image-20231110154922440

串口相关寄存器

image-20231110160412990

单片机每隔一秒向电脑发送数据

UART.c

#include <REGX52.H>

/**
  * @brief 串口初始化
  * @param 无
  * @retval 无
  */
void UART_Init()		//[email protected]
{
	PCON |= 0x80;		//使能波特率倍速位SMOD
	SCON = 0x40;		//8位数据,可变波特率
	TMOD &= 0x0F;		//设置定时器模式
	TMOD |= 0x20;		//设置定时器模式
	TL1 = 0xF4;			//设置定时初始值
	TH1 = 0xF4;			//设置定时重载值
	ET1 = 0;			//禁止定时器中断
	TR1 = 1;			//定时器1开始计时
}

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

UART.h

#ifndef __UART_H__
#define __UART_H__

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

#endif

main.c

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

unsigned char Sec;

void main()
{
	UART_Init();
	
	while(1)
	{
		UART_SendByte(Sec++);
		Delay(1000);
	}
}

Delay.c

void Delay(unsigned int xms)	//@12.000MHz
{
	unsigned char data i, j;
	
	while(xms--)
	{
		i = 2;
		j = 239;
		do
		{
			while (--j);
		} while (--i);
	}
}

Delay.h

#ifndef __DELAY_H__
#define __DELAY_H__

void Delay(unsigned int xms);
	
#endif

运行效果

stc-isp-v6.92E_ABmkvwSJ4F

使用发送数据控制LED

UART.c

#include <REGX52.H>

/**
  * @brief 串口初始化
  * @param 无
  * @retval 无
  */
void UART_Init()		//[email protected]
{
	PCON |= 0x80;		//使能波特率倍速位SMOD
	SCON = 0x50;		//8位数据,可变波特率
	TMOD &= 0x0F;		//设置定时器模式
	TMOD |= 0x20;		//设置定时器模式
	TL1 = 0xF4;			//设置定时初始值
	TH1 = 0xF4;			//设置定时重载值
	ET1 = 0;			//禁止定时器中断
	TR1 = 1;			//定时器1开始计时
	EA=1;				//CPU开放中断
	ES=1;				//允许串口中断
}

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

UART.h

#ifndef __UART_H__
#define __UART_H__

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

#endif

ChangeLED.c

#include <REGX52.H>

void ChangeLED()
{
	bit t;
	t=P2_0;
	P2_0=P2_7;
	P2_7=t;
	t=P2_1;
	P2_1=P2_6;
	P2_6=t;
	t=P2_2;
	P2_2=P2_5;
	P2_5=t;
	t=P2_3;
	P2_3=P2_4;
	P2_4=t;
}

ChangeLED.h

#ifndef __CHANGELED_H__
#define __CHANGELED_H__

void ChangeLED();

#endif

main.c

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

void main()
{
	UART_Init();
	while(1)
	{
		
	}
}

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

运行效果

image-20231110175301662

image-20231110175349935

数据显示模式

image-20231110175954229

image-20231110180623766

标签:P2,__,12,UART,void,通信,串口,include
From: https://www.cnblogs.com/mzx233/p/17841970.html

相关文章

  • 2023-2024-1 20232312 《网络空间安全导论》第二周学习
    2023-2024-120232312《网络空间安全导论》第二周学习教材学习内容总结密码由来已久单钥密码体制和双钥密码体制密码分析的方法密码的(数学)理论基础密码学的新进展(各种加密)教材学习中的问题和解决过程问题1:密码加密解密原理的理解-解决方案:研读书本例子,自......
  • P2240 【深基12.例1】部分背包问题(C/C++)
    P2240【深基12.例1】部分背包问题先把物品按照单位重量的价值降序排序,然后依次装入背包。如果背包容量不小于当前要装的物品重量,就全部装入,如果小于,那就剩余多少容量就装多少容量的当前物品。#include<bits/stdc++.h>usingnamespacestd;structjinbi{ doublem; doublev;......
  • 成都单片机开发:改造CH340 USB转串口线使之适合3.3V单片机的方法
    本文介绍一种改造CH340USB转串口线使之适合3.3V单片机的方法。一、 存在的问题USB串口线是常见的用于电脑与单片机之间进行通信的设备。现在市面上常见的USB转串口线有CH340串口线。这种串口线是电脑的USB口供电的,电脑的USB输出的电源一般是5V的,那么USB信号转换出来的串口电平一......
  • P3412 仓鼠找sugar II 题解
    P3412仓鼠找sugarII题解大水题一个题目大意给定你一个树,设\(f_{u,v}\)表示在树上随机游走的情况下从\(u\)走到\(v\)的期望步数,求\(\displaystyle\frac{\sum_{i=1}^n\sum_{j=1}^nf_{i,j}}{n^2}\)。题解不难想到dp,不过\(1e5\)的范围差点让我怀疑我\(O(n......
  • 菜单点菜2-5次以及期中考试分析-21207310姜昊
    本次分析菜单2-4,以及期中考试题目,总体来说题目有一定难度,但仍可完成,主要从菜单1过度到2,3时要确定好方向,否则会产生一些无法解决的问题7-4菜单计价程序-2分数:38输入样例:在这里给出一组输入。例如:麻婆豆腐12油淋生菜91麻婆豆腐222油淋生菜13end输出样例:在这......
  • 囚徒4.0_12
    #囚徒4.0_12importnumpyasnpdefAND(x1,x2):x=np.array([x1,x2])w=np.array([0.5,0.5])b=-0.7temp=np.sum(x*w)+biftemp>0:return1else:return0defOR(x1,x2):x=np.array([x1,x2])w=np.array([1,1])b=-0.5temp=np.sum(x*w)+biftemp>0:return1e......
  • 囚徒4.1_12_数值微分近似
    数值微分近似#囚徒4.0_13_数值微分近似importnumpyasnpimportmatplotlib.pylabasplt#求数值微分导数defnumerical_diff(f,x):h=1e-4#0.0001return(f(x+h)-f(x-h))/(2*h)#函数deffunction_1(x):return0.01*x**2+0.1*xdeftangent_line(f,x):d......
  • 21207106-xuesong
    菜单系列题及期中总结一、前言这次博客是主要对菜单系列题目和期中题目总结,菜单系列题目包括菜单计价程序-3、菜单计价程序-4、菜单计价程序-5,菜单系列题目,主要是考察对类的创建,怎么设计合适的类,类与类之间的关系,考察了封装,继承,依赖等。其次是考察对正则表达式判断输入格......
  • VirtualBox安装Debian12
    下载地址:VirtualBox7.0官网:https://www.virtualbox.org/wiki/DownloadsDebian12官网:https://www.debian.org/index.zh-cn.html安装打开VirtualBox,点击新建,根据提示安装。安装时网络不佳建议断网,避免更新下载耗时太久。使用putty/xshell连接服务器,需要设置网络为桥......
  • 前端学习笔记学习笔记第七十柒天-webpack源码分析12
             ......