「精品博文」LinCoding告诉您什么才是IO口
赢一个双肩 背包
有多难?
戳一下试试看!
→_→
长摁识别
【主题】:LinCoding告诉您什么才是IO口
【作者】:LinCoding
【时间】:2016.11.8
连续一周了,在弄传说中的SDRAM,不是说SDRAM,有多么多么难,我是受友晶SDRAM封装库的启发,想写一个通用版的SDRAM程序,更换SDRAM时候只需要改行列,就可以直接使用,虽然从上上周日开始看了一周友晶的SDRAM库,看懂了,并且自己写了全部的注释,但是移植到我黑金板子上时候,怎么都成功不了,各种找问题,实在是找不到,所以,从上周开始,打算自己写一个SDRAM的驱动程序,前前后后看SDRAM有10天了,真的是把我弄的寝食难安,觉睡不好,女票陪不了,不过这10天看了很多很多网上关于SDRAM的资料什么的 ,算是快把SDRAM吃透了,现在写好了单字节读写的程序,并且在两个不同芯片,不同SDRAM的FPGA上试了,可以很方便移植,等我整个写好以后,会免费上传到我的博客里,需要的朋友可以免费下载。
好了,废话说了一大推,在仿真SDRAM时候,由于SDRAM的数据口是inout型,那么,仿真时候该怎么弄呢,网址可能有人有过总结,但是我还是写一下吧,顺便谈谈我对IO口的理解。
一、什么是IO口
这还用说,就是既能做输入,又能做输出呗,所谓Input output的首字母缩写
二、什么是双向IO口,什么准双向IO口
是不是感觉。。。一下答不上来,反正笔者曾经是这样,不过各位大神一定对答如流了。
在学习标准51单片机时候,大家可能都知道,或者听过,或没注意过51单片机的IO口分为双向和准双向,具体起来说,就是80C51的P1、P2和P3为准双向IO口,P0为双向IO口,在学习STM32时候,更为恐怖,又是推挽,又是上拉,下拉的。。。整的刚开始学习的笔者直接懵逼了。。。,但是道理上都是一样的。那么问题来了什么是准双向?什么是双向?
“要读取时候先输出1,才能读,为准双向”,课本上是这么说的,但是说的好像P0口读取时候不用输出1一样,其实这并不是这么简单。
以下为笔者个人的理解:如果有误,笔者可不负责任啊,哈哈,倒是可以相互交流。
先看看51单片机IO的结构吧:
上面4副图引用自:《从零开始学单片机技术》——刘建清
这本书在讲51的IO结构时候说的还算比较清楚的,想弄清楚的读者,建议看一下。笔者看过有的书都是一笔带过,有的没怎么说清楚。
笔者理解如下:
P0口之所以称之为双向IO口是因为在作为地址/数据功能时,构成了推挽结构,可输出高电平和低电平,且当上下两个MOS管都截止时,呈现高阻态,可以实现内外数据的隔离,当PO口作为普通IO口使用时,构成了OC/OD门,即开集电极/漏极输出,低电平可以正常输出,但如果要输出高电平,必须外加上拉电阻。作为输入时,必须先输出1 ,即向内部的锁存器写1,以断开下拉的MOS管,此时,管脚处于浮空状态,然后读引脚就可读入高低电平。
P1、P2、P3之所以称之为准双向IO口,是因为内部带了上拉电阻,因此在任何时候都不会出现高阻态,只会出现高低电平。作为输出时,可输出高低电平,作为输入时,必须先输出1 ,即向内部的锁存器写1,以断开下拉的MOS管,然后读引脚就可读入高低电平。
准双向IO口输出低电平时,灌电流可达20mA,输出高电平时,输出能力较弱,不到1mA,若到输出高电平给其他器件,由于其他器件输入时为高阻态,因此可正常将高低电平输出,但,若要驱动外设(如LED),最好通过控制三极管来达到控制外设的效果。
说了这么多,晕了吧。。。。那就说简单点:
凡是在输出状态下能输出高电平和低电平,在输入状态下可以呈现浮空(高阻)的门即为三态门,它所构成的IO口成为双向IO,除此之外其他IO都是准双向IO。所以说只要能出现三态情况的口都是为双向口,只能出现两态的就叫准双向了呗。
虽然不知道笔者总结的对不对,但是在做SDRAM的数据口仿真时候,没有与现有的资料冲突
三、如何驱动或仿真带有IO口的模块
1、IO口驱动(只截取最重要的)
inout[15:0]IO;
input[15:0]WR_data;
outputreg[15:0]RD_data;
reg isOut;
always @ ( posedge CLK or negedge RSTn )
begin
if ( ! RSTn )
isOut <= 1'b0;
else
case ( state )
0://read data from IO
begin
isOut<= 1'b0;
RD_data<= IO;
state<= state + 1'b1;
end
1://write data to IO
begin
isOut<= 1'b1;
endcase
end
assign IO = isOut ? WR_data : 16'dz;
2、IO口仿真(只截取最重要的)
reg[15:0]treg_IO;//read IO
wire [15:0]IO;//Write IO
assignIO = treg_IO;
reg[15:0]RD_data;
reg[15:0]WR_data;
rData <= 0;
RD_data <= IO;
state <= state + 1'b1;
end
1://write data to IO
begin
treg_IO <= WR_data;
详解单片机的IO接口
MCS-51系列单片机有4组I/O接口:P0、P1、P2和P3。前面简单介绍了一下各个端口,要学好单片机技术,非常有必要详细了解这些端口的内部结构及工作原理。
P0端口
P0 端口有 P0.0~P0.7 共 8 个引脚,这些引脚除了可作 I/O 引脚外,在外接存储器时,还可作地址 / 数据总线引脚。 P0端口每个引脚的内部电路结构都相同,其内部电路结构如图2-6所示。
图2-6 P0端口内部电路结构
(1)当P0端口用作输出端口时
如果要将P0端口用作输出端口,单片机内部的CPU会发出一个“0”到与门的控制端。控制端的“0”一方面关闭与门(即与门的一端为“0”时,不管另一端输入何种信号,输出都为“0”),使地址/数据总线送来的信号无法通过与门;另一方面控制电子开关,让电子开关与锁存器的Q端接通。
此时若给锁存器的写锁存器端送写脉冲信号,内部总线送来的数据就可以通过D端进入锁存器并从Q和Q端输出,如D端输入“1”,则Q端输出“0”(Q端输出“1”),该“0”经电子开关送到场效应管VT2的栅极,VT2截止,从P0端口输出“1”。
也就是说,当给P0端口内部的与门控制端送“0”,同时给写锁存器端送写脉冲信号时,单片机内部总线的信号就可以通过接口电路从P0端口输出。
(2)当P0端口用作输入端口时
当将P0端口用作输入端口时,P0端口的信号既送到三态门,又送到VT2的漏极。如果锁存器之前锁存的为“0”,即Q=0、Q=1,其中Q=1会使VT2导通,P0端口被钳在“0”电平上,“1 ”将无法送入P0端口。
解决的方法是:在将数据输入P0端口前,先通过内部总线向锁存器写“1”,即让Q=0,VT2截止,P0端口输入的“1”就可以送到三态门的输入端,此时再给三态门的读引脚送一个读控制信号,“1”就可以通过三态门送到内部总线。
也就是说,要将P0端口作为输入端口,先要将P0端口的锁存器写“1”,然后再给输入三态门送读控制信号,P0端口的数据就可以通过接口电路,送到单片机内部的总线上。
(3)当P0端口用作地址/数据总线引脚时
如果要将P0端口用作地址/数据总线引脚,先要给与门的控制端送“1”,于是与门打开,同时电子开关和非门输出端接通。当地址/数据总线为“1”时,“1”一方面通过与门送到VT1的栅极,VT1导通,另一方面送到非门,经反相变为“0”,再经电子开关送到VT2的栅极,VT2截止,VT1导通,VT2截止使P0端口输出为“1”;当地址/数据总线为“0”时,VT1导通,VT2也导通,P0端口输出为“0”。
也就是说,当给与门的控制端送“1”时,内部地址/数据总线上的信号就可以从P0端口输出,P0端口就可当作地址/数据总线引脚使用。
P1端口
P1 端口有 P1.0~P1.7 共 8 个引脚,这些引脚可作 I/O 引脚。 P1端口每个引脚的内部电路结构都相同,其内部电路结构如图2-7所示。
图2-7 P1端口内部电路结构
从图2-7中可以看出,P1端口的结构较P0端口简单很多,由于P1端口内部采用了一只场效应管,并且与电源之间接了一只上拉电阻,所以不需要在P1端口的外部接上拉电阻。
(1)当P1端口用作输出端口时
如果要将P1端口用作输出端口,应给锁存器的写锁存器CL端送写脉冲信号,内部总线送来的数据就可以通过D端进入锁存器并从Q和Q端输出,如D端输入“1”,则Q端输出“0”(Q端输出“1”),该“0”送到场效应管的栅极,场效应管截止,从P1端口输出“1”。
(2)当P1端口用作输入端口时
当将P1端口用作输入端口时,如果锁存器以前锁存的为“0”,即Q=0、Q=1,其中Q=1会使场效应管导通,P1端口被钳在“0”电平上,“1”将无法送入P1端口。所以与P0端口一样,在将数据输入P1端口前,先要通过内部总线向锁存器写“1”,让Q=0,场效应管截止,P1端口输入的“ 1”就可以送到输入三态门的输入端,此时再给三态门的读引脚送一个读控制信号,“1”就可以通过输入三态门送到内部总线。
P2端口
P2端口有P2.0~P2.7共8个引脚,P2端口每个引脚的内部电路结构都相同,其内部电路结构如图2-8所示。
图2-8 P2端口内部电路结构
从图2-8中可以看出,P2端口的内部结构与P0端口很相似。P2 端口也可作 I/O 引脚,在外接存储器时,还可以作为地址总线引脚。
(1)当P2端口用作地址总线引脚时
如果要将P2端口用作地址总线引脚,单片机内部的CPU会发出一个控制信号到电子开关的控制端,让电子开关与内部地址总线接通,地址总线上的信号就可以在通过电子开关、非门和场效应管后从P2端口引脚输出。
(2)当P2端口用作I/O接口时
如果要将P2端口用作I/O接口,单片机内部的CPU会发出一个控制信号到电子开关的控制端,让电子开关与锁存器接通。
当将P2端口用作输出端口时,给锁存器的CL端送写脉冲信号,内部总线上的数据就被锁存进锁存器并从Q端输出,再通过电子开关、非门和场效应管从P2端口引脚输出。
当将P2端口用作输入端口时,如果锁存器以前锁存的为“0”,即Q=0,经非门反相后会使场效应管导通,P2端口被钳在“0”电平上,“1”将无法送入P2端口。所以与P0、P1端口一样,在将数据输入P2端口前,先通过内部总线向锁存器写“1”,让Q=1,场效应管截止,P2端口输入的“1 ”就可以送到输入三态门的输入端,此时再给读引脚送一个读控制信号,“1”就可以通过三态门送到内部总线。
P3端口
P3 端口有 P3.0~P3.7 共 8 个引脚, P3 端口可作为 I/O 接口,还可以用于其他方面。P3端口每个引脚的内部电路结构都相同,其内部电路结构如图2-9所示。
图2-9 P3端口内部电路结构
(1)当P3端口用作I/O接口时
如果要将P3端口用作I/O接口,应让与非门的选择输出功能端为“1”,以开通与非门。
当将P3端口用作输出端口时,给锁存器的CL端送写脉冲信号,内部总线送来的数据就可以通过D端进入锁存器并从Q端输出,再通过与非门和场效应管从P3端口引脚输出。
当将P3端口用作输入端口时,应先通过内部总线向锁存器写“1”,让Q=1,场效应管截止,P3端口输入的信号就可以通过缓冲器、输入三态门送到内部总线。
(2)当P3端口用作第二功能时
P3端口用作第二功能(又称复用功能)时,实际上也是在该端口输入或输出信号,只不过输入、输出的是一些特殊功能的信号。所以当P3端口用作第二功能时,其内部电路的工作原理与用作I/O接口时是一样的,在用作输入功能时,端口的锁存器同样要先置“1”。
P3端口8个引脚的第二功能详见表2-1。例如P3.2引脚用作第二功能时,该端口可输入由外部设备送到的中断请求信号,该信号通过缓冲器、输入三态门送到内部总线。
P3端口除了可以接收外界的输入信号外,还可以接收内部的替代输入功能端送来的信号,该信号通过输入三态门送到内部总线。
总之,P0、P1、P2 和 P3 端口的功能是:都可以作输入或输出端口; P0、P2、P3 端口具有第二功能,各种端口的第二功能见表2-1。例如,表中说明P0端口的第二功能可以用作低8位地址总线/ 数据总线,P2端口可用作高8位地址总线,P3.0端口可用作串行数据接收端。
表2-1 MCS-51系列单片机各端口的第二功能
相关问答
单片机 扩展 IO口 的地址如何 定义 ?如果你打算用总线接口的话,直接定义一个变量到绝对地址,并在编译环境里面选择large模式(默认small),unsingedintic74573_at_0xF0FF如果是打算不用总线,...
一个c51 单片机 怎么有人说有4个 io口 ,有人说32个 io口 ,到底多少...[最佳回答].一共有32个IO口,分四个组!所以一组是8个!(这里指的是AT89S51等)AT892051的IO口是少点!
单片机 中的p口和 IO口 的区别?P口指的是“并行口”IO口指的是“输入输出口”P口当然可以作为IO口来用,但是通常P3口会用于他的第二功能,而P2口、P0口则经常被用作地址总线和数据总线。只有P...
三、简答题1、MCS51系列 单片机 共有几个并行I/O 口 ,分别用什么...[最佳回答]MCS-51单片机有4个双向的8位I/O口的P0~P3口为三态双向口P1,P2,P3口为准双向口(用作输入时,口线被拉成高电平,所以称为准双向口).51单片机的4个口...
单片机 的 io口 作为输入口是,需要选输出全零?如今的比较好的单片机的IO口是可以定义的,这和最原来的51有区别。当作为输入口时候是单片机接收IC的数据信息,或者是灌电流,这时候要考虑电流的大小是否在单片...
单片机io口 没有设置时是什么电平?单片机io没有设置时呈高电平,即初始化时各相应的io端口呈高电平状态。如果要用初始化电平起动负载,这是不能的,要因初始化电平呈高阻态。单片机io没有设置时...
单片机 怎么 定义 低电平?定义单片机低电平,首先单片机是输出TTL电平的,单片机IO可以通过软件控制输入和输出,可以输出高低电平,意思就是让单片机IO输出高电平就是5V低电平就0V;例如一...
单片机IO口 有过流保护功能吗?一般是没有的,如果不注意,会有可能烧坏IO口;各个型号MCU对应的数据手册会注明IO口能承受的电流最大值。一般是没有的,如果不注意,会有可能烧坏IO口;各个型...
单片机 中串口与普通I/O 口 有什么区别?单片机串行口与普通IO口区别如下:1、串口用作串行通信,通信包括IIC,RS485,RS232等,它也是输出是定速度的0-1-0-之类变化。2、I/O口是指来关量的输入或输...
51 单片机 中P0 口 作I/O使用时,为何要在外部接上拉电阻-ZOL问答我从面向单片机程序员的角度补充一点:若未执行指令对P0口某位P0x置0时,上拉电阻可确保P0x状态为1,有利于提高I/O状态的稳定及控制的可靠性。也不会怎样额额...