没有设置为输入模式,数据发送过来,IO引脚会变换吗

[复制链接]
2143|5
 楼主| tiantianlianxi 发表于 2013-7-30 19:12 | 显示全部楼层 |阅读模式
在用单片机引脚对AT24C08进行读写操作,通过模拟IIC 方式。
单片机引脚要设置 输入和输出 两种方式。
请问:在读(接收)存储器数据时,单片机SDA引脚没有设置为输入模式,SDA会不会,根据是0是1来改变状态,


还是说 ,只有设置为输入了,引脚状态才能改变。
wen_hau 发表于 2013-7-30 21:55 | 显示全部楼层
你设置开漏输出  外接状态可以拉低, 上拉电阻可以拉高。引脚的电平跟外部有关系,你读到的是你端口寄存器的值,你去读输出端口的值,如果你开始有写端口为高一般可以读到,如果开始写端口低 好像就不对了
林志财 发表于 2013-7-30 22:38 | 显示全部楼层
感觉LZ这问题有点奇怪,怎么不是在写地址的时候就知道SDA线是收还是发了嘛,I2C总线不是先起始信号,然后写地址,写的时候器件根据你最后一位的0或1就知道你是读还是写,怎么会像你说的乱七八糟的
叶伤 发表于 2013-7-31 11:17 来自手机 | 显示全部楼层
本帖最后由 叶伤 于 2013-7-31 11:20 编辑

51的拉高之后就可以输入,因为P0、P、P2是直接读引脚,P3是经过一个与门后读引脚,引脚电平直接映射到寄存器。其它系列要看具体引脚,有些是通过专门的寄存器操作IO,要是你不设为输入,那寄存器上面的值不随IO变化,你送过来的电平变了,读出的还是你原来存在寄存器里的值,不随之而变。

如果你的问题是另一种意思,开漏输出时如果端口输出低电平,电压接近0,你送个高电平给IO,IO的开漏会把那个高电平强制拉低,想拉高拉不到(和与门一样,有一个低,电平就全低),这样你读的还是0,所以读的时候要先置1。建议楼主多看看端口电路结构。
通宵敲代码 发表于 2013-7-31 11:45 | 显示全部楼层
其实,有时候我也在考虑楼主说的问题,特别是学完51在用其他单片机的时候,既然当初51的引脚读写这么简单,我和后来在其他单片机上会变得这么复杂呢,现在几乎所有的主流单片机,其IO口在读写的时候都要设定相当多的寄存器、有关引脚功能的、有关读写方向的、有关中断的,等等。
其实仔细想想,这也是无奈之举。

现在的单片机,高到主流的ARM,低到一般的51,内部都集成了太多的外设,而多数的外设都是需要引脚控制的,而引脚多了无疑会加大芯片的体积,如此便有了引脚复用技术,而不同的外设有不同的寄存器需要操作,引脚复用为了防止寄存器间的相互干扰,就需要使用更复杂的设计来完善,但这无疑会增加成本,同时也会使芯片增大,这就有重复了上面的问题,因此,只能增加更多的寄存器来进行控制。

相对来说,开放更多的寄存器反而方便开发,可以是开发更灵活,也算是一件幸事吧。
3htech 发表于 2013-7-31 16:06 | 显示全部楼层
试试就知道了。

不过,如果有方向寄存器,你为何不按照手册进行?

试成功了,不一定代表没有问题。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

18

主题

98

帖子

0

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