单片机IO问题

一个普通IO口,如果我一开始程序控制让它变为高电平,那么如果之后它又因外部电路降至低电平后,我在程序中可以对这个IO检测么?能检测到这个IO是0么?还有,如果这时我把外部电路恢复,它会再自己变回高电平么?还是说以后就一直是低电平了,那么如果外电路给它变成高电平了呢?就一直保持高电平了?

就是搞不清IO的程控,外部使它变化和检测之间的关系和如何使用。
请详细一点,谢谢!

呵呵,小兄弟,关键时刻不能放迷糊,O(∩_∩)O哈哈~。我来答吧。
首先,单片机的I/O口是什么意思呢?就是既可以当作输入口,也可以当作输出口,英文缩写不用我说吧?这点,就是单片机I/O口的特性。
开始时候,你将其中一个口赋予高电平,比如:P3.2=1,这个是将引脚电平初始化,这时如果这个引脚不接地的话,也就是不因外部电路降低至低电平,它就是高电平的。如果因外部电路降至低电平后,这时你读P3.2的话,你就能够得到低电平了,你肯定会怀疑了,为什么现在变低电平了?因为,我最开始提到了,它是可以作输出又可以做输入的。比如,我编一个小程序让你看下,你就清楚了,我们将单片机的P3.2通过一个开关接地,开关断开,P1.2接一个发光二极管,的阳极,发光二极管另一端接地:
while(1)
{P3.2=1;P1.2=0;//将其接口初始化,这个是一般单片机开始都必须做的步骤,将I/O口初始化,此时,P3.2就是你要的原来是高电平的结果,P1.2=0,因此发光二极管是灭的。
if(P3.2==0) P1.2=1;//判断,若有开关按下,此时的P3.2引脚电平将被拉低,尽管开始时我们是让它高电平的。此时,二极管发光。若此时,开关没按下,或是你把开关断开了,P3.2将恢复原来的高电平,因为我们用了while循环,再一次将P3.2=1,P1.2=0了。
}
你的疑惑就是因为没有结合程序来考虑问题,单片机是编程和硬件结合起来的。你怀疑说如果外部电路恢复了,会不会变成原来的高电平?这个要结合程序了,有while无限循环了的话,那么它就会恢复高电平,如此往复。一般单片机的编程都必须要while。你不用想如果没有while的话,会不会不会变回来?这个问题就是要钻牛角尖了,因为我从学单片机来,还没有没见过没用while编程的,为什么呢?因为单片机执行程序的时间使用ms来衡量的,不用while的话,单片机根本无法工作。关于这点,你在学习中断那部分会有更深的体会的。
PS:keil中似乎那个LED外部接高电平的,如果你要在keil中运行我那段程序的话,把P1.2电平反过来就可以实现结果了。你自己在体会体会吧,如果还不明白,有什么程序不明白的话,HI我吧,我们去年学的单片机,对我来说单片机是小儿科了。去年期末论文答辩,把单片机机吃透了
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-08-10
“程序控制让它变为高电平,那么如果之后它又因外部电路降至低电平后”,程序中可以对这个IO检测,不过不同的单片机会有不同的检测结果,对于学生比较熟悉的8051,结果仍为高电平1,因为它读的是输出锁存器;而对于其它大多数单片机来说,读到的是引脚上的电平,即低电平0。“如果这时我把外部电路恢复”,它通常会恢复到原来的输出电平(如果没有损坏的话)。通常情况下,设置为输出高时是不允许外部拉低的(8051准双向的IO口及其它OC门模式的除外);输出低时更不允许外部强拉为高(包括8051),否则可能导致IO口的永久性损坏追问

那比如说是准双向的,例如AT89S51,如果IO置1,那么当外部低电平,程序能否检测到是0呢?

追答

能读到0,但反过来不行,即置0时外部拉高后读到的仍然是0,我前面的解释略有不妥。8051的P0口为“准双向口”,类似于OC门,输出高和输入状态是一个模式。

第2个回答  2011-08-10
51/AVR交流群:168359177
第3个回答  2011-08-10
可以。单说51,如果这样都不行的话那你的按键检测怎么做

EFT干扰单片机IO端口怎么处理
EFT干扰对单片机IO端口的处理是关键,有几种有效的方法可以应对。首先,优化PCB设计,合理布线可以减少干扰的传播路径。其次,针对I\/O端口,我们需要采取特别的处理策略,比如使用屏蔽、滤波或者选择抗干扰的I\/O引脚,以削弱脉冲的影响。此外,程序结构设计也不能忽视,通过降低数据传输速率、增加数据缓冲或者...

急!C51单片机I\/O口默认高电平问题!!!
1. 在C51单片机中,P0、P1、P2、P3端口的寄存器地址分别为0x80、0x90、0xA0、0xB0。这些地址指的是端口寄存器的地址,并非端口的默认高电平或低电平值。2. 如果发光二极管(LED)是高电平驱动的,当P0口输出值为0xFF(二进制为11111111)时,LED会亮起。然而,这个值不是直接从头文件中获得的,而...

单片机IO口的疑问,请教老师和高手,急用!!!
1.对于81的I\/O口,需要先写1,再读引脚,写1的时候D触发器Q非端为0,自然拉低了 T2,使之截止 2.P0口,当执行MOV @DPTR,A 时,这时多路开关‘控制’信号为‘1’,‘与门’解锁,‘与门’输出信号电平由“地址\/数据”线信号决定;多路开关与反相器的输出端相连,地址信号经“地址\/数据”线...

单片机初学者遇到的问题如下:8位漏极开路型双向并行I\/O口这句话谁能...
单片机初学者常遇到的问题如下:1. 对8位漏极开路型双向并行I\/O口的理解。这句话可以这样通俗解释:在单片机中,有一个叫做P0口的部分,它可以像一个双向通道一样工作,既可以用来输入数据,也可以用来输出数据。2. 漏极开路的概念。这里涉及到输出方面的一个特殊设计。想象一个三极管,这是一个电子...

单片机IO详解(上拉 下拉 准双向 输入 输出 推挽 开漏)
准双向口的独特之处在于它的双向性,作为输入时,通过施密特触发器和非门进行干扰滤波,而作为输出时需谨慎处理,以避免负载过大导致电流问题。总的来说,单片机的IO接口设计巧妙地结合了各种功能,以适应不同的信号处理需求,无论是确保信号稳定性,还是提供强大的驱动能力,都是为了在实际应用中实现高效和...

单片机io口是什么意思
单片机io口即对某一位的设定包括以下3个基本项:数据向量Data、属性向量Attribution和方向控制向量Direction。3个端口内每个对应的位组合在一起,形成一个控制字,用来定义相应I\/O口位的输入输出状态和方式。A口的数据向量单元,用于向数据向量寄存器写入或从该寄存器读出数据。当A口处于输入状态时,写入是...

成都控制板开发:STC单片机IO引脚驱动不了光耦PC817的原因及解决(带PC817...
首先,考虑限流电阻问题。PC817输入侧最大允许电流为50mA,输入侧光电二极管压降为1.2V。使用单片机5V电源,一般需加限流电阻,最大值R1为1.18KΩ,最小值R2为76Ω。选择660Ω电阻合适。问题可能不在于电阻。接着分析STC15单片机P2引脚参数。P2默认为准双向口模式,灌电流可达20mA,但拉电流只有270uA。

单片机接到蜂鸣器io口的电压只有0.6v怎么回事,模块的接线图是这样的...
IO 口的设置是否正确,包括输出模式、输出电平等。蜂鸣器驱动电路存在问题:蜂鸣器的驱动电路可能存在问题,例如电阻、电容或晶体管损坏等。需要检查蜂鸣器驱动电路是否正常。蜂鸣器阻抗过大:蜂鸣器的阻抗过大,导致单片机 IO 口无法提供足够的电流。这种情况下,可以尝试使用并联电阻或使用更低阻抗的蜂鸣器。

单片机的IO驱动LED灯电路,需要用到三极管,求原理图,并说明
搞不明白单片机I\/O口驱动LED为什么要用到那么复杂的电路,是单纯的为了复杂而复杂吗?很晕!如果一个I\/O口驱动一个LED,只要I\/O口低电平有效LED串一个470Ω的电阻即可,如果驱动多个LED只要按下图即可:如果Vcc=5v;则R0=1KΩ-5.1KΩ;Rn=470Ω。如果晶体管用S8550,那么同时点亮5个LED是没问题...

单片机IO通信问题
一直循环检测IO口状态,检测到起始信号边缘(如51单片机IO口一直是高电平,当检测到出现低电平即为启动信号),然后利用延时程序延时0.5ms,读取每个数据位的中间位置,判断是0还是1。根据你的实际要求,第一次读取肯定是高电平,第二次读取为低电平,你需要再判断第三次和第四次,如果第三、四次均为...

相似回答