电脑通过串口控制51单片机的LED

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

一、功能介绍

  1. 在电脑端的串口助手通过串口对51单片机发送一个字节的16进制数控制LED的亮灭
  2. 单片机通过串口将接收到的数据发送回电脑

二、串口通信的相关知识

1、51单片机的串口

  • 51单片机内部自带UARTUniversal Asynchronous Receiver Transmitter,通用异步收发器),可实现单片机的串口通信
  • STC89C52有1UART,有四种通信模式:模式0:同步移位寄存器、 模式18UART,波特率可变(常用)、模式29UART,波特率固定、 模式39UART,波特率可变

电脑通过串口控制51单片机的LED

  • HEX模式/十六进制模式/二进制模式:以原始数据的形式显示
  • 文本模式/字符模式:以原始数据编码后的形式显示
  • SBUF:串口数据缓存寄存器,物理上是两个独立的寄存器,但占用相同的地址。写操作时,写入的是发送寄存器,读操作时,读出的是接收寄存器
  • STC89C52的串口模式(简化版)

电脑通过串口控制51单片机的LED

  • 串行口数据缓存寄存器SBUF

电脑通过串口控制51单片机的LED

2、相关术语

  • 全双工:通信双方可以在同一时刻互相传输数据
  • 半双工:通信双方可以互相传输数据,但必须分时复用一根数据线
  • 单工:通信只能有一方发送到另一方,不能反向传输
  • 异步:通信双方各自约定通信速率
  • 同步:通信双方靠一根时钟线来约定通信速率
  • 总线:连接各个设备的数据传输线路(类似于一条马路,把路边各住户连接起来,使住户可以相互交流)

3、相关参数

  • 波特率:串口通信的速率(发送和接收各数据位的间隔时间)
  • 检验位:用于数据验证
  • 停止位:用于数据帧间隔

 电脑通过串口控制51单片机的LED

电脑通过串口控制51单片机的LED

三、程序设计 

1、UART初始化函数

1.1、实现功能

串口初始化,使定时器1工作在8位自动重装模式,允许串行接收状态,配置中断系统开启

1.2、设计原理

串行口控制寄存器SCON和PCON

电脑通过串口控制51单片机的LED

 电脑通过串口控制51单片机的LED

 配置SM0=0,SM1=1使定时器1工作在8位串行接收方式,REN = 1,使其允许串行接收状态

	SCON = 0x50;		//8位数据,可变波特率
	PCON |= 0x80;		//使能波特率倍速位SMOD

接下来配置定时器工作模式TMOD

电脑通过串口控制51单片机的LED

 电脑通过串口控制51单片机的LED

 配置高四位M1 = 1, M0 = 0,第四位为0000,使定时器1工作在8位自动重装模式

	TMOD = TMOD & 0x0F;    //高四位置零,低四位不变,清除定时器1模式位
	TMOD = TMOD | 0x20;    //设定定时器1为8位自动重装方式

 STC89C52的晶振频率为11.0592MHz,配置的PCON寄存器SMOD = 0, SMOD0 = 1,

电脑通过串口控制51单片机的LED

波特率=  11.0592MHZ * 1/16/12/12us = 4800  

计算出波特率为4800,通过串口助手生成定时器计数的初始值

	TL1 = 0xF4;		
	TH1 = 0xF4;		//设定定时器重装值

配置定时器控制寄存器,令TR1 = 1,允许计数;配置中断允许寄存器IE,令ET1 = 0禁止定时器1溢出中断,令EA = 1, ES = 1,允许串口中断 

	ET1 = 0;		//禁止定时器1中断
	TR1 = 1;		//启动定时器1
	EA = 1;			//配置中断开启
	ES = 1;

1.3、代码实现

/**
  * @brief 串口初始化,4800bps@11.0592MHz
  * @param  无
  * @retval  无  
  *         定时器1为8位自动重装模式,接收开启,配置中断系统开启
  */
UART_Init()				
{
	SCON = 0x50;		//8位数据,可变波特率
	PCON |= 0x80;		//使能波特率倍速位SMOD
	TMOD = TMOD & 0x0F;    //高四位置零,低四位不变,清除定时器1模式位
	TMOD = TMOD | 0x20;    //设定定时器1为8位自动重装方式
	TL1 = 0xF4;		
	TH1 = 0xF4;		//设定定时器重装值
	ET1 = 0;		//禁止定时器1中断
	TR1 = 1;		//启动定时器1
	EA = 1;			//配置中断开启
	ES = 1;
}

2、UART_SendByte函数

2.1、实现功能

串口向电脑发送一个字节数据

2.2、设计原理

将发送的数据读入缓存寄存器,判断发送完后立即将允许中断标志位复位

	SBUF = Byte;
	while(TI == 0);   //检测请求中断标志位为1时程序才继续
	TI = 0;			  //发送完毕后立即将标志位清0

2.3、代码实现

/**
  * @brief 串口向电脑发送一个字节数据
  * @param  发送的一字节数据 Byte 
  * @retval 无
  */

void UART_SendByte(unsigned char Byte)
{
	SBUF = Byte;
	while(TI == 0);   //检测请求中断标志位为1时程序才继续
	TI = 0;			  //发送完毕后立即将标志位清0
}

3、串口中断函数

3.1、实现功能

串口接收电脑发送的数据控制LED

3.2、设计原理

 检测到接收完毕的中断请求后执行从缓存区读取数据到P2,控制LED的亮灭,并立即将接收允许中断标志位复位

	if(RI == 1)       		//只检测到接收中断的时候执行
	{
		P2 = SBUF;    		//从缓存区读取数据
		UART_SendByte(P2);  //将接收到的数据从串口发送回电脑
		RI = 0; 			//接收完毕立即给接收标志位复位
	}

3.3、代码实现

void UART_Routine()   interrupt 4
{
	if(RI == 1)       		//只检测到接收中断的时候执行
	{
		P2 = SBUF;    		//从缓存区读取数据
		UART_SendByte(P2);  //将接收到的数据从串口发送回电脑
		RI = 0; 			//接收完毕立即给接收标志位复位
	}
}

4、主函数设计

4.1、实现功能

调用串口初始化,让程序一直执行不停止

4.2、代码实现

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

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

四、结果展示

发送数据和串口返回结果

 电脑通过串口控制51单片机的LED

LED亮灭情况

 电脑通过串口控制51单片机的LED

 对应0110 0110文章来源地址https://www.toymoban.com/news/detail-486733.html

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

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

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

相关文章

  • 51单片机开发:通过74HC595控制LED点阵

    (1)LED点阵就是多个LED发光二极管的集合,在单个LED的发光原理上没有任何区别; (2)上面是16x16的LED点阵,总共有16x16=256个LED灯,由32个引脚来控制,其中16个引脚是正极(posn,n=1、2······、16),16个引脚是负极(NEGn,n=1、2······、16); (3)LED点阵可以用坐标系的思想来理解,

    2024年02月12日
    浏览(36)
  • C51单片机——通过使用定时器控制LED闪灭

    目录 0 引言 1 定时的原理 1.1 生活中的定时 1.2单片机中的定时器 2 C语言程序设计 2.1 定时器的内部功能 2.2 设置寄存器 2.3 实验程序 3 有两个小问题(算是延伸吧) 3.1 只能0.05s闪一次吗? 3.2 每次都要在草稿纸手算初始值好麻烦

    2024年02月06日
    浏览(59)
  • Proteus基于51单片机通过PWM脉冲调制控制电机转速_按键与串口控制转速_电机转速可测

    临近期末,学校的单片机课程需要做课程设计,主要内容是基于51单片机的可调速电机,具体要求如下,在此记录一下具体的一个解题方案。 要求利用单片机输出PWM波形,通过改变占空比,改变电枢两端电压的平均值,从而改变电动机的转速 通过按键进行手动速度调整(速度

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

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

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

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

    2023年04月18日
    浏览(38)
  • 51单片机:独立按键控制LED灯

    1. 独立按键控制LED灯状态          亮灭实验完成后,就可以控制LED状态,首先我们知道由于机械结构的弹性作用,按键开关在闭合时不会一瞬间稳定的接通,在断开时,也不会一下子断开。所以就得需要程序消抖,也就是适当延时,程序如下 #include\\\"reg52.h\\\" //定义LED灯 sbit

    2023年04月09日
    浏览(29)
  • 51单片机(三)独立按键控制LED

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

    2024年02月08日
    浏览(27)
  • 如何使用单片机点亮LED灯,并使用按键控制[51单片机]

    首先先看一下我的板子,如果我们板子不相同,可能操作也不太相同 我们就不讲底层原理了,直接看,我们可以看到板子上有 8个LED灯   那这个8个LED用什么来控制呢,我们先看底层的线路图,所有的LEDD都连接到了P2带后缀的接口上, 那么只需要操作这几个接口的高低电频,

    2024年02月05日
    浏览(32)
  • 51单片机串口的应用(单片机和电脑互发数据)

    现在来详细看一下寄存器,我们直接查看单片机手册。 SCON寄存器 先来说说SCON寄存器。 前一节我们提过,我们一般使用串口用的是模式1,即8位UART,这样我们就用不到校验位。从手册中可以看到,寄存器SCON中的SM0和SM1配置成01即可。 SM2寄存器明显用不到,因为我们没有用模

    2024年02月07日
    浏览(35)
  • 基于51单片机的51单片机的LED彩灯霓虹灯控制器(心形流水灯)设计

    基于51单片机的51单片机的LED彩灯霓虹灯控制器(心形流水灯)设计 必看!!视频讲解 基于51单片机的LED彩灯霓虹灯心形流水灯设计 仿真图:proteus8.9以上 程序代码:KEIL4/KEIL5 原理图:AD 设计编号:A0005 结合实际情况,基于51单片机设计一个LED彩灯控制器设计。该系统应满足的功能要

    2024年02月02日
    浏览(34)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包