单片机零基础完整攻略-1

2023-05-16

序:学习原因

在网上看到各路大神用一个小小的板子就能玩起来一些很有趣的小项目,觉得非常之神奇。

为什么一个小小的板子就能做到物联网,机器人那么多花里胡哨的功能?

正好赶上学校开设了这门课,于是在万能的CSDN上记录自己的学习心得。从理论到软硬件,完全纯纯的新手零基础。希望在以后的岁月缅怀过往时,能看到当年那个渺小但却闪闪发光的的自己。

一:基础中的基础知识

1.1 进制:

电脑不认识汉字英文孟加拉语,只认识二进制文件。现在学到的二进制格式都是比较初级的:位bit(0,1)、字节byte(0101)、字word(0010 0110)等。

在一串数字的末尾追加一个表示当前进制的符号:B二进制;Q八进制;D十进制;H十六进制。比如:0C5H,代表十六进制下的 C5,换算成十进制也就是12 * 16^1 + 5 * 16^0 = 197。换位(用C5H也可以,前面加上0比较规范)以后默认都是十六进制的数。

1.2 原码补码换算

经过科学家们的不断研究,人类找到了一种能让计算机快速识别并且计算的方式:那就是编码。源码反码补码是最基础最原始的形式。

1.正数的补码就是原码  比如:[24] 原= [24]补 = 0001 1000

2.负数补码:符号位的1不变,整体取反再加1       比如: [-24]原 = 1001 1000  , 对它取反1110 0111,再加1  也即 [-24]补 =1110 1000(要进位)

特殊补码  -128补码1000 0000; -1补码 1111 1111;  127补码 01111111;

例:补码表示的带符号数是0D8H,问它代表的十进制数是?(补码到原码的快速反推)

解:0D8H -> 1101 1000 H -> 使用结论:低位第一个1到最高位的符号位之间的数全部取反 -> 

得到 1010 1000 -> 十进制是 - 40

1.3 微机的简要知识说明(后面都会使用)

硬件系统:计算机,储存器,控制器,输入设备,输出设备

三总线结构:数据线(D)、地址线(A)、 控制线

1 MB = 2^10 kb  ;  1 kb = 2^10 b

一个字节(byte)有四位(bit),一个字(word)有两个字节

ASCALL码关键节点 : A-65; a-97; Z-90; z-122

1.4 容量与储存

1.容量与储存的关系:

在电脑(或者单片机)中,我们用一个数学关系来表示你这台机器的容量,不管是读写数据,都需要通过地址线进行寻址的操作。

(一个不精准的例子)假如要控制电机运动,我需要把一个操作数13H放进电机的控制地址2000H中,我就需要先找到2000H这个地方,再进行一个放数取数的操作。就像是去朋友家做客需要先找到他家的门牌号一样,找到了然后才能进门。

容量与数据线的关系为:2^(n-10);n是地址线的条数(上面讲到的三线的一种)。比如我有个内存条,他有13条地址线,那他的容量就是2 ^ 3 = 8K的一个大小。要表示某个内存的容量大小,其方法如下:字大小K * 位大小。(32K * 8)

相对常用的扩容芯片:SRAM(8K * 8)    EPROM(32K * 8)。真值表网上都有就不放了,只需要知道读数据的状态下进行寻址就行。(后面有具体案列)

2.容量对应的地址范围关系:

例:一个32K的存储起始地址为10000H,问他的末地址。

解:由表可知,10000H + 8000H 所以末地址就是17000H

3.译码方式:

3.1地址范围的计算

直接一个例子入手:用74138拓展储存芯片。

 分析:CS作为片选信号端,通过138的输出来选择控制哪一片。

具体分析方法是:将地址线A从高位到低位以此排列,判断每一位地址线对片选信号的影响。当地址线的每一位以何种大小组合到一起时,能够激活芯片的“读”功能,那么就保留这位地址线的大小。没有影响的就打上一个×表示无影响。

看这道题,对片选信号有影响的就是A16 ~ A19 的所有位,A13~A15作为选择的符号位,不论取什么值都不影响片选信号正常工作,所以A0~A15作为无关项。又因为只有当A16 ~ A19全部为1时才能激活138,所有它们几个的有效大小就全为1。

如果需要与译码器的输出Y0相连:

                                A19  A18  A17  A16  A15 …… A0

                                1      1       1       1      X  ……   X

                                无关项A15~A0被写为逻辑0,确定最低地址。

                                 1111 0000 0000 0000 0000 = F0000H

                                无关项A15~A0被写为逻辑1,确定最高地址。

                                1111 1111 1111 1111 1111 = FFFFFH

                                所以最后的范围是:F0000H ~ FFFFFFH

同理对Y6而言:

3.2 译码方式的选择:

3.2.1 线选法:例如要控制4片存储器芯片,直接引4条地址线过来,每一条控制一片芯片。

优点就是简单,缺点就是浪费空间了

3.2.2部分译码:用2地址线控制4片。方式类似上面的例题,通过地址线的组合来选通对应序号的芯片。 优点就是结构比较紧凑,缺点会出现地址重叠。

3.2.3全译码:全译码法将除片内寻址外的全部高位地址线都作为地址译码器的输入,译码器的输出作为各芯片的片选信号,将它们分别接到存储芯片的片选端,以实现对存储芯片的选择。

全译码法的优点是每片(或组)芯片的地址范围是唯一确定的,而且是连续的,也便于扩展,不会产生地址重叠的存储区,但全译码法对译码电路要求较高。

3.3 存储扩容的具体操作:

上面讲了那么多基础理论知识,下面才是具体应用中经常会碰到的问题。正在高兴写代码时突然被告知容量不够了,所以就需要在单片机上扩容。这就和电脑上插内存条一样,只不过电脑安装内存条直接插到对应的接口就行,单片机的话还涉及到一些额外的知识。

我们知道容量的表示方法为: 32K * 8,其中32代表字,后面的8代表位。不管是字扩展位扩展还是其他都是对这两个容量操作。扩展的计算公式如下:

所需片数 = 目标容量 / 每片容量;

3.3.1 位扩展:

 上图我们可以看到,目标容量是 64 * 8,每片容量是 64 * 1,所以一共需要8片。扩展时直接将每片的IO数据端口连接要扩展单片机的数据线即可。地址线还是连接存储芯片的地址线。

3.3.2字扩展

 字扩展往往需要连接74138芯片作为片选信号,其余方式同上。

在总结了51单片机之后,再放上如何将单片机扩容的实际例子。

 上图是一个非常简单的单片EPROM存储器芯片与80C31 CPU的连接。

 这是51单片机扩展16k的ROM连线,程序后面再补充,硬件上是这么个意思。

单片机连接外设IO的一些基本原则,在后面的博客中单独写一篇讲,但原理都是一样的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

单片机零基础完整攻略-1 的相关文章

  • MySQL--用Navicat连接MySQL8.0报错1251问题解决

    文章目录 一 安装后直接用Navicat连接1251报错二 仍报错为 39 mysql 39 不是内部或外部命令 1 环境变量配置 三 找不到MySQL Server 8 0 bin路径四 解决上述全部问题 一 安装后直接用Navicat连
  • 10 分钟让你明白 MySQL 是如何利用索引的

    一 前言 在MySQL中进行SQL优化的时候 xff0c 经常会在一些情况下 xff0c 对 MySQL 能否利用索引有一些迷惑 譬如 MySQL 在遇到范围查询条件的时候就停止匹配了 xff0c 那么到底是哪些范围条件 xff1f MyS
  • 吊炸天的 Docker 图形化工具 —— Portainer

    一 Docker图形化工具二 DockerUI三 船坞四 搬运工1 查看portainer平均值2 选择喜欢的portainer风格整合 xff0c 下载3 启动dockerui容器4 xff0c 网页管理 一 Docker图形化工具 Do
  • 为提高面试通过率,技术岗可以提前做好哪些面试准备?

    Hi xff0c 大家好 xff0c 我是小庄 目前2023届秋招提前批已经陆续开始了 xff0c 考虑到一些校招的同学可能是第一次接触面试 xff08 该文章适用于校招 社招 xff09 xff0c 所以这篇文章就是为了记录一些面试技巧
  • GNU Radio自定义模块:Embedded Python Block的使用

    GNU Radio 学习使用 OOT 系列教程 xff1a GNU Radio3 8创建OOT的详细过程 基础 C 43 43 GNU Radio3 8创建OOT的详细过程 进阶 C 43 43 GNU Radio3 8创建OOT的详细过程
  • 中文分词

    本文首先介绍下中文分词的基本原理 xff0c 然后介绍下国内比较流行的中文分词工具 xff0c 如jieba SnowNLP THULAC NLPIR xff0c 上述分词工具都已经在github上开源 xff0c 后续也会附上github
  • (1)GNSS驱动nmea_navsat_driver 功能包的使用

    总览 该软件包为输出兼容NMEA语句的GPS设备提供了ROS接口 有关原始格式的详细信息 xff0c 请参见NMEA句子的GPSD文档 在成千上万的NMEA兼容GPS设备中 xff0c 我们正在汇编已知支持的设备列表 这个包是与兼容geog
  • (2)ROS传感器之GPS实践

    一 GPS接口类型 GPS接口大体可以分为两类 xff0c 一是单独的GPS接收器 xff0c 通常为USB接口 xff1b 二是与其他传感器集成 xff0c 例如激光雷达或者imu xff0c 大多是USB或者网络接口 xff0c 本文主
  • (6)GPS坐标与UTM坐标的转换

    1 简介 1 1 消息 gps common定义了两个通用消息 xff0c 供GPS驱动程序输出 xff1a gps common GPSFix和gps common GPSStatus 在大多数情况下 xff0c 这些消息应同时发布 xf
  • scanf("%c",&m)中%c前面加空格的作用

    c前面加空格不是必须的 xff0c 但有了空格就可以忽略你输入的空格 例如 xff1a scanf 34 c 34 amp m xff0c 你输入了 a a前面有个空格 xff0c a就能被c接受 但控制符前如果没空格 xff0c 那c就接
  • 聊一聊cropper.js

    最近的项目中有一个纯前端实现的功能困扰了我好久 xff0c 就是用户上传图片以后需要用户进入图片裁剪页并完成上传的功能 xff0c 一开始我是打算自己去用canvas去写这样一个页面的 xff0c 但是项目开发周期短 xff0c 任务紧 x
  • CAS服务(5.3)使用mysql验证

    CAS服务使用mysql验证 一 添加相关依赖 在pom文件里添加下面的依赖 这里cas的版本是5 3 14 lt dependency gt lt groupId gt org apereo cas lt groupId gt lt ar
  • Realsense L515 例程详解 Tutorial 1

    最近在用Realsense L515做一个机器人的视觉部分 看到网上相关资料较少 xff0c 和大家分享一下最近一周所学 第一个例程比较简单 xff0c 实现的功能也比较朴实 实现了什么功能呢 xff1f 就是把从相机得到的深度信息通过控制
  • #AI边缘计算单元-想搞开发,买树莓派还是Nano?

    作者 xff1a Blue Hole 个人网站 xff1a https www wcfde xyz xff0c 欢迎交流 近几年边缘计算快速发展 xff0c 已经渗透到各个行业 边缘计算单元也像雨后春笋涌现出来 xff0c 面对如此多的开发
  • 算法要怎么学习

    学习算法 xff0c 切记不要一上来就开始啃 算法导论 xff0c 毕竟这本书并不适合新手学习 xff0c 如果你之前的算法基础比较薄弱 xff0c 只会一直陷在 拿起来又放下 的循环里 可以怎么入门呢 xff1f 建议还是看书 43 实战
  • EGO-Swarm代码解读-地图部分

    文章目录 1 参数解读2 主要函数解读 1 参数解读 一 MappingData md 中的参数含义 xff1a local bound min span class token punctuation span local bound m
  • GNURadio中的PMTs(Polymorphic Types)数据类型

    目录 1 整体概述 2 使用方法的举例说明 3 对于PMT类型的补充说明 1 整体概述 PMTs在GNURadio中代表多态类型 xff08 Polymorphic Types xff09 xff0c 这种类型不像float int一样是严
  • STM32F103C8T6初学笔记

    STM32F103C8T6初学笔记 ST官网链接 xff1a http www stmicroelectronics com cn ST MCU网站链接 xff1a http www stmcu com cn 初识STM32 STM32是3
  • STM32F103 72MHz时钟设置

    将系统时钟初始化到72MHz的函数 根据数据手册和库函数 xff0c 设置STM32时钟为72MHz 这是 c文件 span class token macro property span class token directive key
  • C++ 类和对象学习 —— 继承

    1 6 继承 利用继承技术 xff0c 可以减少重复代码 1 6 1 继承的基本语法 普通实现 span class token macro property span class token directive keyword inclu

随机推荐

  • 解决 VS 无法打开包括文件: “XXX.h”: No such file or directory问题

    每次封装管理 xff0c 当 Visual Studio 包含多个 h 文件和 c 文件 xff0c 运行时总会发生如下错误 错误 C1083 无法打开包括文件 XXX h No such file or directory test1 0
  • C++ 多态深入学习总结笔记

    多态和虚函数 1 通过案例理解多态 案例 xff1a 父类Animal xff0c 2个子类Dog和Cat xff0c 实现speak方法 未使用虚函数 virtual 声明 main h 文件 span class token keywo
  • LaTeX 报错! Missing $ inserted. <inserted text>$ l.44 问题解决

    学习LaTeX编辑器编辑数学公式时 xff0c 输入如下 xff1a 编译报错如下 xff1a 搜索方法 xff0c 并未得到有效解决 xff0c 机缘巧合把空行删除 xff0c 如下图所示 xff1a 再次编译未报错 xff0c 成功运行
  • 在 Microsoft Word 插入代码块(无需下载任何软件)

    Step 1 打开 CSDN Markdown 编辑器 xff0c 点击菜单栏上方代码块 xff0c 选择自己的代码语言 Step 2 插入代码如下图所示 xff0c 之后将代码复制 Step 3 打开 Microsoft Word xff
  • MATLAB 利用YALMIP+Gurobi 求解线性规划 -多无人机扫描覆盖

    使用要点 创建决策变量设置目标函数添加约束条件参数配置求解问题 问题描述 假设M个无人机的任务是尽快覆盖一组由 P 顶点表示的多边形凸区域 xff0c 假设每架无人机的最大飞行时间是有限的 xff0c 并且是预先知道的 每架无人机的都配备了
  • 毕业论文格式系列1 Word 图片交叉引用其题注

    图表论文自动编号 自动编号可以通过 Word 的 题注 功能实现 按论文格式要求 xff0c 第一章的图编号格式为 图1 X xff0c 具体做法如下 xff1a 将图插入文档中后 xff0c 选中新插入的图 xff0c 在 引用 菜单选
  • Visual Studio 2022 编译新版 Mission Planner 地面站

    下载安装VS 2022 安装时 xff0c 注意勾选 安装成功后 xff0c 从Visual Studio官方SDKs下载net461开发包 xff0c 网址 xff1a https dotnet microsoft com en us d
  • GNU Radio中的流标签(Stream Tags)

    目录 0 GR 中常用术语的官方解释 1 定义概述 2 在数据流中添加标签 3 添加标签的demo举例 4 从数据流中的获取标签 5 提取标签的demo举例 0 GR 中常用术语的官方解释 直接吧官方的解释抄过来 xff0c 直接看英文更容
  • 飞控学习随记

    常见指令 编译Arduplane程序 span class token builtin class name cd span ardupilot waf plane 进入 Tools autotest 文件夹中 xff0c 启动3D fli
  • 【无标题】

    apm飞控飞行模式详解 1 稳定模式Stabilize 稳定模式是使用得最多的飞行模式 xff0c 也是最基本的飞行模式 xff0c 起飞和降落都应该使用此模式 此模式下 xff0c 飞控会让飞行器保持稳定 xff0c 是初学者进行一般飞行
  • C# CustomMessageBox.Show() 输出多个变量调试

    Mission Planner 地面站调试中会遇到输出多个变量问题 xff0c 这里采用CustomMessageBox Show来输出调试多个变量 xff0c 用到string Format方法 span class token clas
  • MapReduce实验——学生总成绩报表,学生平均成绩

    学生总成绩报表 Map类 span class token keyword package span span class token class name StudentScore 06 span span class token pun
  • 【Docker操作必看,原来这才是正确打开Docker的新方式】

    前言 一 Docker操作镜像 首先镜像名称一般分为两个部分 xff1a repository tag xff0c 前者是镜像名 xff0c 后者是版本号 在没有指定tag的情况下 xff0c 默认是latest 代表的是最新版本 1 拉取
  • 第五章 FreeRTOS 任务基础知识

    5 1 什么是多任务系统 在使用 51 AVR STM32 单片机裸机 未使用系统 的时候一般都是在main 函数里面用 while 1 做一个大循环来完成所有的处理 xff0c 即应用程序是一个无限的循环 xff0c 循环中调用相应的函数
  • C语言for循环详解

    for 循环的使用更加灵活 xff0c 在日常的程序开发过程中我们会使用的更多一些 使用 while 循环来计算1加到100的值 xff0c 代码如下 xff1a include span class token generics func
  • Python批量下载sci-hub文献

    coding utf 8 import requests from bs4 import BeautifulSoup import os re path 61 34 Downloaded 34 if os path exists path
  • Ubuntu16.04 安装NS3.36.1及可视化模块

    如果不是必要 xff0c 尽量不要在Ubuntu 16 04上装3 36 1这个版本 xff0c 因为比较麻烦 NS3 36 1的新特性 安装依赖 一条一条执行 xff01 xff01 xff01 ns3 36需要用的python3 xff
  • ES6模块化及ES7新增特新性

    一 babel ES6代码转换为ES5的代码 1 初始化项目 npm init npm init y 不需要配置 xff0c 直接跳过 2 安装转码工具 cnpm install g babel cli cnpm install save
  • GNU Radio中的消息传递机制(Message Passing)

    目录 0 首先看下 GR 中一些常用术语的官方解释 1 定义理解 2 消息传递端口API 3 消息处理函数 4 通过流程图连接消息 5 从外部源发布数据 6 使用消息传送命令 7 一个消息传输的例子 0 首先看下 GR 中一些常用术语的官方
  • 单片机零基础完整攻略-1

    序 xff1a 学习原因 在网上看到各路大神用一个小小的板子就能玩起来一些很有趣的小项目 xff0c 觉得非常之神奇 为什么一个小小的板子就能做到物联网 xff0c 机器人那么多花里胡哨的功能 xff1f 正好赶上学校开设了这门课 xff0