单片机编程入门六:单片机的内外部结构剖析(六)
第三个试验
上两次咱们做过两个试验,都是让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则除入作为输入输出口之外还有其它用处,所以结构要稍杂乱一些,但其用于输入、输出的结构是相同的。看图()。对咱们来说,这些附加的功用不用由咱们来操控,所以咱们就不去关怀它了。