单片机的内部结构911docWord格式.docx
- 文档编号:17397612
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:15
- 大小:34.98KB
单片机的内部结构911docWord格式.docx
《单片机的内部结构911docWord格式.docx》由会员分享,可在线阅读,更多相关《单片机的内部结构911docWord格式.docx(15页珍藏版)》请在冰豆网上搜索。
那它是如何工作的呢?
一个存储器就象一个小抽屉,一个小抽屉里有8个小盒子每个小盒子用来存放1位“电荷”,电荷通过与它相连的电线传进来或释放掉,至于电荷在小盒子里是怎样存放的,这就不用我们操心了,您可以把电线想象成水管,小盒子里的电荷就象是水,那就好理解了存储器中的1个小抽屉我们把它称之为1个“单元”,相当于1个字节,而1个小盒子就相当于1位。
有了这么一个构造,我们就可以开始存放数据了,比如我们要放进一个数据“00011010”,我们只要把第2号、第4号和第5号小盒子里存满电荷,而其它小盒子里的电荷给放掉就行了。
可是问题又出来了,一个存储器有好多相同的单元,线是并联着的(看D7-D0),在放入电荷的时候,会将电荷放入所有的字节单元中,而释放电荷的时候,会把每个单元中的电荷都放掉,这样的话,不管存储器有多少个字节单元,都只能放同一个数,这当然不是我们所希望的。
因此,我们要在结构上稍作变化,看上面的图,在每个单元上有根线与译码器相连,我想要把数据放进哪个单元,就通过译码器给哪个单元发一个信号,由译码器的通过这根线把相应的开关打开,这样电荷就可以自由地进出了。
那么这样是不是就能随意地向存储器写入或者读出数据了呢?
其实还不能,当我们向存储器写入数据时,必须先把这个开关切换到写入端;
而要读出数据时,就得先把开关切换到读出端;
而片选端则是为了区分不同的存储器设置的。
3.半导体存储器的译码
简单介绍一下:
我们知道,1根线可以代表2种状态;
2根线可以代表4种状态;
3根线可以代表8种;
256种状态又需要几根线代表?
8根线,所以一片6264存储器我们只需要16根线就可以了。
4.存储器的选片及总线的概念至此,译码的问题解决了,让我们再来关注另外一个问题:
送入每个字节的8根线又是从什么地方来的呢?
它就是从单片机的外部引脚上接过来的,一般这8根线除了接一个存储器之外,还要接其它的器件,这样问题又出来了,这8根线既然不是存储器和单片机之间专用的,如果总是将某个单元接在这8根线上,就不行了,比如这个存储器单元中的数值是“FFH”,另一个存储器的单元是“00H”,那么这根线到底是处于高电平,还是低电平?
岂不是要打架看谁历害了?
所以我们必须让它们分离。
办法当
然也简单,当外面的线接到集成电路的引脚上来后,不直接接到各单元去,中间再加一组开关就行了。
这组开关就是前面提到的控制器(看前面的图),平时我们让开关打开着,如果确实是要向这个存储器中写入数据,或要从存储器中读出数据,再让开关切换到相应的位置就行了。
这组开关由三根引线选择读控制端、写控制端和片选端,要将数据写入,先由控制器选中该片,然后发出相应的写信号,开关切换到相应的位置,并将传过来的数据(电荷)写入片中;
如果要读信号,先选中该片,然后发出读信号,开关也切换到相应的位置上,数据就被送出去了;
另外读和写信号还同时受到译码器的控制,由于选端的不同,所以虽有读或写信号,但没有片选信号,所以另一个存储器就不会“误会”而开门,造成冲突,那么会不会同时选中两个存储器呢?
只要是设计好的系统就不会,因为它是由计算机来控制的,如
果真的出现同时选中两个存储器的话,那就是电路出故障了。
如此看来,存储器要想写入或者读出数据还真是不简单,不过好在这些都是由计算机自动完成的,不需要我们去操心。
从上面的介绍中我们已经看到,用来传递数据的8根线(51单片机是8根)并不是专用的,而是很多器件大家共用的,所以我们把它们称之为数据总线(总线英文名为BUS),即公交道,谁都可以走;
而16根地址线(51单片机共有16根地址线,这些以后会讲解,这里不必死记硬背)也是连在一起的,我们把它们称之为地址总线,
5.半导体存储器的分类
第一课中我们提到过,89C51是一种带FlashROM的单片机,什么是FlashROM?
它到底是一种什么东西呢?
ROM我们已经知道,是只读存储器,所谓只读,从字面上理解那就是只可以从里面读出数据,而不能写进去,它类似于我们的书本,发到我们手里之后,我们只能读里面的内容,不可以随意更改书本上的内容。
ROM就是单片机中用来存放程序的地方,前面我们下载到单片机的指令就放在这个地方。
讲到这里大家也许会感到困惑,既然ROM是只读存储器,那么指令又是如何进入其中的呢?
其实所谓的只读只是针对正常工作情况下而言,也就是在使用这块存储器的时候,而不是指制造这块芯片的时候,只要让存储器满足一定的条件就能把数据预先写进去,这个道理也很好理解,书本拿到我们手里是不能改了,但当它还是原材料--白纸的时候,我们完全可以由印刷厂把内容印上去嘛。
前面的编程就是这么回事!
FlashROM是一种快速存储式只读存储器,这种程序存储器的特点就是既可以电擦写,而且掉电后程序还能保存,编程寿命可以达到几千至几万次,所以我们的实验系统是可以反复烧写的,您尽管使用。
目前新型的单片机都采用这种程序存储器;
当然,除了这种程序存储器外,还有两种早期的程序存储器产品,简单介绍一下:
PROMEPROM和EEPROM,PROM称之为可编程只读存储器,就象我们的练习本,买来的时候是空白的,可以写东西上去,可一旦写上去,就擦不掉了,所以它只能写一次,要是写错了,就报废了,习惯上我们把带这种程序存储器的单片机称为OTP型单片机,如果您的产品批量生产,又要求价格比较低的话,带这种程序存储器的单片机是非常合适的;
EPROM,称之为紫外线擦除的可编程只读存储器,它里面的内容写上去之后,如果觉得不满意,可以用一种特殊的方法去掉后重写,就是用紫外线照射,紫外线就象“消字灵”,可以把字去掉,然后再重写,当然消的次数多了,也就不灵光了,所以这种芯片可以擦除的次数也是有限的——几百次吧,电脑上的BIOS芯片采用的就是这种结构的存储器;
EEPROM,前一种存储器的擦写要用紫外线,而这种存储器可以直接用电擦写,比较方便数据的改写,它有点类似于FLASH存储器,但比FLASH存储器速度要慢,现在新型的外部扩展存储器都是都是这种结构。
了解了ROM,让我们再来简单讲讲另一种存储器,叫随机存取存储器,也叫内存,英文缩写为RAM(RandomAccessMemory),它是一种既可以随时改写,也可以随时读出里面数据的存储器,类似于我
们上课用的黑板,可以随时写东西上去,也可以用黑板擦随时擦掉重写,它也是单片机中重要的组成部分,单片机中有很多的功能寄存器都与它有关。
二.本课总结
本课主要讲述了单片机的两种半导体存储器—只读存储器ROM和随机存储器RAM的工作原理,它们是单片机的重要组成部分,了解它的内部结构对我们学习单片机是很有帮助的。
不过如果您一时对本课的内容还无法搞得很明白,也没有关系,随着学习的深入,我们还会慢慢地讲解相应的基础知识,可千万不要放弃哟?
我在没有学会单片机之前也是如此囫囵吞枣的。
?
单片机内部结构
(二)
一.LED灯闪烁的实验程序
我们要让LED1不断的闪烁,就象大海中用的航标灯。
怎样才能让LED1不断的闪烁呢?
实际上就是让它亮几秒,再灭几秒,也就是让P1.0交替地输出高电平或低电平,按照前面所学的知识,我们写出下面的程序:
CLRP1.0;
SETBP1.0;
编译后下载到单片机?
这里有两个问题:
首先计算机执行指令的速度很快,执行完第1条指令后LED1是灭了,但在极短的时间内又去执行第2条指令,LED1又亮了,我们根本无法看到灯曾经灭过;
第二个问题是当执行完第2条指令后,不会再去执行第1条指令了,因为单片机执行指令的过程是一条一条地顺序执行的。
如何解决这两个问题呢?
我们可以作如下的设想:
第一,执行完第1条指令后让单片机延时一段时间(几秒或零点几秒),然后再去执行第2条指令,这样就可以看到LED1曾经灭过了;
第二,让单片机执行完全部指令后再返回去执行第1条指令,如此不断的循环就可以达到我们的要求了。
实验程序如下:
主程序
MAIN:
SETBP1.0;
(1)
LCALLDELAY;
(2)
CLRP1.0;
(3)
(4)
LJMPMAIN;
(5)
子程序
DELAY:
MOVR7,#250;
(6)
D1:
MOVR6,#250;
(7)
D2:
DJNZR6,D2;
(8)
DJNZR7,D1;
(9)
RET;
(10)
END.
(11)
还记得软件的使用方法吗?
调试,写入源代码,编译,下载到单片机,看看是不是我们想要的结果?
?
在分析这段程序之前,先来说明几个标点符号的意义:
1.分号在这里起一个分隔符的作用,表示这条指令到此为止;
2.括号内的数字在这里是为了解释程序用的,实际的编译过程中是没有意义的,也就是说没有也是一样的,只是为了程序的可读性更强,我们一般会在分号的后面加上程序的注释文字(后面我们会用到);
3.特别?
:
程序中的标点符号只能在英文状态下输入,当使用中文输入时,必须切换到半角状态,不然编译软件会出错。
接下来我们分析一下这段程序:
按照我们的要求,第1条,让灯灭,第2条应该是延时,第3条是让灯亮,第4条和第2条一样也应该是延时,第5条应当返回去执行第1条指令。
看一下上面的程序,第1条我们已经懂了,是让LED1灭,第2条和第4条我们等一下讨论,第5条是LJMPMAIN,LJMP是一条指令,意思是转移,转移到什么地方去呢?
看一下LJMP后面跟着什,是MAIN,什么地方有MAIN,在第1条指令的开头就是MAIN,所以第5条指令的意思就是跳转到MAIN(即第1条指令处继续执行),如此一来,就不断地重复执行这些指令。
那么MAIN又是什么意思呢?
它实际上是我们为这段程序起的
一个名称,专业术语叫标号,既然是一个名称那可不可以用mcu,CHINA等等的其他名字呢?
当然可以,这完全取决于您的需要(?
不过也有一些是不能采用的,我们以后再讲)。
再来分析第2条和第4条指令,看看它们是如何实现延时的?
LCALLDELAY,LCALL也是一条指令,这条指令叫做调用子程序指令,看看LCALL后面跟着的是什么--DELAY,哪里有DELAY,在第6条指令的开头,很显然这也是一个标号,这条指令的作用就是当执行到这条指令时就转去执行LCALL后面标号所在处的程序,如果在执行程序时遇到RET指令(RET叫返回指令),就返回到LCALL指令的下面一条(即第3条指令)处继续执行,在第9条指令后确实有RET指令,那么在执完第2条指令后就应该去执行第6.7.8.9条指令,之后遇到第10条指令:
RET,执行完这条指令后就回去执行第3条指令,将P1.0清零,也就是让LED1亮,然后再去执行第4条指令,执行完后又回到6.7.8.9.10
条指令,最后执行第5条指令:
LJMPMAIN,也就是我们刚才说的跳转到第1条,将P1.0置位,就是LED1
灭掉。
如此周而复始,LED1就不断的闪烁。
好好理解这段文字,务必把它搞清楚!
!
从标号DELAY处(即第6条)开始到RET的这一段指令我们称之为子程序,它是一段延时程序,至于延时多长时间,我们会在以后的课程中学习。
程序的最后一条是END,它不是指令,它只是告诉编译软件整个程序到此结束了,它叫“伪指令”。
在大家以后的编程中,写完程序都要加上这一条。
在上面的程序中我们知道了从标号DELAY开始的子程序是一段延时程序,那么它又是如何工作的呢?
在了解它的工作过程之前我们必须先知道其中的一些符号,就从R7开始吧,它是单片机内部的一个重要组成部分,叫工作寄存器,什么是工作寄存器?
下面我们就来讲解这个问题:
二.工作寄存器
上一课我们已经讲过,在单片机中有许多的功能寄存器和半导体存储器RAM有关,那么工作寄存器又属于哪一部分呢?
它是用来干什么的呢?
要搞清楚这个问题,让我们先从日常生活中的一个例子说起,如我们要做一道数学题123+456,您会马上得出答案:
579,接下来再看一道题:
123+456+789,要你马上得出答案就不那么容易了,通常我们会怎么做呢?
一般总是先把123+456的结果
579写在一张纸上,然后再算579+789=1368,这1368就是我们想要的最终结果,而579只是为了得到最终结果而暂时记下来的中间结果,单片机中做运算和我们生活中做运算一样,也需要把中间结果放在某个地方,那么计算机把它放在哪儿呢?
前面我们提到的ROM(只读存储器)中,不行!
因为ROM是用来存放程序的,它只能写进去,能读出来(再次提醒一下,这只是相对而已),所以只能放在单片机的另一个区域—RAM中(即随机存取存储器)中。
R7就是RAM区域中划出的一部分。
知道了R7,接下来让我们来分析一下这段子程序(延时程序)。
三.LED灯闪烁程序子程序的分析
首先看第6条,MOVR7,#250,这也是一条指令,意思是传递数据。
我们知道在日常生活中,要传递一件东西就必须要有一个传递者,一个接受者和被传递的东西,那么在单片机中是怎么区分它们的呢?
在这条指令中,R7是接受者,250就是要传递的东西(单片机中要传递的东西当然是数字了),这
里传递者被省略了(顺便提一下,并不是每条指令都能省略的,事实上大部分的指令都要有传递者)
,这样一来,这条指令的意思也很清楚了:
就是把250这个数传递给R7这个工作寄存器(也就是把250个数送入R7中),这样执行完这条指令后R7中的值就应该是250,我们可以用DUBG8051这个软件来验证一下,看是不是符合。
讲到这里,不知大家注意没有,在250这个数的前面有个#,它是什么意思呢?
这个#就说明250是一个被传递的数的本身,而不是传递者。
看懂了MOVR7,#250,那么MOVR6,#250也应该很清楚了。
接着看第8条DJNZR6,D2,这又是另一条指令,我们来看一下DJNZ后面跟着什么,一个是R6,一个是D2,R6我们已经知道了,再找一下D2,D2在本行的开头,我们已经学过,它是标号。
那么这条指令是怎么执行的呢?
它的执行过程是这样的:
它将后面的值(即工作寄存器R6中的值)减1,然后查一下这个值是否等于“0”,如果等于“0”就往下执行,如果不等于“0”就转移,转移到什么地方去呢?
大家应该明白了,实际上这条指令的执行结果就是在原地转250次;
当R6中的值等于“0”之后,程序就去执行第9条指令,也就是DJNZR7,D1,大家自行分析一下这条指令的结果(是不是转去执行MOVR6,#250,同时R7中的值减1),这段子程序的最终执行结果就是DJNZR6,#250这条指令被16执行了250*250=62500次,执行这么多次干吗?
就是为了延时。
单片机内部结构(三)
1.时序的由来
已经知道单片机执行指令的过程就是顺序地从ROM(程序存储器)中取出指令一条一条的顺序执行,然后进行一系列的微操作控制,来完成各种指定的动作。
它在协调内部的各种动作时必须要有一定的顺序,换句话说,就是这一系列微操作控制信号在时间上要有一个严格的先后次序,这种次序就是单片机的时序。
就好比学校上课时用的电铃,为了保证课堂秩序,学校就必须在铃声的统一协调下安排各个课程和活动。
那么单片机的时序是如何规定的呢?
2.时序的周期?
计算机每访问一次存储器的时间,我们把它称为一个机器周期,它是一个时间基准,就象我们日常生活中使用的秒一样,计算机中一个机器周期包括12个振荡周期,什么是振荡周期?
一个振荡周期是多少时间?
振荡周期就是振荡源的周期,也就是我们使用的晶振的时间周期,一个12M的晶振,它的时间周期是多少,如果电子技术学得好的朋友应该不难算出(T=1/f),也就是1/12(微秒),那么使用12M晶振的单片机,它的一个机器周期就应该等于12*1/12(微秒),也就是1μS。
在MCS-51系列单片机中,有些指令只要一个机器周期,而有些指令则需要两个或三个机器周期,另外还有两条指令需要4个机器周期,这也不难理解,你在家擦地板的话总比擦桌子的时间要长,不过我可是大男子主义,从来不做家务的。
开句玩笑!
如何衡量指令执行时间的长短?
我们就要用到一个新的概念:
指令周期—即执行一条指令所需的机器周期,INTEL公司规定了每一条指令执行的机器周期,当然这不需要我们非把它记住,不过在这里DJNZ指令我们是要记住的,它是双周期指令,执行一次需要两个机器周期,即2μS。
(12M晶振的话),回到我们上一课的实验,延时的时间就应该算出来了吧,是62500*2μS=125000μS,也就是125mS。
这么大的数字也就0.125S,怪不得LED1闪烁的这么快。
二.单片机的时钟电路,单片机是在一定的时序控制下工作的,那么时序和时钟又有什么关系呢?
时钟是时序的基础,单片机本身就如同一个复杂的同步时序电路,为了保证同步工作方式的实现,电路就要在唯一的时钟信号控制下按时序进行工作。
那么单片机内的时钟是如何产生的呢?
1.内部时钟电路
在MCS-51单片机的内部有一个高增益的反相放大器,其输入端为引脚XTL1(19),输出端为XTL2
我们只要在外部接上两个电容和一个晶振,就能构成一个稳定的自激振荡器,它的内部电路的工作原理就不介绍了,这里主要讲一下电容和晶振的选择,看上面的图,晶振的大小与单片机的振荡频率有关,我们到串行接口时再详细讲解,电容的大小影响着振荡器振荡的稳定性和起振的快速性,通常选择10-30P的瓷片电容或校正电容;
另外在设计电路时,晶振和电容应尽可能的靠近芯片,以减少PCB板的分布电容保证振荡器振荡工作的稳定性,提高系统的抗干扰能力
2.外部时钟电路
除了内部时钟方式外,单片机还可以采用外部引入时钟的振荡方式,什么时候需要采用外部时钟方式呢?
当我们的系统由多片单片机组成时,为了保证各单片机之间时钟信号的同步,就应当引入唯一的公用的外部脉冲信号作为各单片机的振荡脉冲,此时应将XTAL2悬空不用,外部脉冲信号由XTAL1引入,如上右图所示,外部信号的高低电平持续时间应大于20mS,
单片机内部结构(四)
一.单片机I/O口的输出实验
1.实验程序
程序如下:
LOOP:
MOVP1,#0FFH;
LCALLDELAY;
MOVP1,#00H;
LJMPLOOP;
调试,写入源代码,编译,下载,看到了什么?
8只LED灯都在闪烁(注意:
前面的实验是让一个LED灯闪烁),分析一下程序:
2.程序分析
这段程序和前面的程序比较,有两处不同,第1条,原来是SETBP1.0,现在改为MOV?
P1,#0FFH,第3条,原来是CLR?
P1,现在改为MOV?
P1,#00H。
为什么这样改了之后就变成了8只LED灯同时闪烁了?
原来P1代表了P1.7-P1.0的全部,我们把它当作一个存储器单元(即一个字节),不过对一个存储器单元送数就应该用MOV指令了;
在这里P1(P1.7-P1.0)接的是LED灯(也就是负载),它起到了一个输出端的作用。
那如果把P1改为P2或P3或P4行不行呢?
答案是肯定的,为什么?
我们稍后再谈,接着看第2个实验。
二.单片机I/O口的输入实验
MOVP3,#0FFH;
把程序下载到单片机,按下第1个按钮,第1个LED灯亮了,按下第2个按钮,第2个LED灯亮了,松开按钮,相应的灯就灭了,是不是有点象工业控制中的点动控制原理。
分析一下这个程序:
看附图的硬件接线图,有4个按钮分别接到了P3.2,P3.3,P3.4,P3.5,引脚上。
再来分析一下程序,第1条,使P3口(包括P3.7-P3.0)全部为高电平(为什么MOVP3,#0FFH能使P3口全部为高电平,我们在下一课中讨论);
第2条MOV?
A,P3;
MOV我们已经知道,是送数的意思,这条指令的意思就是把P3口的数送到A中去,A是什么呢?
我们也可以把它看成一个中间单元,就象R7寄存器一样,第3条指令就是把A中的数送到P1口去;
第4条是循环,这些我们都已经见过,当我们按下P3.2所连接的按钮时,#0FFH这个数就被送到了A中,通过程序又送到了P1,使P1.2输出低电平,LED3就亮了,按下P3.3-P3.5连接的按钮,对应的LED4-LED6也亮了,松开按钮,相应的LED灯就灭了。
如果把按钮接到P2.0-P2.7或P4.0-P4.7可不可以呢?
当然可以。
所以在这里P3口又起到了一个输入端的作用。
由上面两个实验我们得出结论,凡是以P开头的管脚都可以用作输入输出口,在89C51中这32个管脚我们就称之为并行口。
它们实际上就是特殊功能存储器SFR(什么是特殊功能寄存器,我们后面再讲)中的四个,记作P0,P1,P2,P3,它们都是双向通道,即既可以作为输出口,也可以作为输入口,作输出时数据可以锁存,作输入时数据可以缓冲,那么它们是怎么实现输入输出功能的呢?
继续往下看。
三.单片机并行口的结构分析先来看看输入结构:
1.输入结构
I/O口作为输入口时有两种工作方式,即所谓的读端口与读引脚。
读端口时实际上并不从外部读入数据,而是把端口锁存器的内容读入到内部总线,经过某种运算或变换后再写回到端口锁存器。
比如取反,置位,清零等等指令;
而读端口时才真正地把外部的数据读入到内部总线,图中的两个三角形表示的就是输入缓冲器,CPU将根据不同的指令,分别发出“读端口”或“读引脚”信号,以完成不同的操作,这是硬件自动完成的,不需要我们操心。
读引脚时,也就是把端口作为外部输入线时,首先要通过外部指令把端口锁存器置“1”,然后再实行读引脚操作,否则就可能读入出错。
为什么?
看上面的图,如果不对端口置“1”,端口锁存器原来的状态有可能为“0”(Q端为0,Q^为1)加到场效应管栅极的信号为“1”,该场效应管就导通,对地呈现低阻抗,此时即使引脚上输入的信号为“1”,也
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 内部结构 911 doc