帮帮新手

[复制链接]
2944|14
 楼主| zl040901 发表于 2008-7-23 11:46 | 显示全部楼层 |阅读模式
请问一下在读键中,这里先假设P10端口为输入,在读入之前我们要置P10端口为1,我延时去抖之后再读P10端口,它要不要一定置1呢,在有的程序中我看到延时去抖之后并不置1,而直接读P10口,这样可以吗
coldra 发表于 2008-7-23 11:49 | 显示全部楼层

也可以

注意在延时过程中不要有对该口的输出操作,比如有中断中操作该口的可能
 楼主| zl040901 发表于 2008-7-23 14:47 | 显示全部楼层

疑问

为什么它不置1也可以做为输入口吗
happy_mcu 发表于 2008-7-23 17:01 | 显示全部楼层

51单片机没必要置1

输入就直接读,输出就直接写就可以了
 楼主| zl040901 发表于 2008-7-23 17:44 | 显示全部楼层

00

4楼的我好像看到书上说置1啊
lyjian 发表于 2008-7-23 18:11 | 显示全部楼层

4楼要恶补一下基础了

标准51单片机在做输入前是很有必要先置1(不是没必要!)
但已经置了一次1,你就没必要过一会又去置一次1了
除非中间它被置成0了。
 楼主| zl040901 发表于 2008-7-24 10:20 | 显示全部楼层

00

      6楼的,会不会可能出现这种情况,即来了一个干扰信号,单片机刚开始检测到有键按下,延时之后,没了,而输入口前面因为检测到有键按下已经被置0,而此时在读口状态,它难道不会出错吗
lyjian 发表于 2008-7-24 10:57 | 显示全部楼层

不会出现这种情况

输入口不会因为前面检测到有键按下就被置0(除非你检测有键按下故意向它写0)。
51的端口读或判断指令只会去检测端口的状态而不会去改写端口的寄存器。
gaohq 发表于 2008-7-24 11:08 | 显示全部楼层

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

gyt 发表于 2008-7-24 12:12 | 显示全部楼层
 楼主| zl040901 发表于 2008-7-24 20:57 | 显示全部楼层

还有一点疑问

希望Lyjian 帮忙解答一下
当我们读入信号之后,它不是又通过D触发器来到IO 口吗,这样不改变了吗?
不知道我这样是那理解错了,Lyjian 能不能稍微解释以下呢,谢谢!
lyjian 发表于 2008-7-25 10:06 | 显示全部楼层

你的理解是错误的

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

chenczy 发表于 2008-7-25 11:15 | 显示全部楼层

我来说一句

  个人从书上看到,也是从实践中得到的,51单片机P0一定要接上拉,P1口要作为输入口,读数前最好置1。个人经验所得
 楼主| zl040901 发表于 2008-7-25 14:51 | 显示全部楼层

那么

假如我连续从P10口读入键值,我只要在第一个键值前置P10口1,后面再读键值是可以不置P10口为1的吧,前提是我不对P10口做输出为0的操作,Lyjian我这样理解错了吗
lyjian 发表于 2008-7-25 15:16 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

16

主题

61

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部