请问各位大佬,有没有什么8051系列的单片机8051推荐,要求12——20引脚的,低功耗!谢谢!

【精品】计算机控制课设,计算机網络课设,腾讯精品课,精品课,国家精品课,精品资源共享课,国家精品视频公开课,网易精品课,河南精品资源共享课,精品视频公开课

}

本回答被提问者和网友采纳

你对這个回答的评价是

}

一、 51串行口工作原理

MCS-51系列单片机8051爿内有一个串行I/O端口通过引脚RXD(P3.0)和TXD(P3.1)可与外设进行全双工的串行异步通信。

1.串行端口的基本特点

8031单片机8051的串行端口有4种基本工作方式通过编程设置,可以使其工作在任一方式以满足不同应用场合的需要。其中方式0主要用于外接移位,以扩展单片机8051的I/O电路;方式1多用于双机之间或与外设电路的通信;方式23除有方式l的功能外,还可用作多机通信以构成分布式多微机系统。

串行端口有两个控制寄存器用来设置工作方式、发送或接收的状态、特征位、数据传送的波特率(每秒传送的位数)以及作为中断标志等。

串行端口有一个数据寄存器SBUF(在特殊功能寄存器中的字节地址为99H)该寄存器为发送和接收所共同。发送时只写不读;接收时,只读不写在一定条件下,向阳UF寫入数据就启动了发送过程;读SBUf就启动了接收过程

串行通信的波特率可以程控设定。在不同工作方式中由振荡频率的分频值或由Tl的定時溢出时间确定,使用十分方便灵活

2.串行端口的工作方式

8位移位寄存器输入/输出方式。多用于外接移位寄存器以扩展I/O端口波特率固定为fosc/12。其中fosc为时钟频率。

在方式0中串行端口作为输出时,只要向串行缓冲器SBUF写入一字节数据后串行端口就把此8位数据以等的波特率,从RXD引脚逐位输出(从低位到高位);此时TXD输出频率为fosc/12的同步移位脉冲。数据发送前仅管不使用中断,中断标志还必须清零8位数据發送完后,TI自动置1如要再发送,必须用软件将TI清零

串行端口作为输入时,RXD为数据输入端TXD仍为同步信号输出端,输出频率为fosc/12的同步移位脉冲使外部数据逐位移入RxD。当接收到8位数据(一帧)后中断标志RI自动置。如果再接收必须用软件先将RI清零。

串行方式0发送和接收的时序过程见下图

10位异步通信方式。其中1个起始位(0),8个数据位(由低位到高位)和1个停止位(1)波特率由定时器T1的溢出率和SMOD位的状态确定。

一条寫SBUF指令就可启动数据发送过程在发送移位时钟(由波特率确定)的同步下,从TxD先送出起始位然后是8位数据位,最后是停止位这样的一帧10位数据发送完后,中断标志TI置位

在允许接收的条件下(REN=1),当RXD出现由1到O的负跳变时即被当成是串行发送来的一帧数据的起始位,从而启動一次接收过程当8位数据接收完,并检测到高电乎停止位后即把接收到的8位数据装入SBUF,置位RI一帧数据的接收过程就完成了。

方式1的數据传送波特率可以编程设置使用范围宽,其计算式为:

其中SMOD是控制寄存器PCON中的一位程控位,其取值有0和l两种状态显然,当SMOD=0时波特率=1/32(定时器Tl溢出率),而当SMOD=1时波特率=1/16(定时器T1溢出率)。所谓定时器的溢出率就是指定时器一秒钟内的溢出次数。波特率的算法鉯及要求一定波特率时定时器定时初值的求法,后面将详细讨论

串行方式1的发送和接收过程的时序见下图。

11位异步通信方式其中,1个起始位(0)8个数据位(由低位到高位),1个附加的第9位和1个停止住(1)方式2和方式3除波特率不同外,其它性能完全相同方式2,3的发送、接收时序見下图

由图可见,方式2和方式3与方式l的操作过程基本相同主要差别在于方式2,3有第9位数据

发送时,发送机的这第9位数据来自该机SCON中嘚TB8而接收机将接收到的这第9位数据送入本机SCON中的RB8。这个第9位数据通常用作数据的奇偶位或在多机通信中作为地址/数据的特征位。

方式2和方式3的波特率计算式如下:

方式3的波特率=2SMOD/32×定时器T1的溢出率

由此可见在时钟频率一定的条件下,方式2只有两种波特率而方式3可通过编程设置成多种波特率,这正是这两种方式的差别所在

3.串行端口的控制寄存器

串行端口共有2个控制寄存器SCON和PCON,用以设置串行端口嘚工作方式、接收/发送的运行状态、接收/发送数据的特征、波特率的大小以及作为运行的中断标志等。

一、P0端口的结构及工作原理

P0端口8位中的一位结构图见下图:

由上图可见P0端口由存器、输入缓冲器、切换、一个与非门、一个与门及驱动电路构成。再看图的右边標号为P0.X引脚的图标,也就是说P0.X引脚可以是P0.0到P0.7的任何一位即在P0口有8个与上图相同的电路组成。

下面我们先就组成P0口的每个单元部份跟大镓介绍一下:

先看输入缓冲器:在P0口中,有两个三态的缓冲器在学时,我们已知道三态门有三个状态,即在其的输出端可以是高电平、低电平同时还有一种就是高阻状态(或称为禁止状态),大家看上图上面一个是读锁存器的缓冲器,也就是说要读取D锁存器输出端Q的数据,那就得使读锁存器的这个缓冲器的三态控制端(上图中标号为‘读锁存器’端)有效下面一个是读引脚的缓冲器,要读取P0.X引腳上的数据也要使标号为‘读引脚’的这个三态缓冲器的控制端有效,引脚上的数据才会传输到我们单片机8051的内部数据总线上

D锁存器:构成一个锁存器,通常要用一个时序电路时序的单元电路在学数字电路时我们已知道,一个可以保存一位的二进制数(即具有保持功能)在51单片机8051的32根I/O口线中都是用一个D触发器来构成锁存器的。大家看上图中的D锁存器D端是数据输入端,CP是控制端(也就是时序控制信號输入端)Q是输出端,Q非是反向输出端

对于D触发器来讲,当D输入端有一个输入信号如果这时控制端CP没有信号(也就是时序脉冲没有箌来),这时输入端D的数据是无法传输到输出端Q及反向输出端Q非的如果时序控制端CP的时序脉冲一旦到了,这时D端输入的数据就会传输到Q忣Q非端数据传送过来后,当CP时序控制端的时序信号消失了这时,输出端还会保持着上次输入端D的数据(即把上次的数据锁存起来了)如果下一个时序控制脉冲信号来了,这时D端的数据才再次传送到Q端从而改变Q端的状态。

多路开关:在51单片机8051中当内部的够用(也就昰不需要外扩展器时,这里讲的存储器包括数据存储器及程序存储器)时P0口可以作为通用的输入输出端口(即I/O)使用,对于8031(内部没有)的单片机8051或者编写的程序超过了单片机8051内部的存储器容量需要外扩存储器时,P0口就作为‘地址/数据’总线使用那么这个多路选择开關就是用于选择是做为普通I/O口使用还是作为‘数据/地址’总线使用的选择开关了。大家看上图当多路开关与下面接通时,P0口是作为普通嘚I/O口使用的当多路开关是与上面接通时,P0口是作为‘地址/数据’总线使用的

输出驱动部份:从上图中我们已看出,P0口的输出是由两个MOS管组成的推拉式结构也就是说,这两个MOS管一次只能导通一个当V1导通时,V2就截止当V2导通时,V1截止

与门、与非门:这两个单元电路的邏辑原理我们在第四课数字及常用逻辑电路时已做过介绍,不明白的同学请回到第四节去看看

前面我们已将P0口的各单元部件进行了一个詳细的讲解,下面我们就来研究一下P0口做为I/O口及地址/数据总线使用时的具体工作过程

1、作为I/O端口使用时的工作原理

P0口作为I/O端口使用时,哆路开关的控制信号为0(低电平)看上图中的线线部份,多路开关的控制信号同时与与门的一个输入端是相接的我们知道与门的逻辑特点是“全1出1,有0出0”那么控制信号是0的话这时与门输出的也是一个0(低电平),与让的输出是0V1管就截止,在多路控制开关的控制信號是0(低电平)时多路开关是与锁存器的Q非端相接的(即P0口作为I/O口线使用)。

P0口用作I/O口线其由数据总线向引脚输出(即输出状态Output)的笁作过程:当写锁存器信号CP 有效,数据总线的信号→锁存器的输入端D→锁存器的反向输出Q非端→多路开关→V2管的栅极→V2的漏极到输出端P0.X湔面我们已讲了,当多路开关的控制信号为低电平0时与门输出为低电平,V1管是截止的所以作为输出口时,P0是漏极开路输出类似于OC门,当驱动上接负载时需要外接上拉。

下图就是由内部数据总线向P0口输出数据的流程图(红色箭头)

P0口用作I/O口线,其由引脚向内部数据總线输入(即输入状态Input)的工作过程:数据输入时(读P0口)有两种情况

读芯片引脚上的数据读引脚数时,读引脚缓冲器打开(即三态缓沖器的控制端要有效)通过内部数据总线输入,请看下图(红色简头)

通过打开读锁存器三态缓冲器读取锁存器输出端Q的状态,请看丅图(红色箭头):

在输入状态下从锁存器和从引脚上读来的信号一般是一致的,但也有例外例如,当从内部总线输出低电平后锁存器Q=0,Q非=1场效应管T2开通,端口线呈低电平状态此时无论端口线上外接的信号是低电乎还是高电平,从引脚读入单片机8051的信号都是低电平因而不能正确地读入端口引脚上的信号。又如当从内部总线输出高电平后,锁存器Q=1Q非=0,场效应管T2截止如外接引脚信号為低电平,从引脚上读入的信号就与从锁存器读入的信号不同为此,8031单片机8051在对端口P0一P3的输入操作上有如下约定:为此,8051单片机8051在对端口P0一P3的输入操作上有如下约定:凡属于读-修改-写方式的指令,从锁存器读入信号其它指令则从端口引脚线上读入信号。

读-修改-写指囹的特点是从端口输入(读)信号,在单片机8051内加以运算(修改)后再输出(写)到该端口上。下面是几条读--修改-写指令的例子

这样安排的原因茬于读-修改-写指令需要得到端口原输出的状态,修改后再输出读锁存器而不是读引脚,可以避免因外部电路的原因而使原端口的状态被讀错

P0端口是8031单片机8051的总线口,分时出现数据D7一D0、低8位地址A7一AO以及三态,用来接口存储器、外部电路与外部设备P0端口是使用最广泛的I/O端口。

2、作为地址/数据复用口使用时的工作原理

在访问外部存储器时P0口作为地址/数据复用口使用

这时多路开关‘控制’信号为‘1’,‘与门’解锁‘与门’输出信号电平由“地址/数据”线信号决定;多路开关与反相器的输出端相连,地址信号经“地址/数据”线→反相器→V2场效应管栅极→V2漏极输出

例如:控制信号为1,地址信号为“0”时与门输出低电平,V1管截止;反相器输出高电平V2管导通,输出引腳的地址信号为低电平请看下图(兰色字体为电平):

反之,控制信号为“1”、地址信号为“1”“与门”输出为高电平,V1管导通;反楿器输出低电平V2管截止,输出引脚的地址信号为高电平请看下图(兰色字体为电平):

可见,在输出“地址/数据”信息时V1、V2管是交替导通的,负载能力很强可以直接与外设存储器相连,无须增加总线驱动器

P0口又作为数据总线使用。在访问外部程序存储器时P0口输絀低8位地址信息后,将变为数据总线以便读指令码(输入)。

在取指令期间“控制”信号为“0”,V1管截止多路开关也跟着转向锁存器反相输出端Q非;自动将0FFH(,即向D锁存器写入一个高电平‘1’)写入P0口锁存器使V2管截止,在读引脚信号控制下通过读引脚三态门电路將指令码读到内部总线。请看下图

如果该指令是输出数据如MOVX @DPTR,A(将累加器的内容通过P0口数据总线传送到外部中)则多路开关“控制”信号为‘1’,“与门”解锁与输出地址信号的工作流程类似,数据据由“地址/数据”线→反相器→V2场效应管栅极→V2漏极输出

如果该指囹是输入数据(读外部数据存储器或程序存储器),如MOVX A@DPTR(将外部RAM某一存储单元内容通过P0口数据总线输入到累加器A中),则输入的数据仍通过读引脚三态缓冲器到内部总线其过程类似于上图中的读取指令码流程图。

通过以上的分析可以看出当P0作为地址/数据总线使用时,茬读指令码或输入数据前CPU自动向P0口锁存器写入0FFH,破坏了P0口原来的状态因此,不能再作为通用的I/O端口大家以后在系统设务必注意,即程序中不能再含有以P0口作为操作数(包含源操作数和目的操作数)的指令

二、P1端口的结构及工作原理

P1口的结构最简单,用途也单一仅莋为数据输入/输出端口使用。输出的信息有锁存输入有读引脚和读锁存器之分。P1端口的一位结构见下图.

由图可见P1端口与P0端口的主要差別在于,P1端口用内部上拉电阻R代替了P0端口的场效应管T1并且输出的信息仅来自内部总线。由内部总线输出的数据经锁存器反相和场效应管反相后锁存在端口线上,所以P1端口是具有输出锁存的静态口。

由上图可见要正确地从引脚上读入外部信息,必须先使场效应管关断以便由外部输入的信息确定引脚的状态。为此在作引脚读入前,必须先对该端口写入l具有这种操作特点的输入/输出端口,称为准双姠I/O口8051单片机8051的P1、P2、P3都是准双向口。P0端口由于输出有三态功能输入前,端口线已处于高阻态无需先写入l后再作读操作。

P1口的结构相对簡单前面我们已详细的分析了P0口,只要大家认真的分析了P0口的工作原理P1口我想大家都有能力去分析,这里我就不多论述了

单片机8051复位后,各个端口已自动地被写入了1此时,可直接作输入操作如果在应用端口的过程中,已向P1一P3端口线输出过0则再要输入时,必须先寫1后再读引脚才能得到正确的信息。此外随输入指令的不同,H端口也有读锁存器与读引脚之分

三、P2端口的结构及工作原理:

P2端口的一位结构见下图:

由图可见,P2端口在片内既有上拉电阻又有切换开关MUX,所以P2端口在功能上兼有P0端口和P1端口的特点这主要表现在输出功能仩,当切换开关向下接通时从内部总线输出的一位数据经反相器和场效应管反相后,输出在端口引脚线上;当多路开关向上时输出的┅位地址信号也经反相器和场效应管反相后,输出在端口引脚线上

对于8031单片机8051必须外接程序存储器才能构成应用电路(或者我们的应用電路扩展了外部存储器),而P2端口就是用来周期性地输出从外存中取指令的地址(高8位地址)因此,P2端口的多路开关总是在进行切换分时哋输出从内部总线来的数据和从地址上来的地址。因此P2端口是动态的I/O端口输出数据虽被锁存,但不是稳定地出现在端口线上其实,这裏输出的数据往往也是一种地址只不过是外部RAM的高8位地址。

在输入功能方面P2端口与P0和H端口相同,有读引脚和读锁存器之分并且P2端口吔是准双向口。

可见P2端口的主要特点包括:

①不能输出静态的数据;

②自身输出外部程序存储器的高8位地址;

②执行MOVX指令时,还输出外蔀RAM的高位地址故称P2端口为动态地址端口。

即然P2口可以作为I/O口使用也可以作为地址总线使用,下面我们就不分析下它的两种工作状态

1、作为I/O端口使用时的工作过程

当没有外部程序存储器或虽然有外部数据存储器,但容易不大于256B即不需要高8位地址时(在这种情况下,不能通过数据地址寄存器DPTR读写外部数据存储器)P2口可以I/O口使用。这时“控制”信号为“0”,多路开关转向锁存器同相输出端Q输出信号經内部总线→锁存器同相输出端Q→反相器→V2管栅极→V2管9漏极输出。

由于V2漏极带有上拉电阻可以提供一定的上拉电流,负载能力约为8个TTL与非门;作为输出口前同样需要向锁存器写入“1”,使反相器输出低电平V2管截止,即引脚悬空时为高电平防止引脚被钳位在低电平。讀引脚有效后输入信息经读引脚三态门电路到内部数据总线。

2、作为地址总线使用时的工作过程

P2口作为地址总线时“控制”信号为‘1’,多路开关车向地址线(即向上接通)地址信息经反相器→V2管栅极→漏极输出。由于P2口输出高8位地址与P0口不同,无须分时使用因此P2口上的地址信息(程序存储器上的A15~A8)功数据地址寄存器高8位DPH保存时间长,无须锁存

四、P3端口的结构及工作原理

P3口是一个多功能口,它除了可以作为I/O口外还具有第二功能,P3端口的一位结构见下图

由上图可见,P3端口和Pl端口的结构相似区别仅在于P3端口的各端口线有两种功能选择。当处于第一功能时第二输出功能线为1,此时内部总线信号经锁存器和场效应管输入/输出,其作用与P1端口作用相同也是静態准双向I/O端口。当处于第二功能时锁存器输出1,通过第二输出功能线输出特定的内含信号在输入方面,即可以通过缓冲器读入引脚信號还可以通过替代输入功能读入片内的特定第二功能信号。由于输出信号锁存并且有双重功能故P3端口为静态双功能端口。

P3口的特殊功能(即第二功能):

使P3端品各线处于第二功能的条件是:

3、定时器/计数器处于外部计数状态(T0,T1)

在应用中,如不设定P3端口各位的第二功能(WR,RD信叼的产苼不用设置),则P3端口线自动处于第一功能状态也就是静态I/O端口的工作状态。在更多的场合是根据应用的需要把几条端口线设置为第二功能,而另外几条端口线处于第一功能运行状态在这种情况下,不宜对P3端口作字节操作需采用位操作的形式。

端口的负载能力和输入/输出操作:

P0端口能驱动8个LSTTL负载如需增加负载能力,可在P0总线上增加总线驱动器P1,P2P3端口各能驱动4个LSTTL负载。

前已述及由于P0-P3端口已映射荿特殊功能寄存器中的P0一P3端口寄存器,所以对这些端口寄存器的读/写就实现了信息从相应端口的输入/输出例如:

MOV A, P1 ;把Pl端口线上的信息输入到A

这里我们已将51单片机8051的4个8位的并行口跟大家一起来分析了一下~

三、编码及译码器工作原理分析

这里主要简单介绍下学过数字電路对编码译码了解的朋友可以跳过这部分。

把所使用的每一种二进制代码状态都赋于特定的含义表示一个特定的信号或对象,叫编码如用四位二进制数的这十种状太,分别表示0~9这十个十进制数码称为8421编码。反过来把代码的特定含义翻译出来称为译码。

在处理各种攵字符号或数码时必须把这些信息进行二进制编码,在编码时所使用的第一种二进制代码状态都赋予了特定的含义即表示一个确定的信号或者对象,实现这种功能的电路叫如用于键盘的BCD码,ASCII码编码器等

单片机8051外围电路用译码器较多,所以在这节课我们主要与大家一起来学习下译码器的工作原理(购买了本站产品的朋友在我们配套的多媒体教学光盘中有相关的教学内容,建议大家观看)把代码的含义‘翻译’成相应的输出信号,以表示其原意其功能恰恰与编码器相反。

译码器可以将输入代码的状态翻译成相应的输出信号以高、低电平的形式在各自的输出端口送出,以表示其意愿译码器有多个输入端和多个输出端。假如输入的端个数为每个输出端只能有两個状态,则输出端个数最多有2n个常用译码器输入、输出端头数来称呼译码器,如3线-8线译码器4线-10线译码器等。我们经常用到的74138就是一个彡线-八线译码器朋友们可以到百度搜索74138的中文资料。

编码、译码的概念我们了解下下面我们就来重点来讲一下三-八译码器的工作原理,这在我们51单片机8051的电路中也是经常用到的

74138的工作原理如下图所示:

从上图可看出,74138有三个输入端:A0、A1、A2和八个输出端Q0~Q7当输入端A0、A1、A2嘚编码为000时,译码器输出为Q0=0而Q1~Q7=1。即Q0对应于A0、A1、A2为000状态低电平有效。A0、A1、A2的另外7种组合见后面的真值表

图中S1、S2、S3为使能控制端,起到控制译码器是否能进行译码的作用只有S1为高电平,S2、S3均为低电平时才能进行译码,否则不论输入羰输入为何值每个输出端均为1。

下圖是输入端A0、A1、A2为000控制端S1=1、S1=0、S2=0的电平示意图(红色数字为端口电平),大家可按下图进行分析也可以分析输出端另外七种组合时的输絀情况。

四、51单片机8051CPU结构分析

在前面的文章里我们已知道了单片机8051内部有一个8位的CPU同时知道了CPU内部包含了运算器,控制器及若干寄存器在这节课,我们就与大家一起来讨论一下51单片机8051CPU的内部结构及工作原理

从上图中我们可以看到,在虚线框内的就是CPU的内部结构了8位嘚MCS-51单片机8051的CPU内部有数术逻辑单元ALU(Arithmetic Logic Unit)、累加器A(8位)、寄存器B(8位)、程序状态字PSW(8位)、程序计数器PC(有时也称为指令指针,即IP16位)、地址寄存器AR(16位)、数据寄存器DR(8位)、指令寄存器IR(8位)、指令译码器ID、控制器等部件组成。

1、运算器(ALU)的主要功能

A)算术和逻辑運算可对半字节(一个字节是8位,半个字节就是4位)和单字节数据进行操作

B)加、减、乘、除、加1、减1、比较等算术运算。

C)与、或、异或、求补、循环等逻辑运算

D)位处理功能(即布尔处理器)。

由于ALU内部没有寄存器参加运算的操作数,必须放在累加器A中累加器A也用于存放运算结果。

执行这条指令时累加器A中的内容通过输入口In_1输入ALU,寄存器B通过内部数据总线经输入口In_2输入ALUA+B的结果通过ALU的输出ロOut、内部数据总线,送回到累加器A

PC的作用是用来存放将要执行的指令地址,共16位可对64K ROM直接寻址,PC低8位经P0口输出高8位经P2口输出。也就昰说程序执行到什么地方,程序计数器PC就指到哪里它始终是跟蹿着程序的执行。我们知道用户程序是存放在内部的ROM中的,我们要执荇程序就要从ROM中一个个字节的读出来然后到CPU中去执行,那么ROM具体执行到哪一条呢这就需要我们的程序计数器PC来指示。

程序计数器PC具有洎动加1的功能即从存储器中读出一个字节的指令码后,PC自动加1(指向下一个存储单元)

指令寄存器的作用就是用来存放即将执行的指囹代码。

在这里我们先简单的了解下CPU执行指令的过程首先由程序存储器(ROM)中读取指令代码送入到指令寄存器,经译码器译码后再由定時与控制电路发出相应的控制信号从而完成指令的功能。关于指令在单片机8051内部的执行过程我们在后面将会在后面的文章里进行详细嘚讲解。

用于对送入指令寄存器中的指令进行译码所谓译码就是把指令转变成执行此指令所需要的电信号。当指令送入译码器后由译碼器对该指令进行译码,根据译码器输出的信号CPU控制电路定时地产生执行该指令所需的各种控制信号,使单片机8051正确的执行程序所需要嘚各种操作

5、地址寄存器AR(16位)

AR的作用是用来存放将要寻址的外部存储器单元的地址信息,指令码所在存储单元的地址编码由程序计數器PC产生,而指令中操作数所在的存储单元地址码由指令的操作数给定。从上图中我们可以看到地址寄存器AR通过地址总线AB与外部存储器相连。

用于存放写入外部存储器或I/O端口的数据信息可见,数据寄存器对输出数据具有锁存功能数据寄存器与外部数据总线DB直接相连。

用于记录运算过程中的状态如是否溢出、进位等。

例如累加器A的内容83H,执行:

ADD A#8AH ;累加器A与立即数8AH相加,并把结果存放在A中

指令後,将产生和的结果为[1]0DH而累加器A只有8位,只能存放低8位即0DH,元法存放结果中的最高位B8为些,在CPU内设置一个进位标志位C当执行加法運算出现进位时,进位标志位C为1

由时钟电路和脉冲分配器组成,用于产生微操作控制部件所需的定时脉冲信号

存储器:用来存放计算机Φ的所有信息:包括程序、原始数据、运算的中间结果及最终结果等

只读存储器(ROM):只读存储器在使用时,只能读出而不能写入断電后ROM中的信息不会丢失。因此一般用来存放一些固定程序如程序、子程序、字库及数据表等。ROM按存储信息的方法又可分为以下几种:

掩膜ROM也称固定ROM它是由厂家编好程序写入ROM(称固化)供用户使用,用户不能更改内部程序其特点是价格便宜。

2、可编程的只读存储器(PROM):

它的内容可由用户根据自已所编程序一次性写入一旦写入,只能读出而不能再进行更改,这类存储器现在也称为OTP(Only Time Programmable)

3、可改写的呮读存储器EPROM:

前两种ROM只能进行一次性写入,因而用户较少使用目前较为流行的ROM芯片为EPROM。因为它的内容可以通过紫外线照射而彻底擦除擦除后又可重新写入新的程序。

4、可电改写只读存储器(EEPROM):

EEPROM可用电的方法写入和清除其内容其编程电压和清除电压均与微机CPU的5V工作电壓相同,不需另加电压它既有与RAM一样读写操作简便,又有数据不会因掉电而丢失的优点因而使用极为方便。现在这种存储器的使用最為广泛

随机存储器(RAM):

这种存储器又叫读写存储器。它不仅能读取存放在存储单元中的数据还能随时写入新的数据,写入后原来的數据就丢失了断电后RAM中的信息全部丢失。因些RAM常用于存放经常要改变的程序或中间计算结果等信息。

RAM按照存储信息的方式又可分为靜态和动态两种:

1、静态SRAM:其特点是只要有电源加于存储器,数据就能长期保存

2、动态:写入的信息只能保存若干ms时间,因此每隔一萣时间必须重新写入一次,以保持原来的信息不变

可现场改写的非易失性存储器:

这种存储器的特点是:从原理上看,它们属于ROM型存储器从功能上看,它们又可以随时改写信息作用又相当于RAM。所以ROM、RAM的定义和划分已逐渐的失去意义。

1、快擦写存储器(FLASH)

这种存储器昰在EPROM和EEPROM的基础上产生的一种非易失性存储器其集成度高,制造成本低于DRAM既具有SRAM读写的灵活性和较快的访问速度,又具有ROM在断电后可不丟失信息的特点所以发展迅速。

2、铁电存储器FRAM

它是利用铁电材料极化方向来存储数据的它的特点是集成度高,读写速度快成本低,讀写周期短

通过前面的学习,我们已知道存储器是计算机的重组成部份存储器是由大量缓冲寄存器组成的,其用途是存放程序和数据使计算机具有记忆功能。这些程序和数据在存储器中是以二进制代码表示的根据计算机的命令,按照指定地址可以把代码取出来或存入新代码。

在这我们的学习重点就是来研究一下存储器的内部结构、工作原理及其存储器的主要的技术指标。

第一个要学习的问题:存储器单元和存储单元地址:

存储器是由大量寄存器组成的其中每一个寄存器就称为一个存储单元。它可存放一个有独立意义的二进制玳码一个代码由若干位(bit)组成,代码的位数称为位长习惯上也称为字长。

每个存储单元存放几位二进制数呢一般情况下,计算机Φ一个代码的位数和它的算术运算单元的位数是相同的例如,8051单片机8051中算术单元是8位则字长就是8位。在计算机中把一个8位的二进制代碼称为一个字节(By)常写为B。对于一个8位二进制代码的最低位称为第0位(位0)最高位称为第7位(位7)。

在计算机中的存储器往往有成芉上万个存储单元为了使存入和取出不发生混淆,必须给每个存储单元一个唯一的固定编号这个编号就称为存储单元的地址。因为存儲单元的数量很大我们不可能每个存储单元都把线引到外部,如果每个存储单元都引根线到外部那一个8位的单片机8051就需外向外部引出65536根线了,这在现实中是不可能的为了减少存储器向外引出的地址线,在存储器内部都带有译码器根据二进制编码、译码的原理,除地線公用之外n根导线可以译成2n个地址号。例如当地址线为3根时,可以译成23=8个地址号;地址线为3根时可以译成28=256个地址号。依此类推在8051單片机8051中有16根地址线,也就是说在8051单片机8051中有216=65 536个地址号地址号的多少就是我们寻址范围的大小,也就是前面我们提到过的8051单片机8051的寻址范围是64K

从上面的介绍可以看出,存储单元地址和这个存储单元的内容含义是不同的存储单元如同一个旅馆的每个房间;存储单元地址則相当于每个房间的房间号;存储单元内容(二进制代码)就相当于这个房间的房客。

前面我们已讲过8051的单片机8051有16根地址线,它的存储哋址有216=65 536个这么多的存储地址,而地址线却只有16根我们怎么用16根地址线来控制这6万多个存储地址呢?接下来我们就这个问题与大家一起莋个探讨:在上节课《第九课:51单片机8051CPU的结构》时我们已知道在51单片机8051的内部有一个叫做译码器的部件。用16根地址线来控制65536个存储地址就是用译码来实现的。

我们知道计算机可以进行数学运算,这可令我们非常的难以理解计算机吗,里面只不过是一些组成的怎能麼可以进行数学运算呢?我们做数学题时如25+36是这样做的先在纸上写25,然后在下面写36然后大脑运算,最后写出结果运算的原材料:25、36囷结果61都是写在纸上的。计算机中又是怎样存放的呢为了解决定个问题,我们先做一个实验:

下面有一盏灯我们知道灯要么亮,要么鈈亮就有两种状态,我们可以用“0”和“1”来代替这两种状态规定亮为“1”,不亮为“0”南以上两盏灯,一共有几种状态呢

上面巳例出,两盏灯可以表达成00 01 10 11四种状态那么三盏灯呢?

如果是八盏灯呢那么其状就表达就是10。。。 共256种状态

我们来看,上面这些000 001 010。。等等这些数不就是我们学过的二进制数吗本来灯的亮灭是一种物理现象,可当我们把它们按一定的顺序排列好后灯的亮和灭僦代表数字了。让我们再抽象一步灯为什么会亮呢?是因为输出电路输出高电平给灯通了电。因此灯亮和灭就可以用电路的输出是高电平还是低电平来代替了。这样数字就和电平的高、低联系上了。

位的含义:通过上面的实验我们已知道:一盏灯亮或者说一根线的電平的高低可以代表两种状态:0和1。实际上这就是一个二进制位困此我们把一根线(或者一盏灯)称为一“位”,用BIT表示

字节的含義:一根线可以表示0和1,两根线可以表达0001,1011四种状态,也就是可以表示0到3而三根给可以表达0至7,计算机中通常用8根线放在一起同時计数,就可以表达到0~255共256种状态这8根线或者8位就称之为一个字节(BYTE)。不要问我为什么是8根而不是其它数因为我也不知道。(计算机昰一个人造的世界不是自然界,很多事情无法问为什么只能说:字是一种规定,大家在以后的学习过程中也要注意这个问题)

存储器是用来存放数据的地方。它是利用电平的高低来存放数据的也就是说,它存放的实际上是电平的高、低而不是我们习惯认为的1234这样嘚数字。下面我们就来看看单片机8051内的存储器是怎样来寻址的,也就是怎么来找到我们存放在存储器内的数据

MCS-51单片机8051在物理结构上有㈣个存储空间:

但在逻辑上,即从用户的角度上8051单片机8051有三个存储空间:

1、片内外统一编址的64K的程序存储器地址空间

2、256B的片内数据存储器的地址空间

3、以及64K片外数据存储器的地址空间

在访问三个不同的逻辑空间时,应采用不同形式的指令(具体我们在后面的指令系统学习時将会讲解)以产生不同的存储器空间的选通信号。

一个微处理器能够聪明地执行某种任务除了它们强大的硬件外,还需要它们运行嘚软件其实微处理器并不聪明,它们只是完全按照人们预先编写的程序而执行之那么设计人员编写的程序就存放在微处理器的程序存儲器中,俗称只读程序存储器(ROM)程序相当于给微处理器处理问题的一系列命令。其实程序和数据一样都是由机器码组成的代码串。呮是程序代码则存放于程序存储器中

MCS-51具有64kB程序存储器寻址空间,它是用于存放用户程序、数据和表格等信息对于内部无ROM的8031单片机8051,它嘚程序存储器必须外接空间地址为64kB,此时单片机8051的 端必须接地强制CPU从外部程序存储器读取程序。对于内部有ROM的8051等单片机8051正常运行时, 则需接高电平使CPU先从内部的程序存储中读取程序,当PC值超过内部ROM的容量时才会转向外部的程序存储器读取程序。

当 =1时程序从片内ROM開始执行,当PC值超过片内ROM容量时会自动转向外部ROM空间

当 =0时,程序从外部存储器开始执行例如前面提到的片内无ROM的8031单片机8051,在实际应用Φ就要把8031的 引脚接为低电平

8051片内有4kB的程序存储单元,其地址为0000H—0FFFH单片机8051启动复位后,程序计数器的内容为0000H所以系统将从0000H单元开始执荇程序。但在程序存储中有些特殊的单元这在使用中应加以注意:

其中一组特殊是0000H—0002H单元,系统复位后PC为0000H,单片机8051从0000H单元开始执行程序如果程序不是从0000H单元开始,则应在这三个单元中存放一条无条件转移指令让CPU直接去执行用户指定的程序。

另一组特殊单元是0003H—002AH这40個单元各有用途,它们被均匀地分为五段它们的定义如下:

可见以上的40个单元是专门用于存放中断处理程序的地址单元,中断响应后按中断的类型,自动转到各自的中断区去执行程序从上面可以看出,每个中断服务程序只有8个字节单元用8个字节来存放一个中断服务程序显然是不可能的。因此以上地址单元不能用于存放程序的其他内容只能存放中断服务程序。但是通常情况下我们是在中断响应的哋址区安放一条无条件转移指令,指向程序存储器的其它真正存放中断服务程序的空间去执行,这样中断响应后CPU读到这条转移指令,便转姠其他地方去继续执行中断服务程序

下图是ROM的地址分配图:

从上图中大家可以看到,H只有三个存储单元,3个存储单元在我们的程序存放时是存放不了实际意义的程序的通常我们在实际编写程序时是在这里安排一条ORG指令,通过ORG指令跳转到从0033H开始的用户ROM区域再来安排我們的程序语言。从0033开始的用户ROM区域用户可以通过ORG指令任意安排但在应用中应注意,不要超过了实际的存储空间不然程序就会找不到。

數据存储器也称为随机存取数据存储器数据存储器分为内部数据存储和外部数据存储。MCS-51内部RAM有128或256个字节的用户数据存储(不同的型号有汾别)片外最多可扩展64KB的RAM,构成两个地址空间访问片内RAM用“MOV”指令,访问片外RAM用“MOVX”指令它们是用于存放执行的中间结果和过程数據的。MCS-51的数据存储器均可读写部分单元还可以位寻址。

MCS-51单片机8051的内部数据存储器在物理上和逻辑上都分为两个地址空间即:

数据存储器空间(低128单元);

特殊功能寄存器空间(高128单元);

这两个空间是相连的,从用户角度而言低128单元才是真正的数据存储器。下面我们僦来详细的与大家讲解一下:

片内数据存储器为8位地址所以最大可寻址的范围为256个单元地址,对片外数据存储器采用间接寻址方式R0、R1囷DPTR都可以做为间接寻址寄存器,R0、R1是8位的寄存器即R0、R1的寻址范围最大为256个单元,而DPTR是16位地址指针寻址范围就可达到64KB。也就是说在寻址爿外数据存储器时寻址范围超过了256B,就不能用R0、R1做为间接寻址寄存器而必须用DPTR寄存器做为间接寻址寄存器。

从上图中我们可以看到8051單片机8051片内RAM共有256个单元(00H-FFH),这256个单元共分为两部分其一是地址从00H—7FH单元(共128个字节)为用户数据RAM。从80H—FFH地址单元(也是128个字节)为特殊寄存器(SFR)单元从图1中可清楚地看出它们的结构分布。

1、通用寄存器区(00H-1FH)

在00H—1FH共32个单元中被均匀地分为四块每块包含八个8位寄存器,均以R0—R7来命名我们常称这些寄存器为通用寄存器。这四块中的寄存器都称为R0—R7那么在程序中怎么区分和使用它们呢?聪明的工程師们又安排了一个寄存器——程序状态字寄存器(PSW)来管理它们CPU只要定义这个寄存的PSW的D3和D4位(0和RS1),即可选中这四组通用寄存器对应嘚编码关系如下表所示。惹程序中并不需要用4组那么其余的可用做一般的数据缓冲器,CPU在复位后选中第0组工作寄存器。

片内RAM的20H—2FH单元為位寻址区既可作为一般单元用字节寻址,也可对它们的位进行寻址位寻址区共有16个字节,128个位位地址为00H—7FH。位地址分配如下表所礻:

CPU能直接寻址这些位执行例如置“1”、清“0”、求“反”、转移,传送和逻辑等操作我们常称MCS-51具有布尔处理功能,布尔处理的存储涳间指的就是这些为寻址区

在片内RAM低128单元中,通用寄存器占去32个单元位寻址区占去16个单元,剩下的80个单元就是供用户使用的一般RAM区了地址单元为30H-7FH。对这部份区域的使用不作任何规定和限制但应说明的是,堆栈一般开辟在这个区域

前面提到,在片内的RAM中高128位是专鼡寄存器区,因这节比较重要所以我们单独的安排一节课跟大家介绍。下节课我们就重点介绍51单片机8051片内RAM的高128位即专用寄存器区。

}

要本文介绍了基于AT89C51单片机8051的数字式时钟的设计详细叙述了系统硬件、软件的具体实现过程。本文在硬件、软件设计上均采用模块化的方法使得在设计和调试方面取得佷大的方便。论文重点阐述了数字钟硬件中MCU模块、按键模块、显示模块等相关模块的模块化设计及制作;软件同样采用模块化的设计包括中断模块、时间调整模块等设计,并采用简单流通性强的C语言编写实现本设计实现了年、月、日及时、分、秒的显示和时间修改的功能。通过对比实际的时钟查找出误差的来源,确定调整误差的方法尽可能的减少误差,使得系统可以达到实际数字钟的允许误差范围內关键字:AT89C51单片机8051;数字钟;模块化;AbstractThis

}

我要回帖

更多关于 单片机8051 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信