打印

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

[复制链接]
1636|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。建议楼主多看看端口电路结构。

使用特权

评论回复
5
通宵敲代码| | 2013-7-31 11:45 | 只看该作者
其实,有时候我也在考虑楼主说的问题,特别是学完51在用其他单片机的时候,既然当初51的引脚读写这么简单,我和后来在其他单片机上会变得这么复杂呢,现在几乎所有的主流单片机,其IO口在读写的时候都要设定相当多的寄存器、有关引脚功能的、有关读写方向的、有关中断的,等等。
其实仔细想想,这也是无奈之举。

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

相对来说,开放更多的寄存器反而方便开发,可以是开发更灵活,也算是一件幸事吧。

使用特权

评论回复
6
3htech| | 2013-7-31 16:06 | 只看该作者
试试就知道了。

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

试成功了,不一定代表没有问题。

使用特权

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

本版积分规则

18

主题

98

帖子

0

粉丝