您好,欢迎访问三七文档
当前位置:首页 > 机械/制造/汽车 > 机械/模具设计 > 第2讲MCS-51单片机外部结构和工作原理
标题:MCS-51单片机的外部结构和工作原理教学目标与要求:熟练掌握MCS-51单片机的工作原理、MCS-51单片机存储器配置。掌握MCS-51单片机芯片的外部引脚及功能。理解单片机时钟电路、CPU的时序、复位电路、输入/输出端口结构和工作原理。授课时数:4学时教学重点:MCS-51单片机的工作原理、MCS-51单片机存储器结构的结构及存储器配置教学内容及过程:引入:由于前面的学习我们已经简单了解单片机的特点及开发过程,我们为了更好的使用单片机来为我们服务,我们从使用的角度全面了解单片机外部结构及其工作原理及基本电路:一、单片机的外部结构:40个引脚大致可分为4类:电源、时钟、控制和I/O引脚。⒈电源:⑴VCC-芯片电源,接+5V;⑵VSS-接地端;⒉时钟:XTAL1、XTAL2-晶体振荡电路反相输入端和输出端。⒊控制线:控制线共有4根,⑴ALE/PROG:地址锁存允许/片内EPROM编程脉冲①ALE功能:用来锁存P0口送出的低8位地址②PROG功能:片内有EPROM的芯片,在EPROM编程期间,此引脚输入编程脉冲。⑵PSEN:外ROM读选通信号。⑶RST/VPD:复位/备用电源。①RST(Reset)功能:复位信号输入端。②VPD功能:在Vcc掉电情况下,接备用电源。⑷EA/Vpp:内外ROM选择/片内EPROM编程电源。①EA功能:内外ROM选择端。②Vpp功能:片内有EPROM的芯片,在EPROM编程期间,施加编程电源Vpp。⒋I/O线80C51共有4个8位并行I/O端口:P0、P1、P2、P3口,共32个引脚。P3口还具有第二功能,用于特殊信号输入输出和控制信号(属控制总线)。二、单片机工作的条件拿到一块芯片,想要使用它,首先必须要知道怎样连线,我们用的一块称之为89C51的芯片,下面我们就看一下如何给它连线。1、电源:这当然是必不可少的了。单片机使用的是5V电源,其中正极接40引脚,负极(地)接20引脚。2、振蒎电路:单片机是一种时序电路,必须提供脉冲信号才能正常工作,在单片机内部已集成了振荡器,使用晶体振荡器,接18、19脚。只要买来晶振,电容,连上就可以了,按图1接上即可。3、复位引脚:按图1中画法连好,至于复位是何含义及为何需要复要复位,在单片机功能中介绍。4、EA引脚:EA引脚接到正电源端。至此,一个单片机就接好,通上电,单片机就开始工作了。见图2:图2三、课题二:信号灯的设计我们的这任务是要用单片机点亮一只发光二极管LED,显然,这个LED必须要和单片机的某个引脚相连,否则单片机就没法控制它了,那么和哪个引脚相连呢?单片机上除了刚才用掉的5个引脚,还有35个,其中32个是输入、输出端口,我们可以通过他们控制外部电路,我们可以用其中一个端口,例如P1.0口控制电路,例如接成如下电路,见图3:图3单片机能正常工作了,但如何叫它按我们的想法工作呢,叫人做事,说一声就可以,这叫发布命令,要计算机做事,也得要向计算机发命令,计算机能听得懂的命令称之为计算机的指令。让一个引脚输出高电平的指令是SETB,让一个引脚输出低电平的指令是CLR。因此,我们要P1.0输出高电平,只要写SETBP1.0,要P1.0输出低电平,只要写CLRP1.0就可以了。现在我们已经有办法让计算机去将P10输出高或低电平了,但是我们怎样才能计算机执行这条指令呢?总不能也对计算机也说一声了事吧。要解决这个问题,还得有几步要走。第一,计算机看不懂SETBCLR之类的指令,我们得把指令翻译成计算机能懂的方式,再让计算机去读。计算机能懂什么呢?它只懂一样东西——数字。因此我们得把SETBP1.0变为(D2H,90H),把CLRP1.0变为(C2H,90H),至于为什么是这两个数字,这也是由51芯片的设计者--INTEL规定的,我们不去研究。第二步,在得到这两个数字后,怎样让这两个数字进入单片机的内部呢?这要借助于一个硬件工具编程器。我们将编程器与电脑连好,运行编程器的软件,然后在编缉区内写入(D2H,90H)见图2,写入……好,拿下片子,把片子插入做好的电路板,接通电源……什么?灯不亮?这就对了,因为我们写进去的指令就是让图2的P1.0输出高电平,灯当然不亮,要是亮就错了。现在我们再拨下这块芯片,重新放回到编程器上,将编缉区的内容改为(C2H,90H),也就是CLRP1.0,写片,拿下片子,把片子插进电路板,接电,好,灯亮了。因为我们写入的指令就是让P10输出低电平的指令。这样我们看到,硬件电路的连线没有做任何改变,只要改变写入单片机中的内容,就可以改变电路的输出效果。当然今后我们写完命令即可,翻译和写入单片机的过程我们一般用计算机来辅助完成。通过上面的例子我们可以总结出让单片机完成一个任务的步骤是:1、分析任务(选择方案)2、画硬件电路(硬件设计)3、下命令(软件设计)4、观察结果(程序调试)下面我们要让灯不断地闪烁,这就有一定的实用价值了,比如可以把它当成汽车上的一个信号灯用了。怎样才能让灯不断地闪烁呢?实际上就是要灯亮一段时间,再灭一段时间,也就是说要P10不断地输出高和低电平。怎样实现这个要求呢?请考虑用下面的指令是否可行:SETB.P1.0CLR.P1.0……这是不行的,有两个问题,第一,计算机执行指令的时间很快,执行完SETBP10后,灯是灭了,但在极短时间(微秒级)后,计算机又执行了CLRP10指令,灯又亮了,所以根本分辨不出灯曾灭过。第二,在执行完CLRP10后,不会再去执行SETBP10指令,所以以后再也没有机会让灭了。为了解决这两个问题,我们可以做如下设想,第一,在执行完SETBP10后,延时一段时间(几秒或零点几秒)再执行第二条指令,就可以分辨出灯曾灭过了。第二在执行完第二条指令后,让计算机再去执行第一条指令,不断地在原地兜圈,我们称之为循环,这样就可以完成任务了。以下先给出程序(后面括号中的数字是为了便于讲解而写的,实际不用输入):;主程序:LOOP:SETBP10;(1)LCALLDELAY;(2)CLRP10;(3)LCALLDELAY;(4)AJMPLOOP;(5);以下子程序DELAY:MOVR7,#250;(6)D1:MOVR6,#250;(7)D2:DJNZR6,D2;(8)DJNZR7,D1;(9)RET;(10)END;(11)按上面的设想分析一下前面的五条指令。第一条是让灯灭,第二条应当是延时,第三条是让灯亮,第四条和第二条一模一样,也是延时,第五条应当是转去执行第一条指令。第二和第四条实现的原理稍后谈,先看第五条,LJMP是一条指令,意思是转移,往什么地方转移呢?后面跟的是LOOP,看一下,什么地方还有LOOP,对了,在第一条指令的前面有一个LOOP,所以很直观地,我们可以认识到,它要转到第一条指令处。这个第一条指令前面的LOOP被称之为标号,它的用途就是给这一行起一个名字,便于使用。是否一定要给它起名叫LOOP呢?当然不是,起什么名字,完全由编程序的人决定,可以称它为A,X等等,当然,这时,第五条指令LJMP后面的名字也得跟着改了。第二条和第四条指令的用途是延时,它是怎样实现的呢?指令的形式是LCALL,这条指令称为调用子程序指令,看一下指令后面跟的是什么,DELAY,找一下DELAY,在第六条指令的前面,显然,这也是一个标号。这条指令的作用是这样的:当执行LCALL指令时,程序就转到LCALL后面的标号所标定的程序处执行,如果在执行指令的过程中遇到RET指令,则程序就返回到LCALL指令的下面的一条指令继续执行,从第六行开始的指令中,可以看到确实有RET指令。在执行第二条指令后,将转去执行第6条指令,而在执行完6,7,8,9条指令后将遇到第10条令:RET,执行该条指令后,程序将回来执行第三条指令,即将P10清零,使灯亮,然后又是第四条指令,执行第四条指令就是转去执行第6,7,8,9,10条指令,然后回来执行第5条指令,第5条指令就是让程序回到第1条开始执行,如此周而复始,灯就在不断地亮、灭了。在标号DELAY标志的这一行到RET这一行中的所有程序,这是一段延时程序,大概延时零点几秒,至于具体的时间,以后我们再学习如何计算。程序的最后一行是END,这不是一条指令,它只是告诉我们程序到此结束,它被称为伪指令。对这程序的分析如下:(一)、延时程序分析在这里,我们要知道,程序中的符号R7、R6是代表了一个个的RAM单元,是用来放一些数据的,下面我们再来看一下其它符号的含义。DELAY:MOVR7,#250;(6)D1:MOVR6,#250;(7)D2:DJNZR6,D2;(8)DJNZR7,D1;(9)RET;(10)MOV:这是一条指令,意思是传递数据。说到传递,我们都很清楚,传东西要从一个人的手上传到另一个人的手上,也就是说要有一个接受者,一个传递者和一样东西。从指令MOVR7,#250中来分析,R7是一个接受者,250是被传递的数,传递者在这条指令中被省略了(注意:并不是每一条传递指令都会省的,事实上大部份数据传递指令都会有传递者)。它的意义也很明显:将数据250送到R7中去,因此执行完这条指令后,R7单元中的值就应当是250。在250前面有个#号,这又是什么意思呢?这个#就是用来说明250就是一个被传递的东西本身,而不是传递者。那么MOVR6,#250是什么意思,应当不用分析了吧。DJNZ:这是另一条指令,我们来看一下这条指令后面跟着的两个东西,一个是R6,一个是D2,R6我们当然已知是什么了,查一下D2是什么。D2在本行的前面,我们已学过,这称之为标号。标号的用途是什么呢?就是给本行起一个名字。DJNZ指令的执行过程是这样的,它将其后面的第一个参数中的值减1,然后看一下,这个值是否等于0,如果等于0,就往下执行,如果不等于0,就转移,转到什么地方去呢?可能大家已猜到了,转到第二个参数所指定的地方去(请大家用自已的话讲一下这条语句是怎样执行的)。本条指令的最终执行结果就是,在原地转圈250次。执行完了DJNZR6,D2之后(也就是R6的值等于0之后),就会去执行下面一行,也就是DJNZR7,D1,请大家自行分析一下这句话执行的结果。(转去执行MOVR6,#250,同时R7中的值减1),最终DJNZR6,D2这句话将被执行250*250=62500次,执行这么多次同一条指令干吗?就是为了延时。一个问题:如果在R6中放入0,会有什么样的结果。(二)、时序分析:前面我们介绍了延时程序,但这还不完善,因为,我们只知道DJNZR6,D2这句话会被执行62500次,但是执行这么多次需要多长时间呢?是否满足我们的要求呢?我们还不知道,所以下面要来解决这个问题。先提一个问题:我们学校里什么是最重要的。(铃声)校长可以出差,老师可以休息,但学校一日无铃声必定大乱。整个学校就是在铃声的统一指挥下,步调一致,统一协调地工作着。这个铃是按一定的时间安排来响的,我们可以称之为“时序;时间的顺序”。一个由人组成的单位尚且要有一定的时序,计算机当然更要有严格的时序。事实上,计算机更象一个大钟,什么时候分针动,什么时候秒针动,什么时候时针动,都有严格的规定,一点也不能乱。计算机要完成的事更复杂,所以它的时序也更复杂。我们已知,计算机工作时,是一条一条地从ROM中取指令,然后一步一步地执行,我们规定:计算机访问一次存储器的时间,称之为一个机器周期。这是一个时间基准,好象我们人用“秒”作为我们的时间基准一样,为什么不干脆用“秒”,多好,很习惯,学下去我们就会知道用“秒”反而不习惯。一个机器周期包括12个时钟周期。下面让我们算一下一个机器周期是多长时间吧。设一个单片机工作于12M晶振,它的时钟周期是1/12(微秒)。它的一个机器周期是12*(也就是1微秒。(请计算一个工作于6M晶振的单片机,它的机器周期是多少)。1/12)MCS-51单片机的所有指令中,有一些完成得比较快,只要一个机器周期就行了,有一些完成得比较慢,得要2个机器周期,还有两条指令要4个机器周期才行。这也不难再解,不是吗?我让你扫地的执行要完成总得比要你完成擦
本文标题:第2讲MCS-51单片机外部结构和工作原理
链接地址:https://www.777doc.com/doc-2192356 .html