单片机:内部资源

原文地址:https://blog.csdn.net/Qingzhusshuiyun/article/details/78211567

1.1 单片机的内部资源

在这里我所讲到的单片机内部资源,和传统单片机书籍讲单片机内部结构不同,我这里讲到的内部资源,是指我们作为单片机用户,单片机提供给我们可使用的一些内容。总结起来,主要是三大资源:

  1. FLASH(程序存储空间,早期单片机是OTPROM)
  2. RAM(数据存储空间)
  3. SFR(特殊功能寄存器)

在早期的技术里边,主要是用OTPROM(One Time Programable Read-Only Memory,即一次可编程只读存储器)来存储单片机的程序,随着技术的发展,FLASH的以其可重复擦写且大容量低成本的优点成为绝大多数单片机的程序存储器。对于单片机来说FLASH最大的意义是断电后数据不丢失,这个概念类似于我们电脑的硬盘,你看我们保存了电影、文档、音乐等文件,我们把电源关掉后,下次重新开电脑,所有的文件都还照样存在。

RAM是单片机的数据存储空间,用来存储程序运行过程中产生的和需要的数据,和我们电脑的内存是一个概念,其实最典型的比喻是我们的计算器,我们用计算器计算个加减法,一些中间的数据都会保存在RAM里边,关电后数据丢失,所以我们每次打开计算器,都是从归零开始计算。但是他的优点第一是读写速度非常快,第二是理论上是可无限次写入的,即寿命无限,不管程序怎么运行怎么读写它都不会坏的。

第三个资源是SFR,特殊功能寄存器。这个概念大家可能刚开始理解不了,但是一定要记住。单片机有很多很多功能,每个功能都会配一个或多个SFR,我们就是通过对SFR的读写来实现单片机的多种多样的功能的。

讲到这里,我们来了解一下51单片机。通常我们一说到51单片机,指的都是兼容Intel MCS-51体系架构的一系列单片机。全球有众多的半导体厂商推出了无数款这一系列的单片机,比如Atmel的AT89C52,NXP(Philips)的P89V51,宏晶科技的STC89C52,具体型号千差万别,但他们的基本操作都是一样的,程序开发环境也是一样的。这里我们要分清楚51这个统称和具体的单片机型号之间的关系。

单片机内部资源的三个主要部分我们清楚了,那么我们选择STC89C52RC这款单片机来进行学习。STC89C52RC单片机是宏晶科技出品的一款51内核的单片机,具有标准的51体系结构,全部的51标准功能,程序下载方式简单,方便学习,我们就用它来学习单片机。它的资源呢,Flash程序空间是8K字节(1K=1024字节,1字节= 8位),RAM数据空间是512字节,SFR我们后边需要逐一提到并且应用。

1.2 单片机最小系统

为什么称之为单片机最小系统呢?单片机最小系统,也叫做单片机最小应用系统,是指用最少的原件组成单片机可以工作的系统。单片机最小系统的三要素就是电源、晶振、复位电路,如图2-1所示。

图片
图2-1 单片机最小系统电路

备注:本教材中的大部分电路图示例都节选自我们的KST-51开发板原理图,但也有部分电路图示例与KST-51开发板无关,而仅是用其来说明一些具体问题。读者可自行对照KST-51开发板原理图,以下不再做特殊说明。

1.2.1 电源

这个很好理解,电子设备都需要供电,就连我们的家用电器(手电筒_)也不例外。主流单片机的电源现在是5V和3.3V两个标准,当然现在还有对电压要求更低的单片机系统。

我们所学的STC89C52RC,它需要5V的供电系统,我们的开发板是使用USB口出来的5V直流电压直接供电的。从图2-1可以看到,供电电路在40脚和20脚的位置上,40脚接的是VCC,代表的是电源正极,20脚接的是GND,代表的是电源的负极。VCC和GND之间还有个电容,作用我们下节课介绍。

这个地方我们还要普及一个看原理图的知识。电路原理图是为了表达这个电路的工作原理而存在的,很多器件在绘制的时候更多考虑是方便分析原理,不是表达各个器件实际位置的。比如上边的单片机引脚图,引脚的位置我们是可以随意放的,但是每个引脚上有一个引脚标号(在表示芯片的方框的内部),这个引脚标号代表的才是单片机真正的引脚位置,如图2-2所示。一般情况下,这种双列直插的封装的芯片,左上角是1脚,逆时针旋转引脚号依次增加,一直到右上角是最大脚位,咱们现在选用的单片机一共40个引脚,因此右上角就是40。

图片
图2-2单片机封装图

1.2.2 晶振

晶振,又叫晶体振荡器,从这个名字我们就可以看出来,它注定一生都要不停振动的。他起到的作用是为单片机系统提供基准时钟信号,类似于我们部队训练时喊口令的人,单片机内部所有的工作都是以这个时钟信号为步调基准来进行工作的。STC89C52RC单片机的18脚和19脚是晶振的引脚,我们接了一个11.0592M的晶振(它每秒钟震荡11,059,200次),外加两个20pF的电容,电容的作用是帮助晶振起振,并维持震荡信号的稳定

1.2.3 复位电路

在图2-1左侧是一个复位电路,接到了单片机的9脚RST(Reset)复位引脚上,这个复位电路如何起到的作用我们后边再讲,现在着重讲一下复位对单片机的作用。单片机复位一般是3种情况,上电复位、手动复位、程序自动复位

我们假如我们的单片机程序有100行,当某一次运行到第50行的时候,突然停电了,这个时候单片机内部有的区域数据会丢失掉,有的区域数据没丢失,那么下次打开设备的时候,我们希望单片机能正常运行。所以上电后,单片机要进行一个内部的初始化过程,这个过程就可以理解为上电复位,上电复位保证单片机每次都从一个固定的相同的状态开始工作。这个过程跟我们打开电脑电源开电脑的过程是一致的。

当我们的程序运行,遭受到意外干扰而导致程序死机,或者程序跑飞的时候,我们就可以按下一个复位按键,让程序重新初始化重新运行,这个过程就叫做手动复位,最典型的就是我们电脑的重启按钮。

当我们的程序死机或者跑飞的时候,我们的单片机往往有一套自动复位机制,比如看门狗,具体应用以后再了解。在这种情况下,如果程序长时间失去响应,单片机看门狗模块会自动复位重启单片机。还有一些情况是我们程序故意重启复位单片机。

电源、晶振、复位构成了单片机最小系统的三要素,也就是说,一个单片机具备了这三个条件,就可以运行我们下载的程序了,其他的比如LED小灯、数码管、液晶等设备都是属于单片机的外设,我们最终完成我们想要的功能就是通过对单片机编程来控制这些外设实现的。

1.3 LED小灯

LED小灯通常我们也叫做发光二极管,它的种类很多,参数也不尽相同,我们板子上用的是最普通的贴片发光二极管。这种二极管通常的正向导通电压是1.8V到2.2V之间工作电流一般在1mA~20mA之间。其中,当电流在1mA~5mA之间变化时,随着通过发光二极管(LED)的电流越来越大,我们的肉眼会感觉到这个小灯越来越亮,当电流从5mA~20mA之间变化时,我们看到的发光二极管的亮度基本上没有什么太大变化了当电流超过20mA时,LED就会有烧坏的危险了,电流越大,烧坏的也就越快。所以我们在使用过程中应该特别注意他在电流参数上的设计要求。

那么下面我们来看一下这个发光二极管在我们的开发板上的设计应用。

图片
图2-3 USB接口电路

图2-3是我们开发板上的USB接口电路,通过USB线,电脑给我们的开发板供电和下载程序以及实现电脑和开发板之间的通信。从图上可以看出,USB座共有6个接口,其中2脚和3脚是数据通信引脚,1脚和4脚是电源引脚,1脚是VCC正电源,4脚是GND即地线。5脚和6脚是外壳,我们直接接到了GND上,大家可以观察一下开发板上的这个USB口的座的6个引脚。

我们现在主要来看1脚VCC和4脚GND。1脚通过F1(自恢复保险丝)接到右侧,在正常工作的情况下,保险丝可以直接看成导线,因此左右两边都是USB电源+5V,自恢复保险丝的作用是,当你后级电路哪个地方有发生短路的时候,保险丝会自动切断电路,保护我们的板子以及电脑的USB口,当电路正常后,保险丝会恢复畅通,正常工作。

右侧有2条支路,第一条是在+5V和GND接了一个470uF的电容,电容是隔离直流的,所以这条支路是没有电流的,电容的作用,我们下节课再介绍,这节课我们主要看第二条支路。我们把第二条支路摘取出来就是这个样子了。

图片
图2-4 Led小灯电路(1)

发光二极管是二极管中的一种,因此和普通二极管一样,这个二极管有阴极和阳极,习惯上也称之为正极和负极,这样方便在电路上观察,方向必须接对了才会有电流通过让LED小灯发光。刚才我提到了我们接入的VCC电压是5V,发光二极管自身压降大概可认为是2V,那么在右边RES这个电阻上承受的电压就是3V。那么现在我们要求电流范围是1~20mA的话,就可以根据伏安特性,把这个电阻的上限和下限值求出来。

V C C − 2 I = R \frac{VCC - 2}{I}= R IVCC2=R

当电流是1mA的时候,电阻值是3K;当电流是20mA的时候,电阻值是150欧,也就是RES的取值范围是150~3000欧姆。这个电阻值大小的变化,直接可以限制整条通路的电流的大小,因此这个电阻我们通常称之为“限流电阻”。在图2-3中,我们用的电阻是1K,这条支路电流的大小,我想大家可以轻松计算出来了,而这个发光二极管在这里的作用,就是个电源指示灯,使用USB线将开发板和电脑连起来,这个灯就会亮了。

同理,我们在板子后级开关控制的地方,又添加了一个LED10发光二极管,作用就是当我们打开开关时,这个二极管才会亮起。

图片
图2-5 USB供电电路

大家注意,这里的开关虽然只有一个,但是是2路的,2路开关并联更能确保给后级提供更大的电流。电容C19和C10,都是隔离断开直流的,作用我们下节课介绍,这里大家可以忽略。

那么下面呢,我们把图2-4进行一下变化,把右侧的GND去掉,改成一个单片机的IO口,如图2-6所示。

图片
图2-6 LED小灯电路(2)

图2-4由于电源从正极到负极有电压差,并且电路是导通的,所以就会有电流通过,LED小灯因为有了电流通过,所以就会直接发光。我们把右侧的原GND处接到单片机P0.0引脚上,那么如果我们单片机输出一个低电平,也就是跟GND一样的0V电压,就可以让LED小灯和图2-4一样发光。

因为我们的单片机是可以编程控制的,我们可以让P0.0这个引脚输出一个高电平,就是跟VCC一样的5V电压,那么这个时候,左侧VCC电压和右侧的P0.0的电压是一致的,那就没有电压差,没有电压差就不会产生电流,没有电流LED小灯就不会亮,也就是会处于熄灭状态。下面,我们就用我们的编程软件来实现控制小灯的亮和灭。

1.4 程序代码编写

这是我们第一个实验程序,因此大家还是得耐心点,先来了解一下一些51单片机特有的程序语法以及Keil软件的基本操作步骤。

1.4.1 特殊功能寄存器和位定义

我们主要是用C语言来对单片机编程,有的单片机也有那么几条很特殊的独有的编程语句,51单片机就有,先介绍2条。

第一条语句是:  sfr  P0 = 0x80;

SFR这个关键字,是51单片机特有的,他的作用是定义一个单片机特殊功能寄存器(special function register)。51单片机内部有很多个小模块,每个模块有8个开关。每个模块呢,都有一个房间和唯一的房间号。那么P0就是一个功能模块,就住在了0x80这个房间里,我们就是通过设置P0的内部这个模块的8个开关,来让单片机的P0这8个IO口输出高电平或者低电平的。

第二条语句是: sbit  LED = P0^0;

这个sbit,就是对刚才所说的SFR里边的8个开关其中的一个进行定义。经过上边第二条语句后,以后只要在程序里写LED,就代表了P0.0口(“^”这个符号在数字键6上边),注意这个P必须大写,也就是说我们给P0.0又取了一个更形象的名字叫做LED。

了解了这两个语句后,我们来大概看一下单片机的特殊功能寄存器。注意,每个型号的单片机都会配有生产厂商所写的数据手册(Datasheet),所以我们来看一下STC89C52RC的数据手册,从21页到24页,全部是对特殊功能寄存器的介绍以及地址映射列表。我们在使用这个寄存器之前,必须对这个寄存器的地址进行说明。是不是花花绿绿的太多了,记不住啊,这个没关系的,不需要你记住,了解一下,后边大部分我会慢慢给大家解释,少部分需要用到的时候,自己过来查手册就可以了,做技术不是为了应付考试,你可以随时翻阅手册查找你需要的资料。

继续往下看,在22页最下边有一个表格
图片
表2-1 IO口特殊功能寄存器

我们来看一下表2-1,其中P4口是扩展出来的功能,我们暂时先不看,只看前边的P0,P1,P2,P3这4个,每个Px口本身又有8个控制端口。大家可以结合我们的开发板原理图或者图2-1来看,那么这样就确定了我们的单片机一共有32个IO口(IO,Input和Output,分别是输入和输出)。

其中P0口所在的地址是0x80,一共有从7到0这8个IO口控制位,后边有个Reset Value(复位值),这个很重要,我们看寄存器必看的一个参数,8个控制位复位值全部都是1。这里也就告诉了我们,这个单片机上电复位的时候,所有的引脚的值默认是高电平,我们在设计电路的时候也要充分的考虑这个问题。

那么上边那2条语句,我们写sfr的时候,必须要根据手册里的这个地址(add)去写,sbit的时候,就可以直接将一个字节其中某一位取出来。我们编程的时候,也有现成的写好寄存器地址的头文件,我们直接包含该头文件就可以了,不需要逐一去写了。

  • 8
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
单片机(Microcontroller)中,内部存储器和寄存器的功能和特点与一般计算机中的存储器和寄存器有一些区别。 1. 功能:在单片机中,内部存储器被用来存储程序代码和数据。它通常包括闪存(Flash)存储器和随机访问存储器(RAM)。闪存存储器用于存储程序代码和常量数据,而RAM用于存储变量数据。寄存器则用于暂时存放指令、数据和计算结果等。 2. 容量和速度:单片机内部存储器容量相对较小,通常以字节或千字节为单位。寄存器的容量更小,通常以位或字节为单位,并且数量有限。然而,由于内部存储器和寄存器位于单片机内部,它们的访问速度非常快,可以在一个或几个时钟周期内完成读写操作。 3. 使用方式:内部存储器和寄存器在单片机中都可以由程序员直接访问和操作。程序员可以通过地址来读取和写入内部存储器中的数据,以及使用寄存器来存储临时数据、控制信息和中间结果等。 4. 成本:由于内部存储器和寄存器是单片机内部的组成部分,它们的成本通常已经包含在单片机芯片的成本中,无需额外购买。 总而言之,在单片机中,内部存储器用于存储程序代码和数据,而寄存器用于暂时存放指令、数据和计算结果等。内部存储器和寄存器都可以由程序员直接访问和操作,具有较快的访问速度。然而,它们的容量相对较小,适用于资源受限的嵌入式系统。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值