当前位置: 首页 > news >正文

从玩具到工业控制--51单片机的跨界传奇【3】

在科技的浩瀚宇宙中,51 单片机就像一颗独特的星辰,散发着神秘而迷人的光芒。对于无数电子爱好者而言,点亮 51 单片机上的第一颗 LED 灯,不仅仅是一次简单的操作,更像是开启了一扇通往新世界的大门。这小小的 LED 灯,宛如黑暗中的启明星,承载着我们对电子技术的好奇与憧憬,照亮了我们探索科技未知领域的道路 。在接下来的篇章里,让我们一同回溯这段充满挑战与惊喜的旅程,看看这颗 LED 灯如何点燃了我们心中对技术追求的熊熊烈火。

一,单片机的内部结构和工作原理

在单片机入门阶段,我们只需要对其结构有个大概的了解就足够了,等后期随着单片机的深入学习,我们再回头来对其结构进行深入的了解。我在这里也是给大家进行简单的讲解,不会太过深入,防止大家失去学习的信心。如图所示:

FLASH就相当于硬盘SRAM就相当于内存。对于硬盘和内存的概念我就默认大家熟知了,不懂的朋友们可以自行搜索一下这个视频 <内存和硬盘的区别>进行了解。前面,咱们讲过单片机就是一种集成电路,其实在单片机的内部就是如上图所示的结构。单片机内核就是CPU处理器我们写的程序最终被存放在FLASH程序存储器里面我们创建的变量被存储在SRAM数据存储器里面。当单片机开始运行的时候,单片机就会从FLASH程序存储器里面调取运行指令,这里告诉大家:FLASH程序存储器是只读存储器,在单片机运行的过程中,产生的一切数据不会再放入FLASH里面,而是存放在数据存储器里面,就是为了防止程序发生错误,引起单片机的工作异常CPU会根据指令进行运算,会从数据存储器里面调用数据。数据存储器就是CPU用来调取和存放数据,存放中间计算结果的地方SRAM掉电就会丢失数据,所以为了防止这种情况的发生,一般都会配有看门狗来进行监管,当看门狗检测到电压低于某一个范围时,就会立马读取SRAM里面的数据进行存储。然后,CPU把计算的数据再发送给寄存器(GPIO外设),寄存器根据数据再输出1或0,各个引脚再根据1或0输出对应的高低电平,来控制外围设备,读取外部数据也是如此,通过引脚的高低电平变化,寄存器来进行的1或0的数据存储,再发给CPU根据指令进行处理我们操作单片机,其实本质上就是操作各个引脚对应的寄存器。大家进行简单的了解即可。

二,单片机的引脚介绍

我们就以我们要讲解的DIP封装的51单片机来展示其它封装的单片机会多出来4个引脚,多出来的引脚时P4口引脚,这不影响我们的单片机的讲解。如图所示:

 我们从外观上可以看到上面,有个半圆的缺口。在所以的单片机里面,半圆缺口左边对应单片机的第一号引脚,逆时针依次排号。

20号引脚和40号引脚分别为单片机的GND和VCC

51单片机有4组I/O,分别为P0,P1,P2和P3,每组对用8个引脚,也就是说,我们控制这32个引脚来进行外围设备的控制。大家可以看到有些引脚会有个表示,比如T2/P1.0,带有‘ / ’表示这个引脚的功能是可以复用的,也就是说这个引脚有两个功能。没标识的引脚就是普通的I/O口。

T2,T0,T1这些为定时器或计数器引脚(后面会讲解的)。

RXD和TXD为单片机的串口通信引脚,也是我们的程序下载引脚。

INT0和INT1为外部中断引脚。

XTAL1和XTAL2为单片机的外部晶振引脚。

WR(写信号)和 RD(读信号)引脚主要用于外部数据存储器(如 RAM)和 I/O 接口芯片的读写控制。它们是实现单片机与外部设备之间数据传输的关键信号引脚。

EA 引脚用于控制单片机是访问内部程序存储器还是外部程序存储器。这是 51 单片机程序存储选择的关键引脚,当 EA 引脚接高电平时,单片机先从内部程序存储器读取程序指令。如果程序计数器(PC)的值超过了内部程序存储器的容量范围(对于 8051 单片机,内部程序存储器一般为 4KB),那么它会自动转向外部程序存储器读取剩余的程序指令。当 EA 引脚接低电平时,单片机忽略内部程序存储器,直接从外部程序存储器读取所有的程序指令。这种方式适用于程序代码量较大,需要外部扩展大容量程序存储器(如 EPROM、Flash 等)的情况。由于现在我们的单片机都有内部的ROM所以我们不需要读取外部ROM,所以我们直接接高电平就OK了。

ALE 引脚主要用于在访问外部存储器时,锁存低 8 位地址信号。在 51 单片机访问外部存储器(包括数据存储器和程序存储器)的过程中,地址总线是分时复用的,它既用于传输地址信息又用于传输数据信息。当单片机访问外部存储器时,P0 口会先输出低 8 位地址信息,此时 ALE 引脚会输出一个正脉冲。这个正脉冲可以被外部的地址锁存器(如 74LS373)用来锁存 P0 口输出的低 8 位地址,使得地址信息在数据传输阶段能够保持稳定。现在,单片机内部都自带丰富的RAM,不再需要扩展RAM,所以这个引脚用处不大。

PSEN 引脚是程序存储器读选通信号,用于控制对外部程序存储器的读取操作。它是单片机从外部程序存储器读取指令时的关键控制信号。当单片机从外部程序存储器读取指令时,PSEN 引脚会输出一个低电平脉冲。这个低电平信号用于选通外部程序存储器,使其将存储的程序指令输出到数据总线上,然后单片机就可以从数据总线上读取这些指令并执行。

P0口比较特殊,它要接上拉电阻才能驱动,至于什么是上拉电阻? 它是怎样的电路? 我们都会在数码管那个章节讲到的。

总结:以上引脚大家先做了解就足够了,后面学习到的时候,我都会进行详细的讲解的。

三,最小系统单片机的电路介绍

最小的单片机系统是由电源,主控芯片,晶振电路和复位电路组成的。先给大家看电路图:

 复位电路的作用:

  • 系统初始化
    • 复位电路的主要作用是使单片机内部的各个寄存器和电路恢复到初始状态。当单片机复位时,程序计数器(PC)被清零,这意味着单片机从程序存储器的起始地址(对于 51 单片机来说,一般是 0000H)开始执行程序。同时,其他特殊功能寄存器(SFR),如累加器 A、寄存器 B、PSW(程序状态字)等也会被初始化为固定的值。
    • 例如,PSW 寄存器在复位后被设置为 00H,这使得单片机进入初始的工作状态,如默认选择工作寄存器组 0。这种初始化功能确保了每次单片机上电或者手动复位后,系统都能以一个确定的、一致的状态开始运行,就像将系统进行了一次 “归零” 操作。
  • 解决程序异常情况
    • 比如,在一个工业控制环境中,周围可能存在较强的电磁干扰。当干扰导致单片机程序出错时,按下复位按钮,复位电路就能让单片机重新启动,避免了设备长时间故障,保障了系统的可靠性和稳定性。
    • 在单片机运行过程中,可能会由于干扰、程序错误或者其他突发情况导致系统出现异常。例如,程序进入了死循环,或者数据被错误地修改,导致系统无法正常工作。此时,复位电路可以通过外部复位信号(如手动复位按键)使单片机重新复位,恢复到正常的工作状态。

晶振电路的作用:

  • 提供时钟信号
    • 晶振电路为单片机提供了稳定的时钟信号。51 单片机内部的各种操作,如指令执行、数据传输、定时器 / 计数器工作等,都需要时钟信号来进行同步。时钟信号就像是单片机的 “心跳”,它决定了单片机的工作速度和时序。
    • 例如,51 单片机的一个机器周期是由 12 个时钟周期组成的。晶振频率的高低直接影响了单片机的机器周期时间。如果晶振频率为 12MHz,那么一个机器周期就是 1 微秒()。这种精确的时钟信号使得单片机能够按照设计好的时序和速度来执行程序指令。
  • 保证系统时序稳定
    • 单片机在与外部设备通信或者进行内部模块之间的协同工作时,需要严格的时序控制。晶振电路提供的稳定时钟信号是保证这些时序的基础。
    • 例如,在使用 51 单片机的定时器 / 计数器功能时,定时器的计数频率是由晶振频率经过内部时钟分频电路得到的。如果晶振频率不稳定,定时器的定时精度就会受到影响,进而导致与定时器相关的功能(如定时采样、定时控制等)出现错误。稳定的晶振电路可以确保这些功能的准确性和可靠性。

四,成为“点灯大师”

讲解了那么多的单片机的基础知识了,也该进行实操了。今天,咱们就来点亮人生中的第一颗LED灯。在点灯之前,咱先认识一下LED电路。

大家知道,我们能控制单片机的引脚输出高低电平 ,给引脚为逻辑1,它就会输出高电平,给0就会输出低电平。上图的LED灯是共阳极的,它的正极都接在一起,8颗LED灯分别与单片机的P1口接在一起,每一个引脚对应一颗LED灯。当我们给0时,就会输出低电平,LED就会正向的导通,LED就会亮,反之就灭。我们使用的时STC国产宏晶提供的芯片安装包,接下来我教大家怎么安装STC提供的芯片安装包,我们需要先下载好stc-isp烧录软件,这个文件我放在文章顶部了,各位可以自行下载。进行如下操作:

OK各位,接下来进行代码演示:

#include <STC89C5xRC.H>
void main()
{P10=0;      //STC的头文件里面,我们可以直接进行I/O的操作
}

进行头文件的展示: 

 各位至于Keil5怎么使用,怎么下载我就不再这多讲了,大家可以自行搜索相关视频。接下里看实验现象:

相关文章:

从玩具到工业控制--51单片机的跨界传奇【3】

在科技的浩瀚宇宙中&#xff0c;51 单片机就像一颗独特的星辰&#xff0c;散发着神秘而迷人的光芒。对于无数电子爱好者而言&#xff0c;点亮 51 单片机上的第一颗 LED 灯&#xff0c;不仅仅是一次简单的操作&#xff0c;更像是开启了一扇通往新世界的大门。这小小的 LED 灯&am…...

基于机器学习的用户健康风险分类及预测分析

完整源码项目包获取→点击文章末尾名片&#xff01; 背景描述 在这个日益注重健康与体能的时代&#xff0c;健身已成为许多人追求健康生活的重要组成部分。 本数据集包含若干健身房会员的详细信息&#xff0c;包括年龄、性别、体重、身高、心率、锻炼类型、身体脂肪比例等多项关…...

CF 641A.Little Artem and Grasshopper(Java实现)

题目分析 蚂蚱会在n个房间中根据既定房间规则向固定方向跳跃固定长度&#xff0c;试问是否能够跳出这个长度&#xff08;即落点位置在0或n1&#xff09; 思路分析 输入n就有n个房间&#xff0c;n套规则&#xff08;固定方向和跳跃距离&#xff09;&#xff0c;蚂蚱到哪个房间就…...

5 分钟复刻你的声音,一键实现 GPT-Sovits 模型部署

想象一下&#xff0c;只需简单几步操作&#xff0c;就能生成逼真的语音效果&#xff0c;无论是为客户服务还是为游戏角色配音&#xff0c;都能轻松实现。GPT-Sovits 模型&#xff0c;其高效的语音生成能力为实现自然、流畅的语音交互提供了强有力的技术支持。本文将详细介绍如何…...

1.Spring AI 从入门到实践

​Spring AI 从入门到实践 1.什么是Spring AI 2.使用Spring Boot&Spring AI快速构建AI应用程序 3.ChatClient&Chat Model简化与AI模型的交互 4.Spring AI Prompt:与大模型进行有效沟通 5.结构化输出大模型响应 6.实战:AI聊天机器人 Ben技术站关注Java技术&#x…...

第23篇 基于ARM A9处理器用汇编语言实现中断<五>

Q&#xff1a;怎样修改HPS Timer 0定时器产生的中断周期&#xff1f; A&#xff1a;在上一期实验的基础上&#xff0c;可以修改按键中断服务程序&#xff0c;实现红色LED上的计数值递增的速率&#xff0c;主程序和其余代码文件不用修改。 实现以下功能&#xff1a;按下KEY0…...

攻防世界 unseping

开启场景 整体来说是创建了一个case类&#xff0c;然后可接受post传来的ctf的值&#xff0c;并对其进行base64解码以及反序列化。所以我们能控制ctf变量。 先看__wakeup方法&#xff0c;该方法使用waf方法对$arg中的内容进行了防护&#xff0c;过滤掉了| & ; 空格 / cat f…...

Python编程与在线医疗平台数据挖掘与数据应用交互性研究

一、引言 1.1 研究背景与意义 在互联网技术飞速发展的当下,在线医疗平台如雨后春笋般涌现,为人们的就医方式带来了重大变革。这些平台打破了传统医疗服务在时间和空间上的限制,使患者能够更加便捷地获取医疗资源。据相关报告显示,中国基于互联网的医疗保健行业已进入新的…...

浔川 AI 翻译已修复,可正常使用

浔川 AI 翻译已修复&#xff0c;可正常使用 亲爱的用户们&#xff1a; 大家好&#xff01;经过技术团队的不懈努力&#xff0c;浔川 AI 翻译平台已完成修复&#xff0c;目前各项功能均已恢复正常&#xff0c;可流畅使用。在此&#xff0c;我们向一直以来关心和支持浔川 AI 翻译…...

apidoc thinkphp likeadmin 遇到解析报错

报错: [Semantical Error] The annotation "notes" in method app\adminapi\controller\article\ArticleCateController::lists() was never imported. Did you maybe forget to add a "use" statement for this annotation? 解决办法: config/apidoc…...

第22篇 基于ARM A9处理器用汇编语言实现中断<四>

Q&#xff1a;怎样编写ARM A9处理器汇编语言代码配置使用按键和定时器中断&#xff1f; A&#xff1a;本次实验同样为中断模式和监督模式都设置ARM A9堆栈指针&#xff0c;并使能中断&#xff0c;此外在主程序中调用子程序CONFIG_HPS_TIMER和CONFIG_KEYS分别对HPS Timer 0&…...

重回C语言之老兵重装上阵(六)枚举

1. 什么是枚举 (enum)&#xff1f; 枚举&#xff08;enum&#xff09;是 C 语言中的一种数据类型&#xff0c;用于定义一组具名的整数常量。它可以使代码更加可读&#xff0c;帮助程序员更容易理解程序中的常量值。通过枚举&#xff0c;程序员可以使用有意义的名称来代替数字&…...

STL-list类

list的介绍和使用 list的介绍 list的介绍list的介绍 list是双向循环链表 list的使用 构造 list(size_t n,const value_type& val value_type())构造的list中包含n个值为val的元素list()构造空listlis(const list& x)拷贝构造函数list(inputlerator first,inputlter…...

Hanlp的学习

参考&#xff1a;HanLP 自然语言处理使用总结-CSDN博客 参考&#xff1a;Sprint Boot 工程中HanLP配置相对路径&#xff0c;始终有问题的解决方案_springboot hanlp-CSDN博客 <!--hanlp 依赖--><dependency><groupId>com.hankcs</groupId><artifa…...

Excel中函数SIGN()的用法

Excel中函数SIGN的用法 1. 函数详细讲解1.1 函数解释1.2 使用格式1.3 参数定义1.4 要点 2. 实用演示示例2.1 函数需求2.2 公式编写 3. 注意事项4. 文档下载5. 其他文章6. 获取全部Excel练习素材快来试试吧&#x1f970; 函数练习素材&#x1f448;点击即可进行下载操作操作注意…...

如何将本地电脑上的文件夹设置为和服务器的共享文件夹

将本地电脑上的文件夹设为与服务器共享的文件夹&#xff0c;通常是在本地开启文件共享&#xff0c;并配置相应的权限&#xff0c;使服务器可以访问该文件夹。以下以 Windows 系统为例说明具体操作步骤&#xff1a; 一、在本地电脑上设置共享文件夹 选择文件夹 找到需要共享的文…...

智能建筑时代的核心选择——基于SAIL-RK3576核心板的AI边缘计算网关方案

随着智能建筑技术的不断发展&#xff0c;建筑设备正日益向“智慧化”迈进。传统的建筑管理系统往往依赖中央服务器和云端平台进行数据处理和控制&#xff0c;但在实时监控、安防及能耗管理等关键环节&#xff0c;延迟和数据安全问题依然存在。此外&#xff0c;物联网设备数量激…...

08、如何预防SQL注入

目录 1、分析及其存在哪些危险 2、预防SQL注入 1、分析及其存在哪些危险 原理: SQL 注入是一种常见的网络攻击手段,攻击者通过在用户输入中插入恶意的 SQL 语句,利用程序对用户输入处理不当的漏洞,使恶意 SQL 语句被数据库服务器执行。 通常发生在应用程序将用户输入直接拼…...

【时时三省】(C语言基础)柔性数组

山不在高&#xff0c;有仙则名。水不在深&#xff0c;有龙则灵。 ----CSDN 时时三省 柔性数组 C99中&#xff0c;结构中的最后一个元素允许是未知大小的数组&#xff0c;这就叫做 柔性数组 成员。 例如&#xff1a; 这里把arr就称为柔性数组 有的编译器上是写成int arr&…...

mongodb详解二:基础操作

基础操作 数据库操作collection操作查看表插入数据查找数据 数据库操作 1.创建数据库 use test_db;如果没有数据库&#xff0c;use命令会新建一个&#xff1b;有的话&#xff0c;会切换到这个数据库 2.查看数据库 show dbs;collection操作 查看表 show tables;插入数据 …...

React Native 导航系统实战(React Navigation)

导航系统实战&#xff08;React Navigation&#xff09; React Navigation 是 React Native 应用中最常用的导航库之一&#xff0c;它提供了多种导航模式&#xff0c;如堆栈导航&#xff08;Stack Navigator&#xff09;、标签导航&#xff08;Tab Navigator&#xff09;和抽屉…...

为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?

在建筑行业&#xff0c;项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升&#xff0c;传统的管理模式已经难以满足现代工程的需求。过去&#xff0c;许多企业依赖手工记录、口头沟通和分散的信息管理&#xff0c;导致效率低下、成本失控、风险频发。例如&#…...

LeetCode - 394. 字符串解码

题目 394. 字符串解码 - 力扣&#xff08;LeetCode&#xff09; 思路 使用两个栈&#xff1a;一个存储重复次数&#xff0c;一个存储字符串 遍历输入字符串&#xff1a; 数字处理&#xff1a;遇到数字时&#xff0c;累积计算重复次数左括号处理&#xff1a;保存当前状态&a…...

Objective-C常用命名规范总结

【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名&#xff08;Class Name)2.协议名&#xff08;Protocol Name)3.方法名&#xff08;Method Name)4.属性名&#xff08;Property Name&#xff09;5.局部变量/实例变量&#xff08;Local / Instance Variables&…...

条件运算符

C中的三目运算符&#xff08;也称条件运算符&#xff0c;英文&#xff1a;ternary operator&#xff09;是一种简洁的条件选择语句&#xff0c;语法如下&#xff1a; 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true&#xff0c;则整个表达式的结果为“表达式1”…...

DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”

目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...

html-<abbr> 缩写或首字母缩略词

定义与作用 <abbr> 标签用于表示缩写或首字母缩略词&#xff0c;它可以帮助用户更好地理解缩写的含义&#xff0c;尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时&#xff0c;会显示一个提示框。 示例&#x…...

【UE5 C++】通过文件对话框获取选择文件的路径

目录 效果 步骤 源码 效果 步骤 1. 在“xxx.Build.cs”中添加需要使用的模块 &#xff0c;这里主要使用“DesktopPlatform”模块 2. 添加后闭UE编辑器&#xff0c;右键点击 .uproject 文件&#xff0c;选择 "Generate Visual Studio project files"&#xff0c;重…...

DAY 26 函数专题1

函数定义与参数知识点回顾&#xff1a;1. 函数的定义2. 变量作用域&#xff1a;局部变量和全局变量3. 函数的参数类型&#xff1a;位置参数、默认参数、不定参数4. 传递参数的手段&#xff1a;关键词参数5 题目1&#xff1a;计算圆的面积 任务&#xff1a; 编写一…...

【iOS】 Block再学习

iOS Block再学习 文章目录 iOS Block再学习前言Block的三种类型__ NSGlobalBlock____ NSMallocBlock____ NSStackBlock__小结 Block底层分析Block的结构捕获自由变量捕获全局(静态)变量捕获静态变量__block修饰符forwarding指针 Block的copy时机block作为函数返回值将block赋给…...