📄 单片机第六课.htm
字号:
<P align=justify><FONT size=3>LOOP</FONT><FONT lang=ZH-CN face=宋体 size=3>:
</FONT><FONT size=3>MOV A</FONT><FONT lang=ZH-CN face=宋体 size=3>,</FONT><FONT
size=3>P3</FONT></P>
<P align=justify><FONT size=3>MOV P1</FONT><FONT lang=ZH-CN face=宋体
size=3>,</FONT><FONT size=3>A</FONT></P><FONT size=3>
<P align=justify>LJMP LOOP</P></FONT><FONT lang=ZH-CN face=宋体 size=3>
<P
align=justify>先看一下实验的结果:所有灯全部不亮,然后我按下一个按钮,第()个灯亮了,再按下另一个按钮,第()个灯亮了,松开按钮灯就灭了。从这个实验现象结合电路来分析一下程序。</P></FONT>
<P align=justify><FONT lang=ZH-CN face=宋体
size=3>从硬件电路的连线可以看出,有四个按钮被接入到</FONT><FONT size=3>P3</FONT><FONT lang=ZH-CN
face=宋体 size=3>口的</FONT><FONT size=3>P32</FONT><FONT lang=ZH-CN face=宋体
size=3>,</FONT><FONT size=3>P33</FONT><FONT lang=ZH-CN face=宋体
size=3>,</FONT><FONT size=3>P34</FONT><FONT lang=ZH-CN face=宋体
size=3>,</FONT><FONT size=3>P35</FONT><FONT lang=ZH-CN face=宋体
size=3>。第一条指令的用途我们可以猜到:使</FONT><FONT size=3>P3</FONT><FONT lang=ZH-CN face=宋体
size=3>口全部为高电平。第二条指令是</FONT><FONT size=3>MOV A</FONT><FONT lang=ZH-CN face=宋体
size=3>,</FONT><FONT size=3>P3</FONT><FONT lang=ZH-CN face=宋体
size=3>,其中</FONT><FONT size=3> MOV</FONT><FONT lang=ZH-CN face=宋体
size=3>已经见,是送数的意思,这条指令的意思就是将</FONT><FONT size=3>P3</FONT><FONT lang=ZH-CN
face=宋体 size=3>口的数送到</FONT><FONT size=3>A</FONT><FONT lang=ZH-CN face=宋体
size=3>中去,我们可以把</FONT><FONT size=3>A</FONT><FONT lang=ZH-CN face=宋体
size=3>当成是一个中间单元(看图</FONT><FONT size=3>3</FONT><FONT lang=ZH-CN face=宋体
size=3>),第三句话是将</FONT><FONT size=3>A</FONT><FONT lang=ZH-CN face=宋体
size=3>中的数又送到</FONT><FONT size=3>P1</FONT><FONT lang=ZH-CN face=宋体
size=3>口去,第四句话是循环,就是不断地重复这个过程,这我们已见过。当我们按下第一个按钮时,第(</FONT><FONT
size=3>3</FONT><FONT lang=ZH-CN face=宋体 size=3>)只灯亮了,所以</FONT><FONT
size=3>P12</FONT><FONT lang=ZH-CN face=宋体 size=3>口应当输出是低电平,为什么</FONT><FONT
size=3>P12</FONT><FONT lang=ZH-CN face=宋体
size=3>口会输出低电平呢?我们看一下有什么被送到了</FONT><FONT size=3>P1</FONT><FONT lang=ZH-CN
face=宋体 size=3>口,只有从</FONT><FONT size=3>P3</FONT><FONT lang=ZH-CN face=宋体
size=3>口进来的数送到</FONT><FONT size=3>A</FONT><FONT lang=ZH-CN face=宋体
size=3>,又被送到了</FONT><FONT size=3>P1</FONT><FONT lang=ZH-CN face=宋体
size=3>口,所以,肯定是</FONT><FONT size=3>P3</FONT><FONT lang=ZH-CN face=宋体
size=3>口进来的数使得</FONT><FONT size=3>P12</FONT><FONT lang=ZH-CN face=宋体
size=3>位输出电平的。</FONT><FONT size=3>P3</FONT><FONT lang=ZH-CN face=宋体
size=3>口的</FONT><FONT size=3>P32</FONT><FONT lang=ZH-CN face=宋体
size=3>位的按钮被按下,使得</FONT><FONT size=3>P32</FONT><FONT lang=ZH-CN face=宋体
size=3>位的电平为低,通过程序,又使</FONT><FONT size=3>P12</FONT><FONT lang=ZH-CN face=宋体
size=3>口输出低电平,所以</FONT><FONT size=3>P3</FONT><FONT lang=ZH-CN face=宋体
size=3>口起来了一个输入的作用。验证:按第二、三、四个按钮,同时按下</FONT><FONT size=3>2</FONT><FONT
lang=ZH-CN face=宋体 size=3>个、</FONT><FONT size=3>3</FONT><FONT lang=ZH-CN face=宋体
size=3>个、</FONT><FONT size=3>4</FONT><FONT lang=ZH-CN face=宋体
size=3>个按钮都可以得到同样的结论,所以</FONT><FONT size=3>P3</FONT><FONT lang=ZH-CN face=宋体
size=3>口确实起到了输入作用,这样,我们可以看到,以</FONT><FONT size=3>P</FONT><FONT lang=ZH-CN
face=宋体 size=3>字开头的管脚,不仅可以用作输出,还可以用作输入,其它的管脚是否可以呢?是的,都可以。这</FONT><FONT
size=3>32</FONT><FONT lang=ZH-CN face=宋体
size=3>个引脚就称之为并行口,下面我们就对并行口的结构作一个分析,看一下它是怎样实现输入和输出的。</FONT></P><FONT lang=ZH-CN
face=宋体 size=3>
<OL start=3>
<P align=justify>
<LI>并行口结构分析:
<P></P></LI></OL></FONT>
<P align=justify><FONT size=3>1</FONT><FONT lang=ZH-CN face=宋体
size=3>、输出结构</FONT></P>
<P align=justify><FONT lang=ZH-CN face=宋体 size=3>先看</FONT><FONT
size=3>P1</FONT><FONT lang=ZH-CN face=宋体
size=3>口的一位的结构示意图(只画出了输出部份):从图中可以看出,开关的打开和合上代表了引脚输出的高和低,如果开关合上了,则引脚输出就是低,如果开关打开了,则输出高电平,这个开关是由一根线来控制的,这根数据总线是出自于</FONT><FONT
size=3>CPU</FONT><FONT lang=ZH-CN face=宋体
size=3>,让我们回想一下,数据总线是一根大家公用的线,很多的器件和它连在一起,在不同的时候,不同的器件当然需要不同的信号,如某一时刻我们让这个引脚输出高电平,并要求保持若干时间,在这段时间里,计算机当然在忙个不停,在与其它器件进行联络,这根控制线上的电平未必能保持原来的值不变,输出就会发生变化了。怎么解决这个问题呢?我们在存储器一节中学过,存储器中是可以存放电荷的,我们不妨也加一个小的存储器的单元,并在它的前面加一个开关,要让这一位输出时,就把开关打开,信号就进入存储器的单元,然后马上关闭开关,这样这一位的状态就被保存下来,直到下一次命令让它把开关再打开为止。这样就能使这一位的状态与别的器件无关了,这么一个小单元,我们给它一个很形象的名字,称之为“锁存器”。</FONT></P>
<P align=justify><FONT size=3>2</FONT><FONT lang=ZH-CN face=宋体
size=3>、输入结构</FONT></P>
<P align=justify><FONT lang=ZH-CN face=宋体
size=3>这是并行口的一位的输出结构示意图,再看,除了输出之外,还有两根线,一根从外部引脚接入,另一根从锁存器的输出接出,分别标明读引脚和读锁存器。这两根线是用于从外部接收信号的,为什么要两根呢?原来,在</FONT><FONT
size=3>51</FONT><FONT lang=ZH-CN face=宋体
size=3>单片机中输入有两种方式,分别称为‘读引脚’和‘读锁存器’,第一种方式是将引脚作为输入,那是真正地从外部引脚读进输入的值,第二种方式是该引脚处于输出状态时,有时需要改变这一位的状态,则并不需要真正地读引脚状态,而只是读入锁存器的状态,然后作某种变换后再输出。</FONT></P>
<P align=justify><FONT lang=ZH-CN face=宋体
size=3>请注意输入结构图,如果将这一根引线作为输入口使用,我们并不能保证在任何时刻都能得到正确的结果(为什么?)参考图</FONT><FONT
size=3>2</FONT><FONT lang=ZH-CN face=宋体
size=3>输入示意图。接在外部的开关如果打开,则应当是输入</FONT><FONT size=3>1</FONT><FONT lang=ZH-CN
face=宋体 size=3>,而如果闭合开关,则输入</FONT><FONT size=3>0</FONT><FONT lang=ZH-CN face=宋体
size=3>,但是,如果单片机内部的开关是闭合的,那么不管外部的开关是开还是闭,单片机接受到的数据都是</FONT><FONT
size=3>0</FONT><FONT lang=ZH-CN face=宋体
size=3>。可见,要让这一端口作为输入使用,要先做一个‘准备工作’,就是先让内部的开关断开,也就是让端口输出‘</FONT><FONT
size=3>1</FONT><FONT lang=ZH-CN face=宋体
size=3>’才行。正因为要先做这么一个准备工作,所以我们称之为“准双向</FONT><FONT size=3>I/O</FONT><FONT
lang=ZH-CN face=宋体 size=3>口”。</FONT></P>
<P align=justify><FONT lang=ZH-CN face=宋体 size=3>以上是</FONT><FONT
size=3>P1</FONT><FONT lang=ZH-CN face=宋体 size=3>口的一位的结构,</FONT><FONT
size=3>P1</FONT><FONT lang=ZH-CN face=宋体 size=3>口其它各位的结构与之相同,而其它三个口:</FONT><FONT
size=3>P0</FONT><FONT lang=ZH-CN face=宋体 size=3>、</FONT><FONT
size=3>P2</FONT><FONT lang=ZH-CN face=宋体 size=3>、</FONT><FONT
size=3>P3</FONT><FONT lang=ZH-CN face=宋体
size=3>则除入作为输入输出口之外还有其它用途,所以结构要稍复杂一些,但其用于输入、输出的结构是相同的。看图()。对我们来说,这些附加的功能不必由我们来控制,所以我们就不去关心它了。</FONT></P>
<P align=center><A href="http://www.onestudy.net/"><FONT
face=黑体>返回“一学网</FONT><FONT face="Times New Roman" color=#000000> </FONT><FONT
face="Times New Roman"><FONT color=#000000>www.</FONT><FONT
color=#ff0000>one</FONT><FONT color=#008000>study</FONT>.net</FONT><FONT
face=黑体> ”首页</FONT></A></P>
<P align=justify> </P></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -