打印

51单片机IO口如何设置

[复制链接]
9327|25
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
icycoffee|  楼主 | 2011-4-24 12:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
想设置IO口为输入口,如果该IO口上次作为输出口,输出了0,那么必须再输出1,把场效应管截止吗?
    比如,P2口刚开始设置成0FFH,作为输入数据的端口,但是同时,P2.0口作为控制数据输入的输出口,那么如何保证在数据输入的同时,控制口不会被影响呢???

相关帖子

沙发
NE5532| | 2011-4-24 12:24 | 只看该作者
你P2端口上接了些什么东西?只要不是工作在总线模式下,每个端口可以单独输入输出的。

使用特权

评论回复
板凳
icycoffee|  楼主 | 2011-4-24 12:29 | 只看该作者
2# NE5532

那每次作为输入之前都要置1吗?可是置1的话,就把控制信号也变了啊

使用特权

评论回复
地板
icycoffee|  楼主 | 2011-4-24 14:43 | 只看该作者
非得逼我改控制口吗?

使用特权

评论回复
5
NE5532| | 2011-4-24 21:13 | 只看该作者
你同一个端口既当输入也当输出??

使用特权

评论回复
6
icycoffee|  楼主 | 2011-4-25 09:54 | 只看该作者
5# NE5532
对 但不是同时的 那个端口即作为控制输入的输出端口,又作为输入数据的端口

使用特权

评论回复
7
ayb_ice| | 2011-4-25 10:56 | 只看该作者
输出:
  P1_0 = x;
输入:
  P1_0 = 1;
 if(P1_0) ...
 if(!P1_0) ...

使用特权

评论回复
8
NE5532| | 2011-4-25 11:01 | 只看该作者
5# NE5532  
对 但不是同时的 那个端口即作为控制输入的输出端口,又作为输入数据的端口
icycoffee 发表于 2011-4-25 09:54


你先想清楚物理上那两个输入输出设备如何避免信号混叠。

使用特权

评论回复
9
lxc806705| | 2011-4-25 11:01 | 只看该作者
你将P2口置0xff,再给2个空延迟函数,延迟几ms【判断P2口是否变化,如果变化读入数据,这时候就可以将P2输出控制信号了,当然如果不清楚数据何时到来或者要一直读的话,不知道咋办了

使用特权

评论回复
10
NE5532| | 2011-4-25 11:03 | 只看该作者
不是这个问题,是那两个输入输出设备的端口接在一起,他们不会互相驱动??

使用特权

评论回复
11
sdpz| | 2011-4-25 11:21 | 只看该作者
就是7楼写的,输入前先将逻辑电平置高

使用特权

评论回复
12
icycoffee|  楼主 | 2011-4-25 12:28 | 只看该作者
7# ayb_ice

这个可以实现,但是我觉得有点儿麻烦 一共有64位数据的话,就要判断128次

使用特权

评论回复
13
icycoffee|  楼主 | 2011-4-25 12:29 | 只看该作者
9# lxc806705

就是不知道数据何时到来才问的

使用特权

评论回复
14
icycoffee|  楼主 | 2011-4-25 12:33 | 只看该作者
好了 我改了控制端口初始值了,比如P2.0口 先初始化为0,等到数据到来时,把P2.0置1 这样P2.0口就可以正常输入数据了...

使用特权

评论回复
15
ayb_ice| | 2011-4-25 13:07 | 只看该作者
好了 我改了控制端口初始值了,比如P2.0口 先初始化为0,等到数据到来时,把P2.0置1 这样P2.0口就可以正常输入数据了...
icycoffee 发表于 2011-4-25 12:33

还是去看书吧,感觉你还没有入门

使用特权

评论回复
16
icycoffee|  楼主 | 2011-4-25 14:38 | 只看该作者
15# ayb_ice

你说的对 我才刚开始做项目,原来只是看书,根本没多大印象了

使用特权

评论回复
17
受不了了| | 2011-4-25 15:03 | 只看该作者
呵呵,不要被书本所迷惑,一上电后它们都默认为输入状态的,如果你要读口子状态不用置1的,书店里的书本都是先置1,很书呆子的做法,既做输入又做输出的情况很少,我只知道IIC会有此情况。你把用C写的程序反汇编后就会发现它们读输入口时是不会先置1的

使用特权

评论回复
18
icycoffee|  楼主 | 2011-4-25 15:25 | 只看该作者
17# 受不了了

我是用汇编写的。。。

使用特权

评论回复
19
受不了了| | 2011-4-25 15:42 | 只看该作者
你用发帖子的时间实际的操作验证一下好了,既然用汇编,读输出口子也是直接用JB 或JNB也能读到正确的状态的,不需要先置1,永远不要。实践是检验真理的唯一手段

使用特权

评论回复
20
ayb_ice| | 2011-4-25 16:28 | 只看该作者
本帖最后由 ayb_ice 于 2011-4-25 16:33 编辑
你用发帖子的时间实际的操作验证一下好了,既然用汇编,读输出口子也是直接用JB 或JNB也能读到正确的状态的,不需要先置1,永远不要。实践是检验真理的唯一手段 ...
受不了了 发表于 2011-4-25 15:42

不要乱说
如果之前已经是0,请问怎样反映IO的实际状态
先置1是可靠程序的写法,这样可以大大提高程序的可靠性,一个程序不能光考虑正常情况,还要考虑异常情况,甚至很多情况要重点考虑异常情况.如果不先置1,一旦程序受到干扰或意外将IO置0后程序就死悄悄了,何况那个置1开销很小

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:热爱生活 崇尚自由

0

主题

46

帖子

1

粉丝