I/O口问题

[复制链接]
 楼主| 20120703 发表于 2012-9-9 22:40 | 显示全部楼层 |阅读模式
为什么传统的51单片机的I/O是双向的,不用设置直接就可以用了,而现在很多单片机为什么必须得设置I/O口的方向呢。是进步了还是退步了,是出于什么考虑呢。
原野之狼 发表于 2012-9-9 23:17 | 显示全部楼层
传统的也需要设置方向  只是没有单独的方向寄存器一说
 楼主| 20120703 发表于 2012-9-9 23:28 | 显示全部楼层
传统的也需要设置方向  只是没有单独的方向寄存器一说
原野之狼 发表于 2012-9-9 23:17


传统的没有设置直接就可以双向使用啊,比如我在控制LCD1602时候在写数据之前需要事先判断下是否忙,就需要先读下。不忙的话然后就可以写数据了,这个过程中方向都是自动完成的啊,我并没有设置方向啊,并且也没有相关的寄存器可以设置啊。
原野之狼 发表于 2012-9-9 23:52 | 显示全部楼层
所谓“设置”为输入就是对输出寄存器写1
单片机复位后该输出寄存器默认值为0XFF,若程序中仅对此IO作为输入操作,那么可以不用做此写1操作。
目前你的做法可能是有问题的,没有出现问题的原因可能是:
1 你的上次对此IO的写操作就是1,所以在读的时候不会出问题。
2 或许在编译的时候增加了写1的操作,我不能肯定,这个你跟踪下汇编代码就知道了。
 楼主| 20120703 发表于 2012-9-10 00:17 | 显示全部楼层
明白了
 楼主| 20120703 发表于 2012-9-10 00:37 | 显示全部楼层
本帖最后由 20120703 于 2012-9-10 00:39 编辑
所谓“设置”为输入就是对输出寄存器写1
单片机复位后该输出寄存器默认值为0XFF,若程序中仅对此IO作为输入操作,那么可以不用做此写1操作。
目前你的做法可能是有问题的,没有出现问题的原因可能是:
1 你的上次对 ...
原野之狼 发表于 2012-9-9 23:52



我看了下STC的51单片机手册上是这么写的,不清楚为什么要写1啊,在这个图上能解释清楚吗。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
lyjian 发表于 2012-9-10 08:26 | 显示全部楼层
写“1”下面的“强”下面的MOS关断,输出靠弱上拉维持高电平,外面可以拉高或拉低IO。
如果写“0”的话,“强”下面的MOS导通,输出低电平,外面拉高不了IO(强行拉高IO的话会损坏IO)。
ayb_ice 发表于 2012-9-11 15:48 | 显示全部楼层
从软件的角度讲,传统的51IO结构最好,只是耗电大点,但现在很多51已经出现自动关闭上拉电阻功能的51了,这样也很省电了
lyjian 发表于 2012-9-11 17:55 | 显示全部楼层
如果要真正的高阻的话就不好了
趣味单片机 发表于 2012-9-12 10:52 | 显示全部楼层
用传统的51,在IO口上接一个LED,串一个电阻到地,能点亮吗? 现在知道是进步还是退步了吧。
coody 发表于 2012-9-12 11:48 | 显示全部楼层
8楼说的对。

象STC的51,IO口弱上拉最的电流出现在大约2V时,电流大约100~300uA,当外电路拉低到0.8V以下,则关闭弱上拉,打开极弱上拉大约16uA,省电。
coody 发表于 2012-9-12 11:49 | 显示全部楼层
10楼,用51驱动单个LED我从来都是拉低亮。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

21

主题

263

帖子

3

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

21

主题

263

帖子

3

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