【51单片机】串口通信&&使用串口通信控制LED灯

这篇具有很好参考价值的文章主要介绍了【51单片机】串口通信&&使用串口通信控制LED灯。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

🎊专栏【51单片机】

🍔喜欢的诗句:更喜岷山千里雪 三军过后尽开颜。

🎆音乐分享【Promise】

🥰大一同学小吉,欢迎并且感谢大家指出我的问题🥰

目录

🍔串口通信

😎代码 

 🍔串口初始化

⭐分析 

🏳️‍🌈确定T1的工作方式

🎈TMOD=0X20; 

🏳️‍🌈确定T1的初值

🎈TH1=0XF3;  TL1=0XF3;

🏳️‍🌈波特率加倍(操作SMOD)

🎈PCON=0X80;

🏳️‍🌈启动T1 

🎈TR1=1

🏳️‍🌈确定串行口控制(编程SCON寄存器)

🎈SCON=0x50

🏳️‍🌈打开中断 

🎈ES=1;  EA=1 

🍔中断分析

🍔串口通信控制LED灯

😎效果

😎代码


 文章来源地址https://www.toymoban.com/news/detail-582537.html

🍔串口通信

用串口通信控制led灯,51单片机,c语言,开发语言,单片机,51单片机

😎代码 

#include "reg52.h"			 //此文件中定义了单片机的一些特殊功能寄存器

typedef unsigned int u16;	  //对数据类型进行声明定义
typedef unsigned char u8;


void UsartInit()
{
	SCON=0X50;			//设置为工作方式1      
	TMOD=0X20;			//设置计数器工作方式2
	PCON=0X80;			//波特率加倍
	TH1=0XF3;				//计数器初始值设置,注意波特率是4800的
	TL1=0XF3;
	ES=1;						//打开接收中断
	EA=1;						//打开总中断
	TR1=1;					//打开计数器
}

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

void Usart() interrupt 4
{
	u8 receiveData;

	receiveData=SBUF;    //出去接收到的数据
	RI = 0;            //清除接收中断标志位
	SBUF=receiveData;    //将接收到的数据放入到发送寄存器
	while(!TI);			 //等待发送数据完成
	TI=0;						 //清除发送完成标志位
}

 🍔串口初始化

void UsartInit()
{
    SCON=0X50;            //设置为工作方式1      看视频P62  4:30
    TMOD=0X20;            //设置计数器工作方式2
    PCON=0X80;            //波特率加倍
    TH1=0XF3;                //计数器初始值设置,注意波特率是4800的
    TL1=0XF3;
    ES=1;                        //打开接收中断
    EA=1;                        //打开总中断
    TR1=1;                    //打开计数器
}

⭐分析 

🏳️‍🌈确定T1的工作方式

🎈TMOD=0X20; 


为什么是20

用串口通信控制led灯,51单片机,c语言,开发语言,单片机,51单片机

 用串口通信控制led灯,51单片机,c语言,开发语言,单片机,51单片机

 M1 M0 这两位控制的是工作方式,是方式2,M1 M0 是10

对应到前面就是0010,那么高四位对应的就是2


🏳️‍🌈确定T1的初值

🎈TH1=0XF3;  TL1=0XF3;

根据下面的软件,设置 TH1 TL1

用串口通信控制led灯,51单片机,c语言,开发语言,单片机,51单片机

 通过上图,可以读出是F3H

那么 TH1=0XF3;  TL1=0XF3;


🏳️‍🌈波特率加倍(操作SMOD)

🎈PCON=0X80;

用串口通信控制led灯,51单片机,c语言,开发语言,单片机,51单片机

 通过上图,发现SMOD是在PCON这个寄存器里面,

由于SMOD在最高位,二进制中最高位一般表示符号位,所以SMOD不能进行位操作

所以要对这整个寄存器进行操作,

由于SMOD=0,波特率不加倍,否则加倍

所以设置PCON=0X80;就是1000 0000 相当于对SMOD进行操作


🏳️‍🌈启动T1 

🎈TR1=1

就是编程TCON的TR1位,打开计数器


🏳️‍🌈确定串行口控制(编程SCON寄存器)

🎈SCON=0x50

为什么是5

我们选择方式1,那么波特率就是可变的,

由图可知,方式1的SM0=0 SM1=1

SM2我们设置为0

REN,是允许串行接收位,我们设置为1

用串口通信控制led灯,51单片机,c语言,开发语言,单片机,51单片机

用串口通信控制led灯,51单片机,c语言,开发语言,单片机,51单片机​ 

由下图可知,后四位都是0

用串口通信控制led灯,51单片机,c语言,开发语言,单片机,51单片机

⭐⭐⭐所以高四位是5,所以是0x50 


🏳️‍🌈打开中断 

🎈ES=1;  EA=1 

ES=1;          串口中断
EA=1;         打开总中断


🍔中断分析

void Usart() interrupt 4
{
    u8 receiveData;

    receiveData=SBUF;    //出去接收到的数据
    RI = 0;            //清除接收中断标志位
    SBUF=receiveData;    //将接收到的数据放入到发送寄存器
    while(!TI);             //等待发送数据完成
    TI=0;                         //清除发送完成标志位
}

使用SBUF寄存器来存储数据

为什么要RI=0 TI=0

用串口通信控制led灯,51单片机,c语言,开发语言,单片机,51单片机

 清零后,等待下一次的接收

发射完成后,TI为1,那么 !TI为0,就会跳出while循环

假设发射没有完成,那么TI为0,就不会跳出while循环

🍔串口通信控制LED灯

😎效果

串口通信控制LED灯

😎代码

#include "reg52.h"			 //此文件中定义了单片机的一些特殊功能寄存器

typedef unsigned int u16;	  //对数据类型进行声明定义
typedef unsigned char u8;


void UsartInit()
{
	SCON=0X50;			//设置为工作方式1      
	TMOD=0X20;			//设置计数器工作方式2
	PCON=0X80;			//波特率加倍
	TH1=0XF3;				//计数器初始值设置,注意波特率是4800的
	TL1=0XF3;
	ES=1;						//打开接收中断
	EA=1;						//打开总中断
	TR1=1;					//打开计数器
}


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

void UART_SendByte(unsigned char Byte)
{
	SBUF = Byte;
	while (!TI);
	TI = 0;
}

void Usart() interrupt 4
{

	if (RI == 1)					//如果接收标志位为1,接收到了数据
	{
		P2 = ~SBUF;				//读取数据,取反后输出到LED
		UART_SendByte(SBUF);	//将受到的数据发回串口
		RI = 0;					//接收标志位清0
	}
	
}

🥰如果大家有不明白的地方,或者文章有问题,欢迎大家在评论区讨论,指正🥰 

 

到了这里,关于【51单片机】串口通信&&使用串口通信控制LED灯的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [物联网工程]基于Protues仿真平台的C51/2单片机蓝牙串口通信控制继电器实验

    目录 实验目的 实验内容 仿真部分 实战部分 环境搭建 软件下载 仿真实验过程 模拟电路仿真 打开Proteus并创建新项目 绘制仿真电路图 程序实现 程序编写 程序导入 运行仿真 真实设备实战 硬件连接 程序实现 程序编写 程序导入 运行验证 总结拓展 掌握AT89C51蓝牙通信的工作原

    2024年03月20日
    浏览(49)
  • 51单片机串口通信的原理及使用方法(附串口收发数据例程代码)

    温馨提示:本篇文章详细介绍了串口的原理及使用方法,涉及的内容较多,但也较为全面,学者若想充分掌握串口通信的原理和具体使用方法(部分限于51单片机),请静下心来将其读完,相信一定会受益匪浅!而且对32单片机的串口学习也有非常好的辅助! 一.串行通信的原

    2024年02月09日
    浏览(35)
  • 51单片机-串口通信

    目录 1.什么是通信 1.1.通信的概念 1.2.传送方式 1.3.同步方式 1.4.传送方向 1.5.校验方式 2.单片机串口介绍 2.1.硬件电路 2.2.电平标准 2.3.常见接口 2.4.内部结构 2.5.相关寄存器 2.6.工作模式(模式1) 2.7.如何配置串口中断 3.实际应用 3.1.单片机向电脑发送数据 3.2.电脑向单片机发送

    2024年02月01日
    浏览(40)
  • 51单片机串口通信

    串口通信(serial communication)是指外设和计算机间通过数据信号线、地线等按位进行传输数据的一种通信方式,属于串行通信方式。 接口标准:常用RS-232和RS-485 RS-232C有一种9针的非标准连接器口,简称DB9。串口通信使用的大多都是DB9接口。在串口通信中,通常我们只使用2、

    2024年02月05日
    浏览(41)
  • 51单片机 | 串口通信实验

      这一节我们就来学习 51 单片机的串口通信。开发板上集成了 1 个串口通信电路,是 USB 转串口模块,它既可下载程序也可实现串口通信功能。本节要实现的功能是: 51 单片机通过串口( UART )实现与 PC 机对话, 51 单片机的串口收到 PC 机发来的数据后原封不动的返回给

    2024年02月04日
    浏览(56)
  • 51单片机学习--串口通信

    首先需要配置寄存器: 下面这里SCON配0x40和0x50都可以,因为暂时还不需要接受信息,所以REN置1置0都可 在main中调用SendByte函数,每按下一次复位键,接收缓冲区就会收到一个11 这就是单向发送的一个简单实例,接下来实现每隔一秒发送一个递增的数据,只需要添加一个全局变

    2024年02月14日
    浏览(38)
  • 51单片机(八)串口通信

    ❤️ 专栏简介:本专栏记录了从零学习单片机的过程,其中包括51单片机和STM32单片机两部分;建议先学习51单片机,其是STM32等高级单片机的基础;这样再学习STM32时才能融会贯通。 ☀️ 专栏适用人群 :适用于想要从零基础开始学习入门单片机,且有一定C语言基础的的童鞋

    2024年02月05日
    浏览(43)
  • 51单片机(串口通信、蓝牙)

    串行接口简称串口,也称 串行通信接口 或串行通讯接口(通常指COM接口),是采用串行通信方 式的扩展接口。串行接口(Serial Interface)是指 数据一位一位地顺序传送。 其特点是通信线路简 单,只要一对传输线就可以实现 双向通信( 可以直接利用电话线作为传输线),从

    2024年02月15日
    浏览(33)
  • 51单片机按键控制LED亮灭

    通过单片机按键控制LED亮灭与传统电路的物理逻辑不同,在物理逻辑中开关控制电路的通断来控制LED的亮灭,而通过单片机完成该项目至于要不断地读取按键所连接IO口的电平来判断对LED连接的IO口输出的电平即可。 原理图如下:  根据原理图,我们可以发现按键按下时P2.1口

    2023年04月18日
    浏览(43)
  • 51单片机-按键控制led灯

    1.开发环境介绍 使用C语言,环境为keil Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用. 什么是单片机 单片机(Single-Chip Microcomputer)是一种集成电路芯片,把具

    2024年02月09日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包