单片机IO口复用
单片机io口实验[单片机IO口控制实验实验报告]
![单片机io口实验[单片机IO口控制实验实验报告]](https://img.taocdn.com/s3/m/7470e10d77c66137ee06eff9aef8941ea76e4bd4.png)
单片机io口实验[单片机IO口控制实验实验报告]一、实验目的1、熟悉MCS-51的I/O结构;2、掌握MCS-51I/O的使用方法;3、掌握MCS-51的中断机制。
二、实验原理1、MCS-51单片机的硬件结构片内结构:2、内部数据存储器:3、SFR的名称及其分布:4、I/O端口地址:5、P0P3端口功能总结:P0P3口都是并行I/O口,但P0口和P2口,还可用来构建系统的数据总线和地址总线,所以在电路中有一个MU某以进行转换。
而P1口和P3口无构建系统的数据总线和地址总线的功能,因此,无MU某P0口的MU某的一个输入端为“地址/数据〞信号。
P2口的MU某勺一个输入信号为“地址〞信号。
在4个口中只有P0口是一个真正的双向口,P1P3口都是准双向口。
原因:P0口作数据总线使用时,需解决芯片内外的隔离问题,即只有在数据传送时芯片内外才接通;不进行数据传送时,芯片内外应处于隔离状态。
为此。
P0口的输出缓冲器应为三态门。
P0口中输出三态门是两只场效应管组成,所以是一个真正的双向口。
P1P3口,上拉电阻代替P0口中的场效应管,输出缓冲器不是三态的一准双向口。
P3口的口线具有第二功能,为系统提供一些控制信号。
因此P3口增加了第二功能控制逻辑。
这是P3口与其它各口的不同之处。
6、P0口结构及特点:⑴P0口结构与运作1个输出锁存器,用于进行输出数据的锁存;2个三态输入缓冲器,分别用于锁存器和引脚数据的输入缓冲;1个多路开关MU某它的一个输入来自锁存器,另一个输入是地址/数据信号的反相输出。
在控制信号的的控制下能实现对锁存器输出端和地址/数据线之间的切换;两只场效应管组成的输出驱动电路。
⑵P0口的特点P0口是一个双功能的端口:地址/数据分时复用口和通用I/O口;具有高电平、低电平和高阻抗3种状态的I/O端口称为双向I/O端口。
P0口作地址/数据总线复用口时,相当于一个真正的双向I/O口。
而用作通用I/O口时,于引脚上需要外接上拉电阻,端口不存在高阻状态,此时P0口只是一个准双向口;为保证引脚上的信号能正确读入,在读入操作前应首先向锁存器写1;单片机复位后,锁存器自动被置1;一般情况下,如果P0口已作为地址/数据复用口时,就不能再用作通用I/O口使用;P0口能驱动8个TTL负载。
单片机IO端口工作原理(P0端口,漏极开路,推挽,上拉电阻,准双向口)

单片机IO端口工作原理(P0端口,漏极开路,推挽,上拉电阻,准双向口)一、P0端口的结构及工作原理P0端口8位中的一位结构图见下图:输入缓冲器:在P0口中,有两个三态的缓冲器,三态门有三个状态,即在其的输出端可以是高电平、低电平,同时还有一种就是高阻状态。
图中有一个是读锁存器的缓冲器,也就是说,要读取D锁存器输出端Q的数据,那就得使读锁存器的这个缓冲器的三态控制端(上图中标号为‘读锁存器’端)有效。
图中另一个是读引脚的缓冲器,要读取P0.X引脚上的数据,也要使标号为‘读引脚’的这个三态缓冲器的控制端有效,引脚上的数据才会传输到我们单片机的内部数据总线上。
D锁存器:一个触发器可以保存一位的二进制数(即具有保持功能),在51单片机的32根I/O口线中都是用一个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口使用还是作为‘数据/地址’总线使用的选择开关了。
单片机IO口介绍

单片机IO口介绍单片机(microcontroller)是一种集成电路芯片,具有运算、存储和控制功能。
它是嵌入式系统中最常用的处理器之一、在单片机中,IO (Input/Output)口是用来进行输入输出操作的接口。
IO口通常包括数字IO口和模拟IO口两种类型。
下面将详细介绍单片机IO口的功能和应用。
1.数字IO口:数字IO口是单片机与外部设备进行数字信号交换的接口。
数字IO口可以进行输入和输出操作,具有以下特点:-输入功能:可以通过读取外部设备的状态或信号,并将其转换为数字信号输入到单片机中进行处理。
例如,传感器的信号输入和按键的输入等。
-输出功能:可以通过将数字信号输出到外部设备,控制其工作状态。
例如,LED的控制、驱动电机或继电器等。
数字IO口通常以引脚(pin)的形式存在于单片机芯片上。
一个引脚包括输入端和输出端,可以根据需要进行配置。
数字IO口操作简单、速度快、精度高,常用于控制和通信等方面。
2.模拟IO口:模拟IO口是单片机与外部设备进行模拟信号交换的接口。
模拟IO口可以进行模拟输入和输出操作,常用于采集和控制模拟信号。
-模拟输入功能:可以从外部信号源中获取模拟信号,并将其转换为数字信号输入到单片机中进行处理。
例如,温度传感器、声音传感器等。
-模拟输出功能:可以将数字信号转换为模拟电压、电流等形式,输出到外部设备中。
例如,通过PWM(脉冲宽度调制)信号控制电机的转速。
模拟IO口通常通过ADC(模数转换器)和DAC(数模转换器)实现。
ADC将模拟信号转换为数字信号,DAC将数字信号转换为模拟信号。
模拟IO口的使用相对复杂,需要进行模数转换和数模转换,但在一些需要对模拟信号进行处理和控制的应用中起到关键作用。
3.应用场景:IO口在单片机系统中广泛应用于各种应用场景。
以下是一些常见的应用场景:-传感器接口:通过IO口连接传感器,读取传感器的输出信号,进行数据采集和处理。
例如温度、湿度、光照等传感器的接口。
单片机IO分时复用技巧

单片机IO分时复用技巧单片机的多个外部设备可以共用单片机I/O口线来实现控制、数据传送或信号接收,这种方法称为复用。
复用的基本原理是单片机错时交替对设备进行控制、检测或数据收发,即“分时复用”。
为了保证分时复用成功,最基本的要求是单片机控制某个设备时,复用端口的电平变化不应影响其他设备。
因此,每个被控制设备都应该有“片选”功能,能够通过“片选”关闭或接通与单片机I/O的联络。
在某些情况下,并不是真正意义上的“片选”,例如可以使用“写”线来区分数据的目标芯片。
2)控制线复用控制线复用是指将多个设备的控制线连接在一起,通过单片机对控制线进行分时控制,从而实现多个设备的控制。
这种方法可以减少控制线的数量,但需要在编程时对控制线进行精细的控制,以避免干扰其他设备。
3)技巧性减少输出线和信号线通过技巧性减少输出线和信号线,可以实现更有效的复用。
例如,可以通过使用移位寄存器来减少数据输出线的数量。
此外,还可以使用多路复用器来减少信号线的数量。
4)隔离控制复用法隔离控制复用法是指将多个设备的控制信号通过隔离器进行隔离,从而实现多个设备的复用。
这种方法可以减少控制线的数量,但需要使用额外的隔离器。
5)抗干扰措施在进行复用时,需要注意抗干扰措施。
例如,可以使用滤波电路来减少干扰,或者使用光耦隔离器来隔离干扰。
6)不使用8255的完整接线表(超级复用)通过以上方法,可以实现不使用8255的完整接线表,从而实现超级复用。
在实际应用中,可以根据需要选择不同的复用方法,以达到最佳的效果。
1.8位数码管LED、LED、4X4键盘、部分传感器信号可以复用到P0口。
2.8位数码管LED、LED的CS1、CS2可以复用。
3.可以减少不必要的信号线,如步进电机模块左右限位信号只需一个,直流电机模块正反转可利用定时器实现,LCD只需写入数据时将读/写控制线接为只写模式。
4.利用光电耦合模块,端控制(片选)作用,将信号复用到P0口,省去8255.5.使用光电耦合模块隔离复用P0口时,需要注意抗干扰措施,如在发射极公共端接上拉电阻。
很全的51单片机IO端口详解(带图)

80C51的I/O端口结构及应用特性一,I/O端口的结构1,锁存器加引脚的典型结构80C51的I/O端口都有内部总线实现操作控制。
P0-P3四个I/O 口都可以做普通I/O口,因此,要求具有输出锁存功能。
内部总线有事分时操作,因此每个I/O端口都有相应的锁存器。
然而I/O端口又是外部的输入/输出通道,必须有相应的引脚,故形成了I/O端口的锁存器加引脚的典型结构。
2,I/O口的复用功能(1)I/O口的总线复用。
80C51在使用并行总线扩展时,P0口可作为数据总线口和低8位地址总线口,这是,P0为三态双向口。
P0口输出总线的地址数据信号,P2口输出高8位地址信号。
(2)I/O口的功能复用。
I/O口的P3为功能复用的I/O端口。
端口有复用输出的控制端;引脚也有复用输入的控制端。
3,准双向结构P0,P1,P2,P3口做普通I/O口使用时,都是准双向口结构。
准双向口的典型结构见P1口位结构图。
准双向口的输入操作和输出操作本质不同,输入操作时读引脚状态;输出操作时对口锁存器的写入操作。
有口锁存器和引脚电路可知:当有内部总线对只1或只0时,锁存器的0、1状态立即反应到引脚上。
但是输入操作(读引脚)时,如果口锁存器的状态为0,引脚被嵌位在0状态,导致无法读出引脚的高电平输入。
二,I/O端口的应用特性1,引脚的自动识别。
无论P0,P2口的总线复用,还是P3口的功能复用,内部资源会自动选择,不需要通过指令的状态选择。
2,口锁存器的读、该、写操作。
许多涉及到I/O端口的操作,只是涉及口锁存器的读出、修改、写入的操作。
这些指令都是一些逻辑运算指令、置位/清除指令、条件转移指令以及将I/O口作为目的地址的操作指令。
3,读引脚的操作指令。
如果某个I/O口被指定为源操作数,则为读引脚的操作指令。
例如,执行MOV A,P1时,P1口的引脚状态传送到累加器中,执行MOV P1,A是,指令则将累加器的内容传送到P1口锁存器中。
4,准双向口的使用。
单片机IO功能介绍

单片机IO端口工作原理一、P0端口的结构及工作原理P0端口8位中的一位结构图见下图:输入缓冲器:在P0口中,有两个三态的缓冲器,三态门有三个状态,即在其的输出端可以是高电平、低电平,同时还有一种就是高阻状态。
图中有一个是读锁存器的缓冲器,也就是说,要读取D锁存器输出端Q的数据,那就得使读锁存器的这个缓冲器的三态控制端(上图中标号为…读锁存器‟端)有效。
图中另一个是读引脚的缓冲器,要读取P0.X引脚上的数据,也要使标号为…读引脚‟的这个三态缓冲器的控制端有效,引脚上的数据才会传输到我们单片机的内部数据总线上。
D锁存器:一个触发器可以保存一位的二进制数(即具有保持功能),在51单片机的32根I/O口线中都是用一个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口是作为…地址/数据‟总线使用的。
STM32单片机的八种IO口模式解析

STM32单片机的八种IO口模式解析
STM32八种IO口模式区别
(1)GPIO_Mode_AIN模拟输入
(2)GPIO_Mode_IN_FLOATING浮空输入
(3)GPIO_Mode_IPD下拉输入
(4)GPIO_Mode_IPU上拉输入
(5)GPIO_Mode_Out_OD开漏输出
(6)GPIO_Mode_Out_PP推挽输出
(7)GPIO_Mode_AF_OD复用开漏输出
(8)GPIO_Mode_AF_PP复用推挽输出
以下是详细讲解
(1)GPIO_Mode_AIN模拟输入
即关闭施密特触发器,将电压信号传送到片上外设模块(不接上、下拉电阻)
(2)GPIO_Mode_IN_FLOATING浮空输入
浮空输入状态下,IO的电平状态是不确定的,完全由外部输入决定,如果在该引脚悬空的情况下,读取该端口的电平是不确定的
(3)GPIO_Mode_IPD下拉输入GPIO_Mode_IPU上拉输入
一般来讲,上拉电阻为1K-10K,电阻越小,驱动能力越强
电阻的作用:防止输入端悬空,减少外部电流对芯片的干扰,限流;,增加高电平输出时的驱动能力。
上拉输入:在默认状态下(GPIO引脚无输入)为高电平
下拉输入:在默认状态下(GPIO引脚无输入)为低电平
(4)GPIO_Mode_Out_OD开漏输出
开漏输出:输出端相当于三极管的集电极。
要得到高电平状态需要上拉电阻才行。
适合于做电流型的驱动,。
51单片机io口工作的基本原理

51单片机io口工作的基本原理51单片机是一种广泛应用于嵌入式系统开发的微控制器,其基本原理是通过控制输入/输出(I/O)口的电平状态来实现与外部设备的连接与交互。
单片机的I/O口被称为通用I/O口(General Purpose I/O,GPIO),可以通过设置其输入与输出模式以及控制电平状态来与外部设备进行数据的传输与控制。
在51单片机中,GPIO口可以进行两种模式的设置:输入模式和输出模式。
在输入模式下,GPIO口可以将外部设备的电平状态作为输入信号接收,并将该信号传送至单片机内部进行处理。
在输出模式下,单片机可以通过控制GPIO口的电平状态向外部设备发送数据或控制信号。
当GPIO口设置为输入模式时,单片机内部会初始化一个输入缓冲区,用于存储外部设备传入的电平信号。
当外部设备改变电平状态时,单片机会及时检测到,并将相应的电平状态记录在输入缓冲区中。
通过读取输入缓冲区的数值,单片机可以获取外部设备传入的数据。
这样,单片机就能够实现与外部设备的数据交互。
当GPIO口设置为输出模式时,单片机内部会初始化一个输出缓冲区,用于存储将要发送至外部设备的数据。
根据所需的传输方式,单片机可以通过改变输出缓冲区的数值来控制GPIO口的电平状态。
当输出缓冲区的数值发生改变时,单片机会通过输出电路将该数值转换为相应的电平状态,从而将数据或控制信号送至外部设备。
除了设置输入/输出模式以及控制电平状态之外,单片机还可以对GPIO口进行中断配置以及上下拉电阻的设置。
中断配置可以实现在特定事件发生时自动跳转至相应的中断服务函数,从而实现对外部设备的实时响应。
上下拉电阻则可以提供电平稳定性,防止输入口因为无输入信号而漂移到不确定状态。
综上所述,51单片机的I/O口工作基于设置输入/输出模式以及控制电平状态,通过与外部设备进行电平交互来实现数据的传输与控制。
通过合理配置中断和上下拉电阻,单片机可以实现高效稳定的IO口工作,为嵌入式系统开发提供强大的功能与灵活性。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
void Key_Dispaly_Driver() //按键检测和数码管显示放一起 {
static uint8 num=0; //顺序扫描 static uint8 Key1TimeCont=0;//key1 去抖延时计数 static uint8 Key2TimeCont=0;//key2 去抖延时计数 static uint8 Key3TimeCont=0;//key3 去抖延时计数 static uint8 Key4TimeCont=0;//key4 去抖延时计数 static uint8 KeyLock=0;
结束语:上面程序有些已经注释了,本人也是看到公司的一个蒸汽流量计的显示电路就是用 此电路来实现数码管和按键公用 IO 口。所以自己就编了个程序来实现其键盘和显示的功能, 如有不对的地方,还望指正。本人是菜鸟,一直很喜欢电子,虽然现在从事的不是这方面的 工作。
void Key_Dispaly_Driver();
void Timer0_Init() {
TMOD |= 0x01; TH0 = (65536-1000)/256; TL0 = (65536-1000)%256; EA = 1; ET0 = 1; TR0 = 1; }
//定时 1ms
void main() {
P0 = 0xFD;
break;
case 4:
SEG_C = 0;
P0 = Tab[SegShow3];
break;
case 5:
SEG_C = 1;
P0 = 0xFB;
break;
case 6:
SEG_D = 0;
P0 = Tab[SegShow4];
break;
case 7:
SEG_D = 1;
switch(num) {
case 0: SEG_A = 0; P0 = Tab[SegShow1]; break;
case 1: SEG_A = 1; P0 = 0xFE; break;
case 2:
SEG_B = 0;
P0 = Tab[SegShow2];
break;
case 3:
SEG_B = 1;
Timer0_Init(); SegShow1 = 12; SegShow2 = 12; SegShow3 = 12; SegShow4 = 0; while(1) {
switch(KeyCode) {
case 1: SegShow4=1; KeyCode = 0; break;
ca= 0xF7;
break;
}
if(KeyCom==1)//判断无按键按键,解锁
{
KeyLock = 0;
}
else if(KeyLock==0&&num==1) //如果按下的是 Key1
{
Key1TimeCont++;
//计数
if(Key1TimeCont>KeyDelayTime)//计数大于去抖时间
3.其中,数码管阳极接的下拉电阻正常情况是不需要的,可以不知道为什么 Protues 中不接 就不能正常显示。电路中有四个按键(也可添加更多的按键,理论上总的可以接 8 个),分 别是 S1、S2、S3 和 S4。测试程序中,仿真开始显示数字”0”,按下 S1 则显示 1,按下 S2 则显 示 2,以此类推。 4.下面是程序,其中按键检测原理是借用吴鸿坚按键检测的思想。数码管显示就是普通的动 态扫描,程序代码如下: #include <reg52.h> typedef unsigned char uint8; typedef unsigned short int uint16; sbit SEG_A = P2^0; sbit SEG_B = P2^1; sbit SEG_C = P2^2; sbit SEG_D = P2^3; sbit KeyCom = P1^0; //按键公共端 IO
{ Key2TimeCont = 0; KeyLock = 1; KeyCode = 2;
} } else if(KeyLock==0&&num==5) {
Key3TimeCont++; if(Key3TimeCont>KeyDelayTime) {
Key3TimeCont = 0; KeyLock = 1; KeyCode = 3; } } else if(KeyLock==0&&num==7) { Key4TimeCont++; if(Key4TimeCont>KeyDelayTime) { Key4TimeCont = 0; KeyLock = 1; KeyCode = 4; } } num++; if(num>7) num = 0; }
break; case 3:
SegShow4=3; KeyCode = 0; break; case 4: SegShow4=4; KeyCode = 0; break; } } }
void Timer0_Isr() interrupt 1 {
TF0 = 0; TR0 = 0;
Key_Dispaly_Driver();
uint8 SegShow1; uint8 SegShow2; uint8 SegShow3; uint8 SegShow4;
#define KeyDelayTime 5 uint8 KeyCode = 0;
uint8 code Tab[]= //共阳极数码管段码 {
0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90, //"0~9" 0xBF,0x8C,0xFF,0x88,0xAF //10"-",11"P",12"空",13"A",14"r" };
{
Key1TimeCont = 0; //计数清零,下次好用
KeyLock = 1; //自锁
KeyCode = 1; //按键值为 1
}
}
/******其他按键同上********/
else if(KeyLock==0&&num==3)
{
Key2TimeCont++;
if(Key2TimeCont>KeyDelayTime)
IO 口复用用于按键和数码管显示
1.在一些情况下单片机的 IO 口不够用,遇到 IO 口不够用的时候我们该怎么做呢,大家都能 想到用芯片来扩展 IO,或者用 74HC595 等来驱动数码管减少 IO 口的使用。今天,我告诉大 家不用其他芯片就能实现按键和数码管显示公用 IO 口。 2.废话不多说,先说原理图(其实电路也不是自己想到的,也是看到别人的),该电路只需用 到普通 PNP 三极管(因为我用的是共阳极数码管)和二极管 1N4148,原理图如下: