lkc8210 发表于 2022-4-28 13:32 感谢回复 这样的话确实是比较省时间 ![]() |
其实又不用全代码CV 只需要加个全局变量来選擇用个腳就可以了 如 if(IIC_Sel)//0=IIC1, 1=IIC2 SDA1 = 1; else SDA2 =1; |
Hephaestus 发表于 2022-4-27 17:42 感谢回复 值得参考的建议 |
188610329 发表于 2022-4-27 21:57 给自己挖了个大坑 ![]() |
Y_G_G 发表于 2022-4-27 21:15 好巧不巧的是 硬件IIC地址都是0XA0 外部EEPROM采用的是SOT-23-5的封装也没有办法更改从机地址 |
旧言四 发表于 2022-4-27 16:31 说实话, STC15 系列没有硬件 IIC, 换句话说,你只能通过软件模拟来 操作IIC, 也就是说不可能在后台读写IIC器件,必须前台读写的话,同一之间你只能访问一个IIC器件,因此,两个IIC器件,分别用两个套IO来操控的意义何在? 感觉是给自己增加工作量啊…… |
7#已经回复过了 如果不是代码空间已经不够用了,实在不理解为什么要减少代码量?C+V它不香吗? 说不定整半天,代码量反而更多了 再说,当初设计的时候就应该先看一下IIC的从机地址,如果不是一样的地址,那就两根线足够了 |
IAP15W4K61S4有61k ROM 就那一点点的代码量CV十次都绰绰有余 |
纯c51语言是无法实现你需要的功能,只能用汇编写函数,用c语言调用这个函数。 |
51系统单片机中的特殊寄存器的地址是:80-FFH 而高端RAM的地址也是:80-FFH 这两个地址是相同的。51为了能区分它们,在指令系统上做了如下的规定: 直接寻址(访问)对应的是特殊寄存器。 间接寻址(访问)对应的是高端RAM。 明白这一点就不难理解了。 你用指针访问80H,而80H即表示特殊寄存器的P0口,也表示高端RAM中的80H。现在知道你访问的是哪一个了吧。 要读通CPU手册,这些手册上都有。 |
munuc_w 发表于 2022-4-27 16:10 感谢回复 确实使用一条总线确实可以实现目的 但是因为在结构上也是两个IIC外设单独挂载的 所以暂时不能用这种方法。这边首选还是设想一种方案以软件来实现外设端口的跳转,了解到51的SFR地址区域只能采用直接寻址,是不是代表着没有办法在主程序中以指针或者中间值替换的方式改变SFR关键字的定义地址呢 |
IIC设备是有地址的,放在一组总线上就可以了,用地址区分设备。 |