打印

帮帮新手

[复制链接]
1978|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zl040901|  楼主 | 2008-7-23 11:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
coldra| | 2008-7-23 11:49 | 只看该作者

也可以

注意在延时过程中不要有对该口的输出操作,比如有中断中操作该口的可能

使用特权

评论回复
板凳
zl040901|  楼主 | 2008-7-23 14:47 | 只看该作者

疑问

为什么它不置1也可以做为输入口吗

使用特权

评论回复
地板
happy_mcu| | 2008-7-23 17:01 | 只看该作者

51单片机没必要置1

输入就直接读,输出就直接写就可以了

使用特权

评论回复
5
zl040901|  楼主 | 2008-7-23 17:44 | 只看该作者

00

4楼的我好像看到书上说置1啊

使用特权

评论回复
6
lyjian| | 2008-7-23 18:11 | 只看该作者

4楼要恶补一下基础了

标准51单片机在做输入前是很有必要先置1(不是没必要!)
但已经置了一次1,你就没必要过一会又去置一次1了
除非中间它被置成0了。

使用特权

评论回复
7
zl040901|  楼主 | 2008-7-24 10:20 | 只看该作者

00

      6楼的,会不会可能出现这种情况,即来了一个干扰信号,单片机刚开始检测到有键按下,延时之后,没了,而输入口前面因为检测到有键按下已经被置0,而此时在读口状态,它难道不会出错吗

使用特权

评论回复
8
lyjian| | 2008-7-24 10:57 | 只看该作者

不会出现这种情况

输入口不会因为前面检测到有键按下就被置0(除非你检测有键按下故意向它写0)。
51的端口读或判断指令只会去检测端口的状态而不会去改写端口的寄存器。

使用特权

评论回复
9
gaohq| | 2008-7-24 11:08 | 只看该作者

记得书上说的跟楼上说的一样.

使用特权

评论回复
10
gyt| | 2008-7-24 12:12 | 只看该作者

不用

使用特权

评论回复
11
zl040901|  楼主 | 2008-7-24 20:57 | 只看该作者

还有一点疑问

希望Lyjian 帮忙解答一下
当我们读入信号之后,它不是又通过D触发器来到IO 口吗,这样不改变了吗?
不知道我这样是那理解错了,Lyjian 能不能稍微解释以下呢,谢谢!

使用特权

评论回复
12
lyjian| | 2008-7-25 10:06 | 只看该作者

你的理解是错误的

读入的信号送到哪里是由编程者确定的(指令),它不一定会送到IO口来,除非你的指令中指定的目标地址就是IO口,如指令MOV P1,P1,它会读入P1口的数据然后再送入P1口;另外一些指令,如MOV A,P1;MOV R0,P1等,它都是把P1口的数据送到内部寄存器中。
按键程序中一般用到JB/JNB指令,它只是读IO口的状态,不会把读到的状态再写回IO口的。

使用特权

评论回复
13
chenczy| | 2008-7-25 11:15 | 只看该作者

我来说一句

  个人从书上看到,也是从实践中得到的,51单片机P0一定要接上拉,P1口要作为输入口,读数前最好置1。个人经验所得

使用特权

评论回复
14
zl040901|  楼主 | 2008-7-25 14:51 | 只看该作者

那么

假如我连续从P10口读入键值,我只要在第一个键值前置P10口1,后面再读键值是可以不置P10口为1的吧,前提是我不对P10口做输出为0的操作,Lyjian我这样理解错了吗

使用特权

评论回复
15
lyjian| | 2008-7-25 15:16 | 只看该作者

没错

使用特权

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

本版积分规则

16

主题

61

帖子

0

粉丝