80C51单片机的IO口(五) – P3口内部结构与工作原理
P3口的内部逻辑结构如下图所示,由1个输出锁存器、3个输入缓冲器(其中2个为三态缓冲器)、1个与非门和输出驱动电路组成。输出驱动电路与P1、P2口相同,内部有上拉电阻。
P3口的内部逻辑结构
P3口具备以下两种功能:
1. 作为通用I/O口(可字节或位寻址)
内部硬件自动将第二功能输出线W上的电平置“1”。这个时候:
当口线用作输出时,内部总线上的电平状态与输出引脚状态相同;
当口线用作输入时,先要向锁存器写入“1”,使与非门的输出为低电平,进而使MOS管T截止,引脚处于高阻状态。引脚上的数据在“读引脚”信号有效时,通过2个输入缓冲器进入内部数据总线。
从以下分析可知,P3口在用作通用I/O口时,也是准双向口。
2. 作为第二功能口(不进行字节或位寻址)
内部硬件自动将锁存器的Q端电平置“1”。P3口各引脚的第二功能定义如下:
(1) 输出
与非门对第二功能是畅通的,引脚状态与第二功能输出相同。
P3.1 :TXD(串行口输出)
P3.6 :WR(片外数据存储器“写”选通控制输出)
P3.7 :RD(片外数据存储器“读”选通控制输出)
(2) 输入
锁存器的Q端电平和第二功能输出线W电平都被内存硬件自动置“1”。与非门输出为低电平,进而使MOS管T截止,引脚处于高阻状态。引脚信号经输入缓冲器(非三态缓冲器)进入内部第二功能输入线。
P3.0 :RXD(串行口输入)
P3.2 :INT0(外部中断0输入)
P3.3 :INT1(外部中断1输入)
P3.4 :T0(定时器0的外部输入)
P3.5 :T1(定时器1的外部输入)
P3口第二功能的具体用法将在后期相关功能学习时进行介绍。请保持关注。
单片机驱动数码管设计详解(用74HC595实现)
简单设计了一个单片机驱动数码管的电路,该设计中只使用了4位数码管,占用了单片机3个IO口,如果驱动芯片全用满可以驱动8位数码管。仅供初学者分享学习。
1. 数码管显示设计
本设计使用了一个4位的数码管,为共阳型,为了节省单片机的IO口,使用了两片74HC595作为数码管的驱动芯片,共占用3个IO口。74HC595部分电路图如下:
与单片机相连接的三个脚分别为:HC_DAT,HC_RCK,HC_CLK。两片595采用级联方式,即U2的第9脚接到U3的第14引脚。
2. 74HC595简介
74HC595是8位的移位寄存器,串入并出,并具有锁存功能,被广泛的用于数码管、点阵的驱动电路中。其管脚介绍如下:
15:数据输出A-接数码管数据A段;
1:数据输出B-接数码管数据B段;
2:数据输出C-接数码管数据C段;
3:数据输出D-接数码管数据D段;
4:数据输出E-接数码管数据E段;
5:数据输出F-接数码管数据F段;
6:数据输出G-接数码管数据G段;
7:数据输出H-接数码管数据H段;
16:电源正脚-接电源正;
8:电源负脚-接电源负;
14:数据输入脚-接单片机管脚;
12:数据锁存时钟-接单片机管脚;
11:数据输入时钟-接单片机管脚;
13:使能输出脚-低电平有效,接低电平;
10:数据清零-不清零,接高电平;
9:数据级联输出-接下一片595的数据输入脚;
74HC595的真值表如下:
知道了74HC595的引脚定义和真值表,那该如何编程呢?下面重点来了,通过时序图来编程。看重点!!!
3. 74HC595时序图
我是重点!我是重点!我是重点!
通过时序可以看出:
SCK是上升沿的时候要把数据写入;
RCK是上升沿的时候数据才能锁存显示;
有数据操作的过程中RESET必须是高电平;
EN必须是低电平,595才能工作;
知道了以上4点就可以写程序了。其中3、4条是硬件连接上的事情(也可以用单片机的IO口来连接,这样的话可以随时控制74HC595的工作与否情况)。写程序主要靠1、2条。下面具体操作。
4. 程序实例
看下面一段程序:
第39行:HC595_CLK(0)的原型如下:
HC595_CLK(0)是让CLK处于低电平,即上升沿还没有来到;
HC595_DAT(1)就是要把写入的数据准备好;
temp<<1是将数据移位,即一个字节分八次写入;
HC595_CLK(1)是让CLK处于高电平,即上升沿来了;
以上几句解释一下就是:
在CLK时钟上升沿来临之前把要写入的数据准备好,等上升沿来了就把准备好的数据写入。 这就是对时序图的解释。
记住,这仅仅是把数据写入到了74HC595中,但是还没有让74HC595锁存,即没有让数据显示出来,如果让数据显示的话,必须要给RCK一个上升沿(即时序图中的第2条),操作如下:
单片机执行完这个程序后,数据才会在数码管上显示出来。
这一节内容的难度较大,主要是因为时序图这个东西是很模糊的一个内容,大家可以慢慢理解体会。
本订阅号致力于单片机、ARM等嵌入式软硬件的设计经验分享,秉承“人人都是电子设计经验的分享者”的理念,成功路上不孤单,我们一起努力。公众号:micropoint8
相关问答
单片机 中interrupt3中的3指什么?1~2~3是由中断向量表决定的。也就是由单片机的中断入口地址的顺序决定的。这个是硬件决定的软件不能改变。例如外部中断0就是interrupt0定时器0是interrup...
单片机 程序计算3-14:假定A=83H,(R0)=17H,(17H)=34H,执行以下...[最佳回答]MCS-51汇编规定当一个数为十六进制且首位是字母时要补加0,防止和地址标号混淆.
51 单片机 c语言编程led灯1,3,5,7和2,4,6,8交替闪烁?假设你的8个LED是通过低电平来点亮,即LED负极连接P口,正极连接电源:1.当1,3,5,7亮时,我们的P2口状态以二进制表示应该是10101010,也就是0xAA,程序应该写成...
单片机 中 p3 口高四位是哪几位?p3.7p3.6p3.5p3.4这四个是高四位的端口。p3.7p3.6p3.5p3.4这四个是高四位的端口。
单片机 p0- p3 口的使用方法?1、P0口:真正的双向口,输出锁存,输入缓冲,输入前要先置1(KEIL包含的头文件已经有动作了,如果用汇编,要人工置1),输出为漏极开路,输出一般都要上拉电阻...1、P...
keil3怎么创建 单片机 文件?要创建单片机文件,首先需要打开Keil3软件,进入Project菜单,选择NewProject选项,然后在弹出的窗口中选择芯片型号和存储路径,点击OK按钮创建工程。接着,在...
51 单片机p3 口输出电流为什么很低?151单片机P3口输出电流很低的原因是因为它的输出电流能力有限。251单片机的P3口是一个普通IO口,其输出电流能力受到芯片内部电路设计的限制,一般只能提供较...
C语言 单片机 用定时器输出3KHz方波的程序 - 151****5817 的...先开总中断然后再打开定时器0#includesbita=P1^0;main(){a=1;TMOD=0X02;//定时器0自动重装载TH0=256-167;TL0=256-167;ET0=1;//定...
如何用 单片机 一个按钮开关控制3个灯3种效果。流水。闪烁。还有一直亮。用keil编程?一步步调试,先把按键去掉。不是没有报错,就会按照你的步骤来实现。这个感觉像是宋老师的开发板。如果不会调试,那么可以用他们提供的代码来对比。一步步调试,...
用C语言写一个程序,使 单片机 的 P3 口的高四位LED和低四位LED轮流点亮?你要实现的是高4位或低4位是4个一起亮?实际上是P3=0XF7,延时,P3=0X7F,延时。。。只有第4、8两个LED轮流点亮。因为亮的两灯的前3条执行得太快,根本看不出...