历史上的今天
返回首页

历史上的今天

今天是:2025年03月10日(星期一)

正在发生

2020年03月10日 | 6课:单片机并行口结构

2020-03-10 来源:eefocus

上两次我们做过两个实验,都是让P1.0这个管脚使灯亮,我们能设想:既然P1.0能让灯亮,那么其它的管脚可不能呢?看一下图1,它是8031单片机管脚的说明,在P1.0旁边有P1.1,P1.2….P1.7,它们是否都能让灯亮呢?除了以P1开头的外,还有以P0,P2,P3开头的,数一下,一共是32个管脚,前面我们以学过7个管脚,加上这32个这39个了。它们都以P字开头,只是后面的数字不一样,它们是否有什么联系呢?它们能不能都让灯亮呢?在我们的实验板上,除了P10之外,还有P11 -> P17都与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全部在闪动。因此,P10->P17是全部能点亮灯的。事实上,凡以P开头的这32个管脚都是能点亮灯的,也就是说:这32个管脚都能作为输出使用,如果不用来点亮LED,能用来控制继电器,能用来控制其它的执行机构。


程序分析:这段程序和前面做过的程序比较,只有两处不一样:第一句:原来是SETB P1.0,现在改为MOV P1,#0FFH,第三句:原来是CLR P1.0,现在改为MOV P1.0,#00H。从中能看出,P1是P1.0->P1.7的全体的代表,一个P1就表示了所有的这八个管脚了。当然用的指令也不一样了,是用MOV指令。为什么用这条指令?看图2,我们把P1作为一个整体,就把它当作是一个存储器的单元,对一个单元送进一个数能用MOV指令。


二、第四个实验

除了能作为输出外,这32个管脚还能做什么呢?下面再来做一个单片机实验,源程序如下:

MAIN: MOV P3,#0FFH

LOOP: MOV A,P3

MOV P1,A

LJMP LOOP


先看一下这个实验的结果:所有灯全部不亮,然后我按下一个按钮,第(1)个灯亮了,再按下另一个按钮,第(2)个灯亮了,松开按钮灯就灭了。从这个实验现象结合电路来分析一下程序。


从硬件电路的连线能看出,有四个按钮被接入到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则除入作为输入输出口之外还有其它用途,所以结构要稍复杂一些,但其用于输入、输出的结构是相同的。看图()。对我们来说,这些附加的功能不必由我们来控制,所以我们就不去关心它了。

推荐阅读

史海拾趣

Anachip公司的发展小趣事

随着电子行业的竞争日益激烈,Anachip公司意识到单凭自己的力量难以应对市场的快速变化。于是,公司开始积极寻求与其他企业的合作。通过与多家知名电子企业建立战略合作关系,Anachip成功将自己的芯片技术应用于更多领域,进一步扩大了市场份额。同时,这种合作模式也促进了整个电子行业的共同发展。

GE Industrial Solutions公司的发展小趣事
由于光耦的CTR随温度变化而变化,可能导致输出信号的非线性失真。解决方法包括选择温度稳定性好的光耦,或在电路中加入温度补偿电路。
BERGQUIST公司的发展小趣事

随着电子设备的不断发展和性能提升,热管理问题变得日益突出。BERGQUIST公司凭借其在热管理领域的深厚积累,成功研发出了一系列具有革命性的热管理产品。这些产品不仅有效解决了电子设备散热问题,还大大提高了设备的稳定性和可靠性。其中,BERGQUIST的柔性石墨散热片凭借其优异的导热性能和良好的适应性,在市场上获得了广泛认可。

康龙(CONCRAFT)公司的发展小趣事

康龙(CONCRAFT)公司成立于XXXX年,创始人XXX凭借其敏锐的商业眼光和对电子行业的深入理解,决定专注于电子连接器的研发和生产。公司初始阶段面临资金、技术和市场的重重挑战,但创始人带领团队夜以继日地工作,成功开发出了具有竞争力的连接器产品。随着产品的不断完善和市场推广的加强,康龙逐渐在电子连接器领域崭露头角。

Connect-Tech Products Corp公司的发展小趣事

随着国内市场的不断饱和,Connect-Tech Products Corp公司开始寻求海外市场的发展机会。公司通过参加国际电子展、建立海外销售网络等方式,积极开拓国际市场。同时,公司还与国际知名企业展开合作,共同研发新产品,进一步提升了公司的技术水平和市场影响力。这些举措不仅为公司带来了更广阔的市场空间,也为其未来的发展奠定了坚实基础。

Carling Technologies公司的发展小趣事

为了确保产品质量和满足国际标准,Carling Technologies先后获得了多项ISO和TS认证。这些认证不仅证明了公司在质量管理方面的实力,也为其产品在全球市场上的竞争提供了有力支持。同时,公司还建立了标准化的生产流程和质量检测体系,确保每一款产品都能达到客户的期望和要求。

问答坊 | AI 解惑

设计一个能够识别序列“10010”的序列检测器

设计一个能够识别序列“10010”的序列检测器,设:x为数字码流输入,z为检测标记输出,且高电平表示“发现指定序列”,低电平表示“没有发现指定序列”。要求(1)给出RTL描述;(2)编写testbench;(3)进行逻辑综合;(4)给出综合后的仿真结果。 ...…

查看全部问答>

上传一个功能强大的文本编辑器

TextPad v4.5.0 汉化版 For Windows 9X/ME/NT/2K/XP —————————————————————————————    一款功能非常强大的文本编辑工具,它几乎拥有你所需要的一切  功能:多文档操作、拖放支持、文档大小无 ...…

查看全部问答>

电路分析中实时卷积算法的研究

本帖最后由 paulhyde 于 2014-9-15 09:33 编辑 在电 路 系 统的分析中,卷积具有十分重要的意义。尤其是对于一些内部结构未知的电路系统,由于无法给出描述系统的微分方程,只有通过实验方法获得实 验数据或单位冲激响应的曲线。据此冲激响应,进 ...…

查看全部问答>

6410睡眠的问题

目前在用6410做一个手持终端,要有睡眠唤醒的功能。目前遇到的问题是这样的: 如果不加HIVE注册表,睡眠唤醒,运行应用程序,反复测试都是OK的 但是加上HIVE注册表之后,运行一个普通的应用程序,比如TCPMP,或者自己写一个小的界面测试程序,再 ...…

查看全部问答>

如果GPRS/GSM不带彩信模块,怎样才能发彩信

请问应该怎样拨号? 需要哪些协议?…

查看全部问答>

百思桥科技受邀参加2009中国视频系统博览会

百思桥科技受邀参加2009中国视频系统博览会 2009年10月,“2009中国视频系统博览会”将在深圳会展中心隆重开展。百思桥科技作为高清行业中重要的生产厂家,应展会主办方的邀请,将安排公司的技术骨干人员携带主打产品及最新研发产品,盛装参展。 ...…

查看全部问答>

求问一个控件 这是什么控件啊?

好像分页一样的  如下图 这个该怎么实现呢? 谢谢…

查看全部问答>

关于cpu温度的读取,请高手指点

我想用WinIO.sys获取cpu的当前温度,为什么程序老是失败,temp_dwPortVal=0xffffffff 在头文件中导入: #include \"WinIO.h\" #pragma comment(lib,\"WinIo.lib\") 在实现中:         DWORD temp_dwPortVal=0;    ...…

查看全部问答>

stvp支不支持用命令行批量下载stm8程序

stvp支不支持用命令行批量下载stm8程序…

查看全部问答>

请教:关于定时器产生500msLED闪烁的程序

请大家帮忙看看这个程序,为什么P5^6不能产生500MS的波形呢? static void TimeAIni(void) { WDTCTL = WDTPW + WDTHOLD; //关闭内部看门狗。 BCSCTL1 = XT2OFF+XTS; //关闭4M(XT2)振荡器。 BCSCTL2 = SELM0 + SELM1 + SELS ; //MCLK选 ...…

查看全部问答>