标题: 51单片机端口复用问题 [打印本页]

作者: kuba310    时间: 2018-12-16 11:35
标题: 51单片机端口复用问题
本人初学者,遇到难题,请求各位行家帮忙,51单片机端口复用问题:单片机控制外围设备时,什么情况下可以端口复用,如何复用?有可以实现的例子最好(C语言实现),比如ADC0809和12864可以都挂在单片机同一端口上吗?可以分时复用吗?如何用?急急急
作者: 凌净清河    时间: 2018-12-17 18:25
如果多个器件使用同一种通信协议,那么可以通过总线的方式将器件连接起来,对于1-wire总线和IIC总线,通过地址与特定器件通讯,对于SPI总线,通过片选使能选择特定器件通讯。在IO不够用的情况下,可以通过IO扩展电路实现IO多路复用。除此之外,大多数情况下不可以将不同器件接在同一端口上。
作者: 凌净清河    时间: 2018-12-17 18:28
从逻辑的角度,假设两器件已经共享了同一组IO并且没有典型总线协议,如果你可以实现程序上对不同器件的选择和单独控制,IO复用也是可行的,但是要保证一点,在对某一器件操作时,其它器件对IO数据线路应呈现高阻(并不仅仅是不操作),这样才能有效避免干扰。
作者: Y_G_G    时间: 2018-12-17 22:28
大多是可以复用的呀,24CXX系列,18B20不都可以的吗?
一般来说,只要器件有使能端口或者有器件地址可选,那都是可以多用的呀
作者: 45454545x    时间: 2018-12-18 10:31
51单片机的分时复用功能,最直接的就是MOVX指令,用这个指令就是在分时复用P0口,执行:MOVX A,@DPTR,那么首先要送地址A0~A7给P0口,ALE有效,锁存在373上,再将这个地址的数据从P0口读入传给A
作者: lvjuliet    时间: 2018-12-18 14:51
那就在每个器件上加上一个使能管脚,使能对应的器件的时候再通信
作者: kuba310    时间: 2019-1-1 16:12
凌净清河 发表于 2018-12-17 18:28
从逻辑的角度,假设两器件已经共享了同一组IO并且没有典型总线协议,如果你可以实现程序上对不同器件的选择 ...

请问可以发一个简单的例子(C语言)吗,在下实在是小白一个,还是不会写。
作者: kuba310    时间: 2019-1-1 16:39
lvjuliet 发表于 2018-12-18 14:51
那就在每个器件上加上一个使能管脚,使能对应的器件的时候再通信

请问可以发一个简单例子的代码吗(C语言),本人刚开始学习单片机,自己写程序着实困难,目前还处在参考读懂别人程序阶段。谢谢
作者: 周超然    时间: 2019-1-2 08:33
是spi分时复用的话,可以通过cs片选。你显示什么东西,要多久刷新一次,分开就行了。
作者: 兀自清凉    时间: 2019-1-12 22:12
凌净清河 发表于 2018-12-17 18:28
从逻辑的角度,假设两器件已经共享了同一组IO并且没有典型总线协议,如果你可以实现程序上对不同器件的选择 ...

原来是这样,那我的应该就是有干扰了,我的是lcd1602和DAC0832。有什么办法可以使他们共用一个口,相当于分时间使用。怎么才能让其达到高阻态的效果
作者: 兀自清凉    时间: 2019-1-12 22:26
凌净清河 发表于 2018-12-17 18:25
如果多个器件使用同一种通信协议,那么可以通过总线的方式将器件连接起来,对于1-wire总线和IIC总线,通过 ...

如果一个P0口共用:两个DAC0832+一个lcd1602需要使用哪种方案
作者: yǔ    时间: 2019-1-13 14:48
51单片机的分时复用功能,最直接的就是MOVX指令,用这个指令就是在分时复用P0口,执行:MOVX A,@DPTR,那么首先要送地址A0~A7给P0口,ALE有效,锁存在373上,再将这个地址的数据从P0口读入传给A




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1