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

序:学习原因

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

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

正好赶上学校开设了这门课,于是在万能的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的一些基本原则,在后面的博客中单独写一篇讲,但原理都是一样的。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值