文章目录
Chapter5:输入输出接口P0-P3
5.0 概述
-
输入输出接口:
外设与CPU之间必须经过I/O接口。接口起着缓冲、锁存数据,地址译码、信息格式转换、传递外设状态,发布命令等功能。
-
单片机的并行接口:
- I/O接口有并行接口、串行接口、定时/计数器接口等。
- 单片机将这些接口做在内部,外设可直接与单片机相连(有时需加驱动)。
- 本章介绍单片机的并行接口。
-
具体接口:
51单片机有P0、P1、P2、P3四个8位双向I/O口,四个口共32根口线
每个口可以按字节输入或输出,也可以按位进行输入或输出,用作位控制十分方便。
5.1 PO~P3端口的功能和内部结构
5.1.1 P0~P3端口的功能
端口 | 功能 |
---|---|
P0 | 1.作为输入/输出口。 |
2.作为地址/数据总线 ,接外围芯片时P0口分时输出低8位地址与数据信号 | |
P1 | 1.作为输入/输出口。 |
2.在增强型(52系列)和ISP型(在系统编程型)中P1口还有如下功能(仅了解即可) | |
P2 | 1.作为输入/输出口。 |
2.作为高8位地址总线。 | |
P3 | 1.作为输入/输出口。 |
2.作第二功能使用,每一位功能定义如下表 |
-
同一个端口的各位具有相同的结构。
-
P0~P3 结构的相同之处:
- 都有两个输入缓冲器,分别受读锁存器和读引脚的控制
- 都有锁存器(即SFR寄存器P0~P3)
- 都是场效应管输出驱动
-
P0~P3 的不同之处:
-
P0和P2:低、高八位的地址的传送【P0还可以作数据线】。
-
P3:丰富的位操作。
-
P1:就只能做输入输出。
-
5.1.2 P0~P3端口内部结构
-
P0口:
- 功能1: P0口作I/O口使用
1)CPU发控制电平“0”封锁与门,使T1管截止,同时使MUX开关同下面的触点接通,使锁存器的 Q 与T2栅极接通。
2)当CPU向端口输出数据时,写脉冲加在锁存器的 CL上、内部总线的数据经反相,再经T2管反相,PO口的这一位引脚上出现正好和内部总线同相的数据。由于输出驱动级是漏极开路电路(因T1截止),在作I/O口使用时应外接10K的上拉电阻。 3)当输入操作时,端口中两个三态缓冲器用于读操作。
缓冲器2用于读端口引脚的数据(如:MOV A,P0指令)。
缓冲器1用于读锁存器Q端的数据。当执行“读-修改-写”指令(如:ANL PO,A指令)。
究竟是读引脚还是读锁存器,CPU内部会自行判断。 4)当作输入口使用时,应先对该口写入“1”使场效应管T2截止,再进行读入操作。
如:MOV P0,#0FFH(先写全1,复位时为1)MOV A,P0(再读引脚)防止读出来的数据全部等于0- 功能2:P0口作地址/数据线使用
CPU发控制电平“1”,转换开关MUX打向上面的触点。
-
P1口:
-
P2口:
1)当扩展片外存贮器时,MUX开关打向右,P2口作高八位地址线 输出高八位地址信号。
其MUX的倒向是受CPU内部控制的。
2)当P2口的几位作地址线使用时,剩下的P2口线不能作I/O口线使用。 -
P3口:
1)当作为第一功能(普通I/O口)使用时,用法同P1口。
2)当作为第二功能使用时,功能见上表。
3)P3口的各位可根据需要,把几条口线设为第二功能,剩下的口线仍可作I/O使用;此时,宜采用位操作。
归纳总结:
5.2 PO~P3端口的编程举例
5.3 用并行口设计LED数码显示
键盘、显示器是单片机应用系统中常用的输入、输出装置。LED数码显示器是常用的显示器之一。
下面介绍用单片机并行口设计LED数码显示电路、键盘电路的方法。
5.3.1 LED显示器及其原理
-
管脚排列 、 共阴极 、 共阳极
1)例子看ppt2)共阳极和共阴极的字形码是不同的(刚好互为反码关系) ,可见ppt表。
3)LED数码管每段需10~20mA的驱动电流,可用TTL或CMOS器件驱动。
-
字形码的控制输出可采用2种方法:
(1)硬件译码方式,如采用BCD译码/驱动器74LS48、CD4511(共阴极)或74LS46、CD4513 (共阳极);
(2)软件查表方式。 (常用方法,需掌握)
自己画一个管脚排列的简图 + a~dp 罗列。 根据给出的数字,对照管脚排列图,把adp的罗列赋值。然后得出段码(这就是共阴极状态下)。接着,判断题目要求是共what极?若阴,结束。若阳,再判断显示的字符在什么区间,如果在0F,直接互补。若为H或者P的话该当如何呢??
5.3.2 LED数码管的接口(静态、动态)
-
静态显示:
用一个并行口接一个数据管,数码管的公共端com接地(共阴)或接Vcc(共阳)。优点:显示稳定,无闪烁,控制容易。缺点:占用接口多。如果PO口和P2口要用作数据线和地址线,仅用单片机的并行口就只能接2个数码管。
理解:一个I/O接口管理一个数码管。在一个非常非常小的时间点内,四个数码管可以同时点亮。因为互相没有竞争关系。不扩充接口的话,最多只能搞4个数码管,因为单片机一共就P0~P3共4个I/O口。物理层面上:共一个极,另一个极靠I/O口管理。
-
动态显示:
一个接口输出字形码 (字选),另一接口选择点亮某位数码管 (位选)。采用各数码管循环轮流显示的方法,当循环显示频率较高时,看不出闪烁显示现象。优点:节省接口(2个接口就可以接8个数码管)。缺点:显示可能会有闪烁,软件控制复杂。
理解: 一共只需要2个I/O接口。在一个非常非常小的时间点内,只有一个数码管是点亮的。数码管之间互相之间存在竞争关系。但由于1秒刷新超过30次人眼就分辨不出来了,所以在高频率下,人眼看起来是几个数码管都亮着的。能搞的数码管数量没有上限。物理层面上:段码线 + 位选线。段码线来传要显示的内容,位选线来控制现在想要哪个数码管亮,即点亮的数码管的位置
-
优缺点总结:
优点 缺点 静态接口: 显示稳定无闪烁,软件控制容易 占用接口数量多 动态接口: 占用接口数量少 显示可能有闪烁,软件控制复杂 -
编程举例见ppt
5.4 用并行口设计键盘电路
-
两种方式:
按键少:接成线性键盘; 按键多:接成矩阵键盘。
每个按键有它的行值和列值,行值和列值的组合就是这个按键的编码。
*矩阵键盘举例:
-
键盘处理程序的任务:
确定有无键按下;
判哪一个键按下;
键的功能是什么;
还要消除按键在闭合或断开时的抖动。 -
键盘扫描流程图
1)当P1.0~P1.3输出0时,如无键按下,P1.4~P1.7的输入值均为“1”,如果其中有一个不是 “1”,说明有键按下。
2)再使P1.0~P1.3逐个输出零(行扫描),检查P1.4~P1.7的输入值有无零,从而查出是哪行哪列的键按下。
3)在判按键时,按键有抖动,可采用延时后再重读以跳过抖动时段。*程序见ppt