单片机的内外部结构剖析
一、延时程序剖析
上一次课中,咱们现已知道,程序中的符号R7、R6是代表了一个个的RAM单元,是用来放一些数据的,下面咱们再来看一下其它符号的含义。
DELAY: MOV R7,#250 ;(6)
D1: MOV R6,#250 ;(7)
D2: DJNZ R6,D2 ;(8)
DJNZ R7,D1 ;(9)
RET ;(10)
1.MOV:这是一条指令,意思是传递数据。提到传递,咱们都很清楚,传东西要从一个人的手上传到另一个人的手上,也便是说要有一个接受者,一个传递者和相同东西。从指令MOV R7,#250中来剖析,R7是一个接受者,250是被传递的数,传递者在这条指令中被省掉了(留意:并不是每一条传递指令都会省的,事实上大部份数据传递指令都会有传递者)。它的含义也很明显:将数据250送到R7中去,因而履行完这条指令后,R7单元中的值就应当是250。在250前面有个#号,这又是什么意思呢?这个#便是用来阐明250便是一个被传递的东西自身,而不是传递者。那么MOV R6,#250是什么意思,应当不必剖析了吧。
2.DJNZ:这是另一条指令,咱们来看一下这条指令后边跟着的两个东西,一个是R6,一个是D2,R6咱们当然已知是什么了,查一下D2是什么。D2在本行的前面,咱们已学过,这称之为标号。标号的用处是什么呢?便是给本行起一个姓名。DJNZ指令的履行进程是这样的,它将这今后边的榜首个参数中的值减1,然后看一下,这个值是否等于0,假如等于0,就往下履行,假如不等于0,就搬运,转到什么当地去呢?或许咱们已猜到了,转到第二个参数所指定的当地去(请大家用自已的话讲一下这条句子是怎样履行的)。本条指令的终究履行成果便是,在原地转圈250次。
3.履行完了DJNZ R6,D2之后(也便是R6的值等于0之后),就会去履行下面一行,也便是DJNZ R7,D1,请咱们自行剖析一下这句话履行的成果。(转去履行MOV R6,#250,一起R7中的值减1),终究DJNZ R6,D2这句话将被履行250*250=62500次,履行这么屡次同一条指令干吗?便是为了延时。
4.一个问题:假如在R6中放入0,会有什么样的成果。
二、时序剖析:
前面咱们介绍了延时程序,但这还不完善,由于,咱们只知道DJNZ R6,D2这句话会被履行62500次,可是履行这么屡次需求多长时刻呢?是否满意咱们的要求呢?咱们还不知道,所以下面要来处理这个问题。
先提一个问题:咱们校园里什么是最重要的。(铃声)校长能够出差,教师能够歇息,但校园一日无铃声必定大乱。整个校园便是在铃声的一致指挥下,步调一致,一致和谐地作业着。这个铃是按必定的时刻组织来响的,咱们能够称之为“时序时刻的次序”。一个由人组成的单位姑且要有必定的时序,核算机当然更要有严厉的时序。事实上,核算机更象一个大钟,什么时分分针动,什么时分秒针动,什么时分时针动,都有严厉的规矩,一点也不能乱。核算机要完结的事更杂乱,所以它的时序也更杂乱。
咱们已知,核算机作业时,是一条一条地从ROM中取指令,然后一步一步地履行,咱们规矩:核算机拜访一次存储器的时刻,称之为一个机器周期。这是一个时刻基准,好象咱们人用“秒”作为咱们的时刻基准相同,为什么不爽性用“秒”,多好,很习气,学下去咱们就会知道用“秒”反而不习气。
一个机器周期包含12个时钟周期。下面让咱们算一下一个机器周期是多长时刻吧。设一个单片机作业于12M晶振,它的时钟周期是1/12(微秒)。它的一个机器周期是12*(1/12)也便是1微秒。(请核算一个作业于6M晶振的单片机,它的机器周期是多少)。
MCS-51单片机的一切指令中,有一些完结得比较快,只需一个机器周期就行了,有一些完结得比较慢,得要2个机器周期,还有两条指令要4个机器周期才行。这也不难再解,不是吗?我让你扫地的履行要完结总得比要你完结擦黑板的指令时刻要长。为了恒量指令履行时刻的长短,又引进一个新的概念:指令周期。所谓指令周期便是指履行一条指令的时刻。INTEL对每一条指令都给出了它的指令周期数,这些数据,大部份不需求咱们去回忆,可是有一些指令是需求记住的,如DJNZ指令是双周期指令。
下面让咱们来核算方才的延时。首要有必要要知道晶振的频率,咱们设所用晶振为12M,则一个机器周期便是1微秒。而DJNZ指令是双周期指令,所以履行一非必须2个微秒。总共履行62500次,正好125000微秒,也便是125毫秒。
操练:规划一个延时100毫秒的延时程序。
关键剖析:1、一个单元中的数是否能够超越255。2、怎样分配两个数。
三、复位电路
任何单片机在作业之前都要有个复位的进程,复位是什么意思呢?它就象是咱们上课之前打的准备铃。准备铃一响,咱们就自动地从操场、其它当地进入教室了,在这一段时刻里,是没有教师干涉的,对单片机来说,是程序还没有开端履行,是在做准备作业。明显,准备作业不需求太长的时刻,复位只需求5ms的时刻就能够了。怎样进行复位呢?只需在单片机的RST引脚上加上高电平,就能够了,按上面所说,时刻不少于5ms。为了到达这个要求,能够用许多种方法,这儿供给一种供参阅,见图1。实践上,咱们在上一次试验的图中已见到过了。
这种复位电路的作业原理是:通电时,电容两头适当所以短路,所以RST引脚上为高电平,然后电源经过电阻对电容充电,RST端电压渐渐下降,降到必定程序,即为低电平,单片机开端正常作业。
单片机的内外部结构剖析(四)
第三个试验
上两次咱们做过两个试验,都是让P1.0这个引脚使灯亮,咱们能够想象:已然P1.0能够让灯亮,那么其它的引脚可不能够呢?看一下图1,它是8031单片机引脚的阐明,在P1.0周围有P1.1,P1.2….P1.7,它们是否都能够让灯亮呢?除了以P1最初的外,还有以P0,P2,P3最初的,数一下,总共是32个引脚,前面咱们以学过7个引脚,加上这32个这39个了。它们都以P字最初,仅仅后边的数字不相同,它们是否有什么联络呢?它们能不能都让灯亮呢?在咱们的试验板上,除了P10之外,还有P11P17都与LED相连,下面让咱们来做一个试验,程序如下:
MAIN: MOV P1,#0FFH
LCALL DELAY
MOV P1,#00H
LCALL DELAY
LJMP MAIN
DELAY:MOV R7,#250
D1: MOV R6,#250
D2: DJNZ R6,D2
DJNZ R7,D1
RET
END
将这段程序转为机器码,用编程器写入芯片中,成果怎样?通电今后咱们能够看到8只LED悉数在闪烁。因而,P10P17是悉数能够点亮灯的。事实上,凡以P最初的这32个引脚都是能够点亮灯的,也便是说:这32个引脚都能够作为输出运用,假如不必来点亮LED,能够用来操控继电器,能够用来操控其它的履行机构。
程序剖析:这段程序和前面做过的程序比较,只需两处不相同:榜首句:本来是SETB P1.0,现在改为MOV P1,#0FFH,第三句:本来是CLR P1.0,现在改为MOV P1.0,#00H。从中能够看出,P1是P1.0P1.7的全体的代表,一个P1就表明了一切的这八个管脚了。当然用的指令也不相同了,是用MOV指令。为什么用这条指令?看图2,咱们把P1作为一个全体,就把它当作是一个存储器的单元,对一个单元送进一个数能够用MOV指令。
二、第四个试验
除了能够作为输出外,这32个引脚还能够做什么呢?下面再来做一个试验,程序如下:
MAIN: MOV P3,#0FFH
LOOP: MOV A,P3
MOV P1,A
LJMP LOOP
先看一下试验的成果:一切灯悉数不亮,然后我按下一个按钮,第()个灯亮了,再按下另一个按钮,第()个灯亮了,松开按钮灯就灭了。从这个试验现象结合电路来剖析一下程序。
从硬件电路的连线能够看出,有四个按钮被接入到P3口的P32,P33,P34,P35。榜首条指令的用处咱们能够猜到:使P3口悉数为高电平。第二条指令是MOV A,P3,其间 MOV现已见,是送数的意思,这条指令的意思便是将P3口的数送到A中去,咱们能够把A当成是一个中心单元(看图3),第三句话是将A中的数又送到P1口去,第四句话是循环,便是不断地重复这个进程,这咱们已见过。当咱们按下榜首个按钮时,第(3)只灯亮了,所以P12口应当输出是低电平,为什么P12口会输出低电平呢?咱们看一下有什么被送到了P1口,只需从P3口进来的数送到A,又被送到了P1口,所以,肯定是P3口进来的数使得P12位输出电平的。P3口的P32位的按钮被按下,使得P32位的电平为低,通进程序,又使P12口输出低电平,所以P3口起来了一个输入的效果。验证:按第二、三、四个按钮,一起按下2个、3个、4个按钮都能够得到相同的定论,所以P3口确实起到了输入效果,这样,咱们能够看到,以P字最初的管脚,不只能够用作输出,还能够用作输入,其它的管脚是否能够呢?是的,都能够。这32个引脚就称之为并行口,下面咱们就对并行口的结构作一个剖析,看一下它是怎样完成输入和输出的。
并行口结构剖析:
1、输出结构
先看P1口的一位的结构示意图(只画出了输出部份):从图中能够看出,开关的翻开和合上代表了引脚输出的高和低,假如开关合上了,则引脚输出便是低,假如开关翻开了,则输出高电平,这个开关是由一根线来操控的,这根数据总线是出自于CPU,让咱们回想一下,数据总线是一根咱们共用的线,许多的器材和它连在一起,在不同的时分,不同的器材当然需求不同的信号,如某一时刻咱们让这个引脚输出高电平,并要求坚持若干时刻,在这段时刻里,核算机当然在忙个不断,在与其它器材进行联络,这根操控线上的电平未必能坚持本来的值不变,输出就会发生改变了。怎样处理这个问题呢?咱们在存储器一节中学过,存储器中是能够寄存电荷的,咱们无妨也加一个小的存储器的单元,并在它的前面加一个开关,要让这一位输出时,就把开关翻开,信号就进入存储器的单元,然后立刻封闭开关,这样这一位的状况就被保存下来,直到下一次指令让它把开关再翻开停止。这样就能使这一位的状况与其他器材无关了,这么一个小单元,咱们给它一个很形象的姓名,称之为“锁存器”。
2、输入结构
这是并行口的一位的输出结构示意图,再看,除了输出之外,还有两根线,一根从外部引脚接入,另一根从锁存器的输出接出,别离标明读引脚和读锁存器。这两根线是用于从外部接纳信号的,为什么要两根呢?本来,在51单片机中输入有两种方法,别离称为‘读引脚’和‘读锁存器’,榜首种方法是将引脚作为输入,那是真实地从外部引脚读进输入的值,第二种方法是该引脚处于输出状况时,有时需求改动这一位的状况,则并不需求真实地读引脚状况,而仅仅读入锁存器的状况,然后作某种改换后再输出。
请留意输入结构图,假如将这一根引线作为输进口运用,咱们并不能确保在任何时刻都能得到正确的成果(为什么?)参阅图2输入示意图。接在外部的开关假如翻开,则应当是输入1,而假如闭合开关,则输入0,可是,假如单片机内部的开关是闭合的,那么不论外部的开关是开仍是闭,单片机接受到的数据都是0。可见,要让这一端口作为输入运用,要先做一个‘准备作业’,便是先让内部的开关断开,也便是让端口输出‘1’才行。正由于要先做这么一个准备作业,所以咱们称之为“准双向I/O口”。
以上是P1口的一位的结构,P1口其它各位的结构与之相同,而其它三个口:P0、P2、P3则除入作为输入输出口之外还有其它用处,所以结构要稍杂乱一些,但其用于输入、输出的结构是相同的。看图()。对咱们来说,这些附加的功用不必由咱们来操控,所以咱们就不去关怀它了。
单片机内部结构剖析(五)
经过前面的学习,咱们已知单片机的内部有ROM、有RAM、有并行I/O口,那么,除了这些东西之外,单片机内部终究还有些什么,这些个琐细的东西怎样连在一起的,让咱们来对单片机内部作一个完好的剖析吧!
看图(1)(本图太大,请咱们找本书看吧,一般讲单片机的书,随意哪本都有)。从图中咱们能够看出,在51单片机内部有一个CPU用来运算、操控,有四个并行I/O口,别离是P0、P1、P2、P3,有ROM,用来寄存程序,有RAM,用来寄存中心成果,此外还有守时/计数器,串行I/O口,中止体系,以及一个内部的时钟电路。在一个51单片机的内部包含了这么多的东西。
对上面的图进行进一步的剖析,咱们已知,对并行I/O口的读写只需将数据送入到相应I/O口的锁存器就能够了,那么关于守时/计数器,串行I/O口等怎样用呢?在单片机中有一些独立的存储单元是用来操控这些器材的,被称之为特别功用寄存器(SFR)。事实上,咱们已触摸过P1这个特别功用寄存器了,还有哪些呢?看表1
符号
B
ACC
PSW
IP
P3
IE
P2
SBUF
SCON
P1
TH1
TH0
TL1
TL0
TMOD
TCON
DPH
DPL
SP
P0
PCON
表1
下面,咱们介绍一下几个常用的SFR,看图2。
ACC:累加器,通常用A表明。这是个什么东西,可不能从姓名上了解,它是一个寄存器,而不是一个做加法的东西,为什么给它这么一个姓名呢?或许是由于在运算器做运算时其间一个数必定是在ACC中的原因吧。它的姓名特别,身份也特别,稍后咱们将学到指令,能够发现,一切的运算类指令都离不开它。
2、B:一个寄存器。在做乘、除法时放乘数或除数,不做乘除法时,随你怎样用。
3、PSW:程序状况字。这是一个很重要的东西,里边放了CPU作业时的许多状况,借此,咱们能够了解CPU的当时状况,并作出相应的处理。它的各位功用请看表2
D7 D6 D5 DD
CY AC F0 RS1 RS0
表2
下面咱们逐个介绍各位的用处
(1)CY:进位标志。8051中的运算器是一种8位的运算器,咱们知道,8位运算器只能表明到0-255,假如做加法的话,两数相加或许会超越255,这样最高位就会丢掉,形成运算的过错,怎样办?最高位就进到这儿来。这样就没事了。
例:78H+97H(01111000+10010111)
(2)AC:半进位标志。
例:57H+3AH(01010111+00111010)
(3)F0:用户标志位,由咱们(编程人员)决议什么时分用,什么时分不必。
(4)RS1、RS0:作业寄存器组挑选位。这个咱们已知了。
(5)0V:溢出标志位。什么是溢出咱们稍后再谈吧。
(6)P:奇偶校验位:它用来表明ALU运算成果中二进制数位“1”的个数的奇偶性。若为奇数,则P=1,否则为0。
例:某运算成果是78H(01111000),明显1的个数为偶数,所以P=0。
4、DPTR(DPH、DPL):数据指针,能够用它来拜访外部数据存储器中的任一单元,假如不必,也能够作为通用寄存器来用,由咱们自已决议怎样运用。
5、P0、P1、P2、P3:这个咱们现已知道,是四个并行输入/输出口的寄存器。它里边的内容对应着管脚的输出。
6、SP:仓库指针。
仓库介绍:日常日子中,咱们都留意到过这样的现象,家里洗的碗,一只一只摞起来,最晚放上去的放在最上面,而最早放上去的则放在最下面,在取的时分正好相反,先从最上面取,这种现象咱们用一句话来归纳:“先进后出,后进先出”。请咱们想想,还有什么当地有这种现象?其实举目皆是,建筑工地上堆积的砖头、资料,仓库里放的货品,都是“先进后出,后进先出”,这实践是一种存取物品的规矩,咱们称之为“仓库”。
在单片机中,咱们也能够在RAM中结构这样一个区域,用来寄存数据,这个区域寄存数据的规矩便是“先进后出,后进先出”,咱们称之为“仓库”。为什么需求这样来寄存数据呢?存储器自身不是能够按地址来寄存数据吗?对,知道了地址确实就能够知道里边的内容,但假如咱们需求寄存的是一批数据,每一个数据都需求知道地址那不是费事吗?假如咱们让数据一个接一个地放置,那么咱们只需知道榜首个数据地点地址单元就能够了(看图2)假如榜首个数据在27H,那么第二、三个就在28H、29H了。所以使用仓库这种方法来放数据能够简化操作
那么51中仓库什么当地呢?单片机中能寄存数据的区域有限,咱们不能够专门分配一块当地做仓库,所以就在内存(RAM)中拓荒一块当地,用于仓库,可是用内存的哪一块呢?仍是欠好定,由于51是一种通用的单片机,各人的实践需求各不相同,有人需求多一些仓库,而有人则不需求那么多,所以怎样分配都不适宜,怎样来处理这个问题?分欠好爽性就不分了,把分的权力给用户(编程者),依据自已的需求去定吧,所以51单片机中仓库的方位是能够改变的。而这种改变就体现在SP中值的改变,看图2,SP中的值等于27H不就适当所以一个指针指向27H单元吗?当然在真实的51机中,开端指针所指的方位并非便是数据寄存的方位,而是数据寄存的前一个方位,比方一开端指针是指向27H单元的,那么榜首个数据的方位是28H单元,而不是27H单元,为什么会这样,咱们在学仓库指令时再阐明。
其它的SFR,咱们在用届时再介绍。