求推荐 io口比较多 自带程序的io比较好写的单片机型号

您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
第4章_单片机的IO口及proteus简介.ppt 48页
本文档一共被下载:
次 ,您可全文免费在线阅读后下载本文档。
下载提示
1.本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。
2.该文档所得收入(下载+内容+预览三)归上传者、原创者。
3.登录后可充值,立即自动返金币,充值渠道很便利
需要金币:40 &&
你可能关注的文档:
··········
··········
4 单片机的I/O口及proteus简介
教学目的 了解AT89C52的P0~P3端口的结构
理解AT89C52的P0~P3端口的功能 掌握AT89C52的P0~P3端口的应用规则 了解Proteus 软件仿真的优缺点 掌握Proteus ISIS的基本操作
掌握Proteus ISIS的原理图绘制和仿真
掌握Proteus 与Keil C相结合的设计和仿真过程 本章内容 AT89C52单片机P0~P3端口的结构与功能
仿真软件Proteus简介
AT89C52单片机I/O口应用实例与仿真
4.1 P0~P3端口的结构与功能
P0端口的结构与功能 P1端口的结构与功能
P2端口的结构与功能
P3端口的结构与功能
P0端口的结构与功能
P0口的一位结构图
P0端口的结构与功能 P0口用作通用I/O口 作为输出口
作为输入口
“读-修改-写”操作
P0端口的结构与功能 P0口用作地址/数据总线
P0口分时输出低8位地址、输入数据
P0口分时输出低8位地址、输出数据
P1端口的结构与功能
P1口的一位结构图
P1端口的结构与功能 单片机P1口引脚的第二功能
对于 AT89S52单片机,P1口的P1.0、P1.1、P1.5、P1.6、P1.7也具有第二功能。P1.0和P1.2分别作为定时器/计数器2的外部计数输入或时钟输出(P1.0/T2)和定时器/计数器2的触发输入(P1.1/T2EX),
P1.5.P1.6.P1.7则是在对AT89S52单片机在线编程时使用到。AT89C52由于不具备在线编程功能,因此它的P1.5 -P1.7不具备第二功能,P1.0和P1.1则与AT89S52一样。
P1端口的结构与功能 表4.1
AT89S52单片机P1口引脚的第二功能 P2端口的结构与功能
P2口的某一位结构
P2端口的结构与功能 P2端口的功能 P3端口的结构与功能
P2口的某一位结构 P3端口的结构与功能 P3端口的功能
使用P3口时多数是将8根I/O线单独使用,既可将其设置为第二功能,也可设置为第一功能。当工作于通用的I/O功能时,单片机会自动将第二功能输出线置1。与其他的I/O口一样,在向端口写数据时,锁存器的状态与输出引脚的状态一致;当读端口的状态时,则需先向端口写1,再将数据读入内部数据总线,因此是准双向口。
P3端口的结构与功能 P3端口的功能
单片机工作于第二功能时,自动将锁存器的Q端置1. 注意事项 单片机的并行I/O接口有以下应用特性
P0,P1,P2,P3作为通用I/O口使用时,输入操作是读引脚状态;输出操作是对口的锁存器的写入操作,锁存器的状态立即反映到引脚上。
P1,P2,P3口作为输出口时,由于电路内部带上拉电阻,因此无需外接上拉电阻,而PO口由于内部无上拉电阻,因此使用它时,必须外接上拉电阻。
P0,P1,P2,P3作为通用的输入口时,必须使电路中的锁存器写入高电平“1”,使场效应管(FET)VF1截止,以避免锁存器输出为“0”时场效应管VF1 导通使引脚状态始终被钳位在“0”状态。
注意事项 I/O口功能的自动识别。无论是P0、P2口的总线复用功能,还是P3口的第二功能复用,单片机会自动选择,不需要用户通过指令选择。
两种读端口的方式。包括端口锁存器的“读-改-写”操作和读引脚的操作。在单片机中,有些指令是读端口锁存器的,如一些逻辑运算指令、置位/复位指令、条件转移指令以及将I/O口作为目的地址的操作指令;有些指令是读引脚的,如以I/O口作为源操作数的指令。
I/O口的驱动特性。P0口每一个I/O口可驱动8个LSTTL输入,而P1、P2、P3口每一个I/O口可驱动4个LSTTL输入。在使用时应注意口的驱动能力。
4.2 Proteus简介
Proteus ISIS的工作界面
Proteus ISIS的基本操作
Proteus ISIS的原理图绘制和仿真
Proteus 与Keil C相结合的设计和仿真
Proteus ISIS的工作界面
Proteus ISIS的工作界面是一种标准的Windows界面,如图4.5所示。包括:标题栏、主菜单、标准工具栏、绘图工具栏、状态栏、对象选择按钮、预览对象方位控制按钮、仿真进程控制按钮、预览窗口、对象选择器窗口、图形编辑窗口。
Proteus ISIS的工作界面
Proteus ISIS的基本操作
图形编辑窗口 坐标系统(CO-ORDINATE SYSTEM) 点状栅格(The Dot Grid)与捕捉栅格(Snapping to a Grid)
实时捕捉(Real Time Snap)
视图的缩放与移动
正在加载中,请稍后...IO口操作是单片机实践中最基本最重要的一个知识,本篇花了比較长的篇幅介绍IO口的原理。也是查阅了不少资料,确保内容正确无误,花了非常长时间写的。IO口原理原本须要涉及非常多深入的知识,而这里尽最大可能做了简化方便理解。这样对于以后解决各种IO口相关的问题会有非常大的帮助。
IO口等效模型是本人独创的方法。通过此模型,能有效的减少对IO口内部结构理解的难度。而且经查阅资料确认,这样的模型和实际工作原理基本一致。
==========================================
前面说了非常多东西,不少人也许已经迫不及待的想要实际操作单片机了。IO口作为单片机与外界通信最基本的手段,是单片机学习最基本也最重要的一个知识。前面我们编程实现了IO口点亮LED的实验,本篇继续对IO口相关知识进行介绍。
为了更好的学习IO口操作。有必要了解一下IO口的内部结构和相关概念。这些知识对于兴许的学习非常有帮助。重点是理解,全然不须要刻意去记。不记得就回来再看看即可了。用得多了自然就记住了。
官方资料(最权威准确)
我们说过,要了解一个芯片,最准确有效的方法,是查看官方给出的芯片手冊等资料。可是初学单片机,直接看芯片手冊资料恐怕非常难弄明确,尤其是看到一堆英文、陌生的电路、名词术语。假设是我,一定也会抓狂的。可是这里我还是给出一张从Atmel官方的《Atmel 8051 Microcontrollers Hardware Manual》中截取的图片。
给出这张图片并非为了打击大家学习热情,而是希望大家能明确。我们所见过的各种单片机资料究竟是怎么来的,究竟是否准确,这一切都能够通过官方资料弄清楚,对于大家以后深入学习一些东西有一定的帮助。
第二功能简单介绍
上图正是官方给出的权威的51单片机IO口结构图。能够看出,单片机的四组IO口内部结构各不同样。原因是有些IO口有第二功能,入门篇里面提到过。
还记得这张管脚图吗?括号里标注的就是IO口的第二功能名称。除了P1以外,每一个接口都有第二功能。介绍单片机系统模块时,我提到51单片机有预留扩展存储器的接口,正是图中的P0和P1的第二功能(同一时候还要用到29、30等管脚)。由于用的不多,涉及知识也比較深入,就不做详细研究了。顺便一提,事实上这里我们看到的AD0~AD7,就是用于并行口的。而P3口的第二功能,就包含串口等,后面学到了还会详细介绍。
IO口等效电路
因为深入理解IO口的原理涉及到非常多电路甚至微机原理相关知识,这里仅仅做简化介绍,能满足绝大多数情况下的须要。作为普通IO口使用时。四个IO口的工作原理基本一致。
以下的图是从前面图中的P1电路中裁剪出来的,也是我们须要理解的关键。
右边的P1.X表示P1的一个IO口,如P1.0。电阻右边写的英文是内部上拉电阻的意思。之所以叫上拉电阻。是由于电阻的一端接在VCC上。以下的三角形表示接地,相当于GND。除此之外,最关键的一个器件是以下这个。
这个器件的本质是晶体管,起到电子开关的作用(假设想深入了解,能够学习模拟电路相关的知识,或者等到原理篇中介绍)。上面的电路能够大致等效成下图。注意。这种结构仅仅是一个IO口,整个单片机中有32个这种结构。
图中的R为阻值10k的上拉电阻。S是由前面的晶体管等效的电子开关。蓝色框中的部分在单片机内部。
S的开关状态由CPU控制。当用程序设置P1.0管脚为低电平时。电子开关S闭合。实际上电子开关S闭合时,两端还有非常小的电阻。依据分压原理。P1.0上会有一个非常低的电压,近似0V,已经能够视为低电平了。当设置管脚为高电平时S断开。P1.0通过10k上拉电阻接到VCC上。假设用电压表測量。由于电压表内阻非常大。所以能够得出其电压值为高电平。
IO口的输出:点亮LED
前面介绍了点亮第一个LED的程序和电路。程序例如以下:
#include &reg52.h&
sbit LED = P1^0;
void main()
& & LED = 0;
& & while(1);
电路关键部分例如以下,VCC通过1k电阻连接到LED正极,LED负极接到P1.0口:
在单片机运行LED=0的时候,电子开关S就由CPU控制而闭合,P1.0上输出低电平。电流通过1k电阻和LED流入P1.0,再经过S流入GND,LED两端有合适的电压于是点亮。结合单片机内部IO口等效电路,整个电路例如以下图
灌电流与拉电流
在上面的样例中,P1.0输出低电平点亮LED。能不能反过来,P1.0输出高电平点亮LED呢?我们能够考虑电路连接成以下这样,并在程序中编写LED=1。
当运行LED=1时,S断开。电流通过10k上拉电阻R从P1.0流出,并进入LED。因为上拉电阻的阻值太大。电流太小,导致LED不亮,或者亮度非常微弱。所以通常不採用这样的方法。
这两种方法,前者电流从外部流入单片机内部,我们称之为灌电流接法。后者电流方向相反,称为拉电流接法。对照能够看出,对于51单片机。灌电流接法电流较大,拉电流接法因为受到上拉电阻限制。电流较小。
在实际其中灌电流的最大电流也是有限的,由于电子开关S中能通过的电流有限。依据STC官方的芯片手冊,对于STC单片机,建议单个IO口灌电流建议不超过20mA。全部IO口灌电流之和不超过55mA,否则easy烧坏IO口。而拉电流大小仅仅有230uA左右。
上拉电阻/下拉电阻/高阻态
拉电流是从上拉电阻流出来的,是否能提高拉电流大小呢?答案是能够。我们仅仅须要在单片机外部再加入一个上拉电阻。就能够增大拉电流,而且能成功点亮LED,例如以下图所看到的。
图中的电路。相当于R和R0并联了,整个上拉电阻的阻值减小了。可是这样做有个缺陷。在这个电路中,当单片机输出低电平时,S闭合,此时电流从VCC通过上拉电阻和S流入GND。此时尽管LED熄灭了,可是却有较大电流通过上拉电阻而浪费掉。所以上拉电阻过大,会导致驱动力不足。而上拉电阻过小,又会在输出低电平时浪费电能。
上拉电阻的作用是什么呢?对电路了解多一点的人非常快能发现,假设没有上拉电阻。IO口就无法输出高电平,也就是下图这种。开关闭合时能输出低电平,可是开关断开时,P1.0就悬空了,什么也没连接。这时IO口的电压就是不确定的了,这种状态无法推断它是低电平还是高电平,叫做高阻态。非常巧的是。单片机的P0口确实就没有上拉电阻,而其它三组IO口都有上拉电阻。所以当P0输出高电平,而且没有外接上拉电阻时,就是高阻态,不能正常输出高电平。后面我会通过详细样例来让大家感受一下高阻态。
注:尽管P1.0似乎是同一时候连接到CPU的IO输入端了,即图中写着“输入”的绿色箭头,可是这部分电路仅仅有在读取管脚输入的时候才会导通,而且是单向的。
上拉电阻的存在,将原本的高阻态转变成了高电平,也因此得名。和上拉电阻相相应的。还有下拉电阻,差别在于下拉电阻还有一端不是连接VCC而是接到GND。
IO口的输入
IO口之所以叫IO口(IO=Input/Output),意味着它既能够输出又能够输入。前面讲的都是IO口的输出,以下讲IO口的输入。IO口的输出我们通过LED来介绍。而IO口的输入我们则通过开关来说明。在非常多单片机中。IO的输入和输出须要通过电路切换,而对于51单片机来说。输入和输出使用的是同一套电路。也就是上面我们分析的电路。
图中的S0是一个单刀双掷开关。往上切换能够将P1.0接到VCC,往下切换能够接到GND。读取时CPU会通过特定电路获取图中橙色导线上的电平。我们想要实现的效果是。让CPU读取P1.0port的电平,从而获得开关S0的状态。
当S断开时。CPU通过获取P1.0上的电平能够知道外部开关S0的状态,从而运行对应的操作。
而S闭合时,S0往下切换,P1.0确实是低电平。而S保持闭合且S0往上切换时,VCC通过S0和S直接接到GND就短路了。此时电子开关S通过大量电流,可能会烧坏单片机。于是我们加入了电阻R0。S仍然保持闭合,S0往上切换。此时P1.0仍然是低电平,于是CPU无法推断外部开关S0的状态,例如以下图。
总结起来就是在读取IO口电平时,应先设置输出高电平(即断开S)。再读取数据。这个规则适用于全部IO口。
类似的,还能够读取单刀单掷开关(或按键开关)的状态。读取前先设置输出高电平,电路图例如以下。
上面这样的电路须要依赖上拉电阻才干工作。P0口由于没有上拉电阻。须要在外部加入一个上拉电阻(由于假设没有上拉电阻,而且S和S0都断开时,IO口变成高阻态。读取的电平结果不确定,于是无法正确推断S0的开关状态)。
双向IO口/准双向IO口
标准双向IO口的特点有两条:
1、在输出模式下。能够输出高低电平;
2、在输入模式下,假设没有接外部电路。应呈现高阻态。
对于51单片机的P1、P2、P3口,因为有内部上拉电阻。输入模式下不可能出现高阻态,所以称之为准双向IO口。而P0口作为IO口工作时,假设不加上拉电阻就无法输出高电平;而加了上拉电阻,输入时又不会出现高阻态。所以也是准双向IO口。
备注1:51单片机的P0口假设工作在第二功能状态下,则是双向IO口。初学时详细原理不须要研究的非常透彻。以下一段对此进行分析,仅供有兴趣的读者參考。
对比官方的完整IO口结构图。P0口内部有上下两个晶体管。当P0口工作在IO口模式下。上面那个晶体管断开,能够直接忽略。前面的等效电路就没有考虑上面那个晶体管。而当P0口工作在第二功能状态下,两个晶体管都能够工作。假设上面的晶体管断开。以下的导通,就输出低电平。反之上面的导通以下的断开。就输出高电平而且不须要上拉电阻。假设两个晶体管都断开,则能够作为输入,而且在没有外界电路时呈现高阻态。所以是双向IO口。
备注2:关于双向IO口和准双向IO口的概念存在一定争议,这里的介绍综合了网上多方面的观点,被多数人所接受。
假设把两个单片机IO口连接在一起会发生什么现象呢?以下就是我们的电路图。
当设置两个IO口都输出低电平。即S和S1都闭合时,整体是低电平。而当设置当中一个IO口输出低电平还有一个输出高电平时,即S或S1闭合,此时两个IO口上都会呈现低电平。仅仅有当P1.0、P1.1都输出高电平,即S和S1都断开时,才会呈现高电平。
能够简单表述成:两个IO口连接在一起。仅当P1.0与P1.1都设置输出高电平时,两者接线上才会呈现高电平。这就是所谓的线与逻辑。不仅是两个,假设是非常多的这种IO口连在一起,仅仅有全部IO都设置输出高电平。接线上才会呈现高电平。线与逻辑会在后面的矩阵键盘中使用到。
最后总结起来,主要就是以下几点。内容有点多。可是实际上经常使用的仅仅有当中的几点。再次强调,不须要刻意去记,明确了原理,用多了自然就记住了。
1、灌电流比拉电流能通过更大的电流;点亮LED一般用灌电流方式
2、上拉电阻越小,拉电流输出能力越大,但输出低电平时越费电
3、读取IO口前,要先设置输出高电平
4、P0作为输出,需外接上拉电阻
5、按键开关作为输入时,接在IO口和GND之间,另外须要上拉电阻
6、51单片机的四个IO口在普通IO状态下都是准双向口
7、51单片机IO口遵从线与逻辑
=======================================================
《单片机小白学步》系列教程(原名《单片机入门指南》)介绍
本系列教程从最主要的入门知识開始。逐步深入介绍单片机系统设计。内容包含:
1、入门篇:单片机等基本概念、各种电子设计基本知识
2、思想篇:单片机/计算机系统设计的project思想
3、学习篇:单片机学习过程、方法和技巧,以51单片机为例介绍,并推广到其它单片机
4、应用篇:遵循规范的project方法,设计单片机系统实例(计划设计的系统有:计算器、电子表、password锁、简易手机。详细看有没有时间再确定)
5、原理篇:从模拟电路、数字电路開始,逐步深入介绍单片机/计算机系统原理。并自行设计简易的CPU(因为个人水平有限,这部分没有把握写好。详细内容视情况而定)
1、技术知识点全面。从入门到精通
包括了各种基本知识,尤其是对单片机基本概念的介绍、为什么要用单片机等。在非常多同类书籍教程中都被忽略了。同一时候也包括了一些深入的知识,包括原理篇考虑对单片机的基本原理进行介绍,有助于深入理解单片机。
本系列教程以51单片机为例进行介绍。通过51介绍完单片机的基本知识。我会再把430进行简要介绍,尤其是对照两者之间的优缺点。让大家非常快感受到430的巨大优势。而学习51正好为高速了解430打下了坚实的基础。
2、除了单片机知识,还有思想、方法、技巧的介绍
本系列教程中,介绍单片机各种模块编程知识的主要是学习篇。而学习篇仅仅是整个教程的一部分。在学习篇中我会贯穿各种方法技巧。怎样理解一些模块功能,怎么看时序图,严格遵守project思想进行编程。程序发生了错误怎么调试等等。而在思想篇中会整体介绍非常多重要的思想,为后面的学习做好准备工作。
3、知识先后顺序的设计
单片机学习过程中,涉及大量的知识,并且非常多知识之间相互依赖,关联非常强。
本系列教程对知识的先后顺序进行比較明白的规划。尽最大可能符合人的认知过程。可是实际规划时发现,不管怎么调整知识的顺序,总有一些知识之间相互依赖。关系复杂。比如開始讲IO口的时候肯定会提到寄存器,而寄存器这个词的理解,须要深厚的背景知识。可是这些背景知识在没有进行实践的时候也非常难理解。
刚開始学习的人经常就会在这种地方感觉疑惑不解,不知所措。而每次遇到类似这种知识,我会向刚開始学习的人指出,应该怎样对待。这个知识是应该自己去学习补充。还是等到学完原理篇再做理解,而如今又应该怎么去看待这个名词。
另外,在整个教程的学习前。须要掌握一定的C语言等基础知识,详细可參考教程第〇篇《序》中的相关说明
4、语言通俗易懂
本系列教程力求语言通俗易懂,而不会用一堆新手不懂的词语去解释还有一个不懂的词语。可是受限于个人语言表达能力,可能有些地方表述的比較繁琐。或者不清楚,希望大家可以帮忙指出。
假设认为我写的对你有帮助。欢迎多多反馈。包含写的不对、不合理、不太明确都能够指出来。这样方便我对其进行完好。
很多其它可參见:《怎样以学习单片机为契机。逐步成为优秀的project师》
本系列教程首发于我的个人主页,欢迎訪问(因为是国外server。速度略微有点慢):
同一时候会将其转发到CSDN、电子发烧友等网站,欢迎关注。
CSDN专栏网址&
电子发烧友论坛&
本文首发自我的个人主页,转载请注明来源:
阅读(...) 评论()&&&& 由上图可见,P0端口由锁存器、输入、切换开关、一个、一个与门及场效应管驱动构成。再看图的右边,标号为P0.X引脚的图标,也就是说P0.X引脚可以是P0.0到P0.7的任何一位,即在P0口有8个与上图相同的电路组成。下面,我们先就组成P0口的每个单元部份跟大家介绍一下:先看输入缓冲器:在P0口中,有两个三态的缓冲器,在学数字电路时,我们已知道,三态门有三个状态,即在其的输出端可以是高、低电平,同时还有一种就是高阻状态(或称为禁止状态),大家看上图,上面一个是读锁存器的缓冲器,也就是说,要读取D锁存器输出端Q的数据,那就得使读锁存器的这个缓冲器的三态控制端(上图中标号为‘读锁存器’端)有效。下面一个是读引脚的缓冲器,要读取P0.X引脚上的数据,也要使标号为‘读引脚’的这个三态缓冲器的控制端有效,引脚上的数据才会传输到我们的内部数据总线上。D锁存器:构成一个锁存器,通常要用一个时序电路,时序的单元电路在学数字电路时我们已知道,一个可以保存一位的数(即具有保持功能),在51单片机的32根I/O口线中都是用一个D触发器来构成锁存器的。大家看上图中的D锁存器,D端是数据输入端,CP是控制端(也就是时序控制信号输入端),Q是输出端,Q非是反向输出端。对于D触发器来讲,当D输入端有一个输入信号,如果这时控制端CP没有信号(也就是时序脉冲没有到来),这时输入端D的数据是无法传输到输出端Q及反向输出端Q非的。如果时序控制端CP的时序脉冲一旦到了,这时D端输入的数据就会传输到Q及Q非端。数据传送过来后,当CP时序控制端的时序信号消失了,这时,输出端还会保持着上次输入端D的数据(即把上次的数据锁存起来了)。如果下一个时序控制脉冲信号来了,这时D端的数据才再次传送到Q端,从而改变Q端的状态。多路开关:在51单片机中,当内部的够用(也就是不需要外扩展存储器时,这里讲的存储器包括数据存储器及程序存储器)时,P0口可以作为通用的输入输出端口(即I/O)使用,对于8031(内部没有ROM)的单片机或者编写的程序超过了单片机内部的存储器容量,需要外扩存储器时,P0口就作为‘地址/数据’总线使用。那么这个多路选择开关就是用于选择是做为普通I/O口使用还是作为‘数据/地址’总线使用的选择开关了。大家看上图,当多路开关与下面接通时,P0口是作为普通的I/O口使用的,当多路开关是与上面接通时,P0口是作为‘地址/数据’总线使用的。输出驱动部份:从上图中我们已看出,P0口的输出是由两个MOS管组成的推拉式结构,也就是说,这两个MOS管一次只能导通一个,当V1导通时,V2就截止,当V2导通时,V1截止。与门、与:这两个单元电路的逻辑原理我们在第四课数字及常用逻辑电路时已做过介绍,不明白的同学请回到第四节去看看。前面我们已将P0口的各单元部件进行了一个详细的讲解,下面我们就来研究一下P0口做为I/O口及地址/数据总线使用时的具体工作过程。1、作为I/O端口使用时的工作原理&&&& P0口作为I/O端口使用时,多路开关的控制信号为0(低电平),看上图中的线线部份,多路开关的控制信号同时与与门的一个输入端是相接的,我们知道与门的逻辑特点是“全1出1,有0出0”那么控制信号是0的话,这时与门输出的也是一个0(低电平),与让的输出是0,V1管就截止,在多路控制开关的控制信号是0(低电平)时,多路开关是与锁存器的Q非端相接的(即P0口作为I/O口线使用)。P0口用作I/O口线,其由数据总线向引脚输出(即输出状态Output)的工作过程:当写锁存器信号CP&&&& 有效,数据总线的信号锁存器的输入端D锁存器的反向输出Q非端多路开关V2管的栅极V2的漏极到输出端P0.X。前面我们已讲了,当多路开关的控制信号为低电平0时,与门输出为低电平,V1管是截止的,所以作为输出口时,P0是漏极开路输出,类似于OC门,当驱动上接时,需要外接上拉。下图就是由内部数据总线向P0口输出数据的流程图(红色箭头)。P0口用作I/O口线,其由引脚向内部数据总线输入(即输入状态Input)的工作过程:&&&& 数据输入时(读P0口)有两种情况1、读引脚&&&& 读芯片引脚上的数据,读引脚数时,读引脚缓冲器打开(即三态缓冲器的控制端要有效),通过内部数据总线输入,请看下图(红色简头)。2、读锁存器通过打开读锁存器三态缓冲器读取锁存器输出端Q的状态,请看下图(红色箭头):&&&& 在输入状态下,从锁存器和从引脚上读来的信号一般是一致的,但也有例外。例如,当从内部总线输出低电平后,锁存器Q=0,Q非=1,场效应管T2开通,端口线呈低电平状态。此时无论端口线上外接的信号是低电乎还是高电平,从引脚读入单片机的信号都是低电平,因而不能正确地读入端口引脚上的信号。又如,当从内部总线输出高电平后,锁存器Q=1,Q非=0,场效应管T2截止。如外接引脚信号为低电平,从引脚上读入的信号就与从锁存器读入的信号不同。为此,8031单片机在对端口P0一P3的输入操作上,有如下约定:为此,8051单片机在对端口P0一P3的输入操作上,有如下约定:凡属于读-修改-写方式的指令,从锁存器读入信号,其它指令则从端口引脚线上读入信号。读-修改-写指令的特点是,从端口输入(读)信号,在单片机内加以运算(修改)后,再输出(写)到该端口上。下面是几条读--修改-写指令的例子。ANL P0,#立即数;P0→立即数P0ORL P0,A;P0→AP0INC P1;P1+1→P1DEC P3;P3-1→P3CPL P2;P2→P2&&&& 这样安排的原因在于读-修改-写指令需要得到端口原输出的状态,修改后再输出,读锁存器而不是读引脚,可以避免因外部电路的原因而使原端口的状态被读错。&&&& P0端口是8031单片机的总线口,分时出现数据D7一D0、低8位地址A7一AO,以及三态,用来接口存储器、外部电路与外部设备。P0端口是使用最广泛的I/O端口。2、作为地址/数据复用口使用时的工作原理&&&& 在访问外部存储器时P0口作为地址/数据复用口使用。&&&& 这时多路开关‘控制’信号为‘1’,‘与门’解锁,‘与门’输出信号电平由“地址/数据”线信号决定;多路开关与器的输出端相连,地址信号经“地址/数据”线反相器V2场效应管栅极V2漏极输出。例如:控制信号为1,地址信号为“0”时,与门输出低电平,V1管截止;反相器输出高电平,V2管导通,输出引脚的地址信号为低电平。请看下图(兰色字体为电平):&&&& 反之,控制信号为“1”、地址信号为“1”,“与门”输出为高电平,V1管导通;反相器输出低电平,V2管截止,输出引脚的地址信号为高电平。请看下图(兰色字体为电平):可见,在输出“地址/数据”信息时,V1、V2管是交替导通的,负载能力很强,可以直接与外设存储器相连,无须增加总线驱动器。&&&&& P0口又作为数据总线使用。在访问外部程序存储器时,P0口输出低8位地址信息后,将变为数据总线,以便读指令码(输入)。&&&& 在取指令期间,“控制”信号为“0”,V1管截止,多路开关也跟着转向锁存器反相输出端Q非;CPU自动将0FFH(,即向D锁存器写入一个高电平‘1’)写入P0口锁存器,使V2管截止,在读引脚信号控制下,通过读引脚三态门电路将指令码读到内部总线。请看下图&&&& 如果该指令是输出数据,如MOVX&& @DPTR,A(将累加器的内容通过P0口数据总线传送到外部RAM中),则多路开关“控制”信号为‘1’,“与门”解锁,与输出地址信号的工作流程类似,数据据由“地址/数据”线反相器V2场效应管栅极V2漏极输出。&&&& 如果该指令是输入数据(读外部数据存储器或程序存储器),如MOVX A,@DPTR(将外部RAM某一存储单元内容通过P0口数据总线输入到累加器A中),则输入的数据仍通过读引脚三态缓冲器到内部总线,其过程类似于上图中的读取指令码流程图。&&&& 通过以上的分析可以看出,当P0作为地址/数据总线使用时,在读指令码或输入数据前,CPU自动向P0口锁存器写入0FFH,破坏了P0口原来的状态。因此,不能再作为通用的I/O端口。大家以后在系统设计时务必注意,即程序中不能再含有以P0口作为操作数(包含源操作数和目的操作数)的指令。二、P1端口的结构及工作原理&&&P1口的结构最简单,用途也单一,仅作为数据输入/输出端口使用。输出的信息有锁存,输入有读引脚和读锁存器之分。P1端口的一位结构见下图.&&&& 由图可见,P1端口与P0端口的主要差别在于,P1端口用内部R代替了P0端口的场效应管T1,并且输出的信息仅来自内部总线。由内部总线输出的数据经锁存器反相和场效应管反相后,锁存在端口线上,所以,P1端口是具有输出锁存的静态口。&&&& 由上图可见,要正确地从引脚上读入外部信息,必须先使场效应管关断,以便由外部输入的信息确定引脚的状态。为此,在作引脚读入前,必须先对该端口写入l。具有这种操作特点的输入/输出端口,称为准双向I/O口。8051单片机的P1、P2、P3都是准双向口。P0端口由于输出有三态功能,输入前,端口线已处于高阻态,无需先写入l后再作读操作。&&&& P1口的结构相对简单,前面我们已详细的分析了P0口,只要大家认真的分析了P0口的工作原理,P1口我想大家都有能力去分析,这里我就不多论述了。&&&& 单片机复位后,各个端口已自动地被写入了1,此时,可直接作输入操作。如果在应用端口的过程中,已向P1一P3端口线输出过0,则再要输入时,必须先写1后再读引脚,才能得到正确的信息。此外,随输入指令的不同,H端口也有读锁存器与读引脚之分。三、P2端口的结构及工作原理:P2端口的一位结构见下图:&&&& 由图可见,P2端口在片内既有上拉电阻,又有切换开关MUX,所以P2端口在功能上兼有P0端口和P1端口的特点。这主要表现在输出功能上,当切换开关向下接通时,从内部总线输出的一位数据经反相器和场效应管反相后,输出在端口引脚线上;当多路开关向上时,输出的一位地址信号也经反相器和场效应管反相后,输出在端口引脚线上。对于8031单片机必须外接程序存储器才能构成应用电路(或者我们的应用电路扩展了外部存储器),而P2端口就是用来性地输出从外存中取指令的地址(高8位地址),因此,P2端口的多路开关总是在进行切换,分时地输出从内部总线来的数据和从地址信号线上来的地址。因此P2端口是动态的I/O端口。输出数据虽被锁存,但不是稳定地出现在端口线上。其实,这里输出的数据往往也是一种地址,只不过是外部RAM的高8位地址。&&&& 在输入功能方面,P2端口与P0和H端口相同,有读引脚和读锁存器之分,并且P2端口也是准双向口。可见,P2端口的主要特点包括:①不能输出静态的数据;②自身输出外部程序存储器的高8位地址;②执行MOVX指令时,还输出外部RAM的高位地址,故称P2端口为动态地址端口。即然P2口可以作为I/O口使用,也可以作为地址总线使用,下面我们就不分析下它的两种工作状态。1、作为I/O端口使用时的工作过程&&& 当没有外部程序存储器或虽然有外部数据存储器,但容易不大于256B,即不需要高8位地址时(在这种情况下,不能通过数据地址寄存器DPTR读写外部数据存储器),P2口可以I/O口使用。这时,“控制”信号为“0”,多路开关转向锁存器输出端Q,输出信号经内部总线锁存器同相输出端Q反相器V2管栅极V2管9漏极输出。&&& 由于V2漏极带有上拉电阻,可以提供一定的上拉电流,负载能力约为8个TTL与非门;作为输出口前,同样需要向锁存器写入“1”,使反相器输出低电平,V2管截止,即引脚悬空时为高电平,防止引脚被钳位在低电平。读引脚有效后,输入信息经读引脚三态门电路到内部数据总线。2、作为地址总线使用时的工作过程&&& P2口作为地址总线时,“控制”信号为‘1’,多路开关车向地址线(即向上接通),地址信息经反相器V2管栅极漏极输出。由于P2口输出高8位地址,与P0口不同,无须分时使用,因此P2口上的地址信息(程序存储器上的A15~A8)功数据地址寄存器高8位DPH保存时间长,无须锁存。四、P3端口的结构及工作原理P3口是一个多功能口,它除了可以作为I/O口外,还具有第二功能,P3端口的一位结构见下图。&&&& 由上图可见,P3端口和Pl端口的结构相似,区别仅在于P3端口的各端口线有两种功能选择。当处于第一功能时,第二输出功能线为1,此时,内部总线信号经锁存器和场效应管输入/输出,其作用与P1端口作用相同,也是静态准双向I/O端口。当处于第二功能时,锁存器输出1,通过第二输出功能线输出特定的内含信号,在输入方面,即可以通过缓冲器读入引脚信号,还可以通过替代输入功能读入片内的特定第二功能信号。由于输出信号锁存并且有双重功能,故P3端口为静态双功能端口。P3口的特殊功能(即第二功能):口线第二功能信号名称P3.0RXD串行数据接收P3.1 TXD串行数据发送P3.2INT0外部中断0申请P3.3INT1外部中断1申请P3.4T0定时器/计数器0计数输入P3.5 T1定时器/计数器1计数输入P3.6WR外部RAM写选通P3.7RD外部RAM读选通使P3端品各线处于第二功能的条件是:1、串行I/O处于运行状态(RXD,TXD);2、打开了处部中断(INT0,INT1);3、定时器/计数器处于外部计数状态(T0,T1)4、执行读写外部RAM的指令(RD,WR)&&&& 在应用中,如不设定P3端口各位的第二功能(WR,RD信叼的产生不用设置),则P3端口线自动处于第一功能状态,也就是静态I/O端口的工作状态。在更多的场合是根据应用的需要,把几条端口线设置为第二功能,而另外几条端口线处于第一功能运行状态。在这种情况下,不宜对P3端口作字节操作,需采用位操作的形式。 端口的负载能力和输入/输出操作:&&&& P0端口能驱动8个LSTTL负载。如需增加负载能力,可在P0总线上增加总线驱动器。P1,P2,P3端口各能驱动4个LSTTL负载。&&&& 前已述及,由于P0-P3端口已映射成特殊功能寄存器中的P0一P3端口寄存器,所以对这些端口寄存器的读/写就实现了信息从相应端口的输入/输出。例如:MOV A, P1 ;把Pl端口线上的信息输入到AMoV P1, A ;把A的内容由P1端口输出MOV P3, #0FFH ;使P3端口线各位置l
往下看有更多相关资料
本网站试开通微、小企业商家广告业务;维修点推荐项目。收费实惠有效果!欢迎在QQ或邮箱联系!
试试再找找您想看的资料
资料搜索:
查看相关资料 & & &
   同意评论声明
   发表
尊重网上道德,遵守中华人民共和国的各项有关法律法规
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
本站管理人员有权保留或删除其管辖留言中的任意内容
本站有权在网站内转载或引用您的评论
参与本评论即表明您已经阅读并接受上述条款
copyright & &广电电器(中国梧州) -all right reserved& 若您有什么意见或建议请mail: & &
地址: 电话:(86)774-2826670& & &&)

我要回帖

更多关于 io程序 的文章

 

随机推荐