标题: 关于编码开关连接单片机作为地址,实现硬件更改本机ID [打印本页]

作者: Zzwh    时间: 2021-12-13 10:33
标题: 关于编码开关连接单片机作为地址,实现硬件更改本机ID
用两个编码开关连接P0口,实现硬件更改本机ID。现在 P0 = 0xXX;然后if( Data == P0),只能实现一个固定的ID,更改ID还要在程序上更改。(XX为ID)

读取单片机P0口高低电平作为地址,和发送的数据对比,具体怎么写?

b20089192750650.jpg (13.54 KB, 下载次数: 44)

编码开关

编码开关

作者: Zzwh    时间: 2021-12-13 10:57
定义变量ID = P0;然后再去判断,也实现不了
作者: Zzwh    时间: 2021-12-13 11:17
Zzwh 发表于 2021-12-13 10:57
定义变量ID = P0;然后再去判断,也实现不了

是数据类型的问题吗?
作者: Hephaestus    时间: 2021-12-13 11:23
到底是发送还是接收???
发送直接ID=P0,然后把数据发出去就好了。
如果是接收“现在 P0 = 0xXX;然后if( Data == P0)”这句完全无法理解,完全没有必要去设置P0。
作者: Zzwh    时间: 2021-12-13 11:32
Hephaestus 发表于 2021-12-13 11:23
到底是发送还是接收???
发送直接ID=P0,然后把数据发出去就好了。
如果是接收“现在 P0 = 0xXX;然后if ...

谢谢回复,我现在也知道不用设置P0了,但直接拿P0去和指令Data对比数据也不行
作者: Hephaestus    时间: 2021-12-13 11:39
Zzwh 发表于 2021-12-13 11:32
谢谢回复,我现在也知道不用设置P0了,但直接拿P0去和指令Data对比数据也不行

P0=0xff; // set P0 to input mode
if(Data==P0){}

这不就行了吗?你随时改拨码开关,然后Data跟拨码开关的值比对,如果对上了就接受。
作者: Zzwh    时间: 2021-12-13 11:40
Hephaestus 发表于 2021-12-13 11:23
到底是发送还是接收???
发送直接ID=P0,然后把数据发出去就好了。
如果是接收“现在 P0 = 0xXX;然后if ...

把两个编码开关调到1和0;设置P0 = 0x10; 然后再拿P0去判断就可以;但只能程序上更改ID
作者: Hephaestus    时间: 2021-12-13 11:43
Zzwh 发表于 2021-12-13 11:40
把两个编码开关调到1和0;设置P0 = 0x10; 然后再拿P0去判断就可以;但只能程序上更改ID

把两个编码开关调到1和0;设置P0 = 0xff; 然后再拿P0去判断ID就可以;因为P0读到的值是0x10,如果你接收数据指示ID=0x10就接收,不等于0x10就放弃。不需要程序上更改ID,因为ID的值是拨码开关设定的。
作者: Zzwh    时间: 2021-12-13 11:53
Hephaestus 发表于 2021-12-13 11:39
P0=0xff; // set P0 to input mode
if(Data==P0){}

这样也不行
作者: Zzwh    时间: 2021-12-13 11:57
Hephaestus 发表于 2021-12-13 11:43
把两个编码开关调到1和0;设置P0 = 0xff; 然后再拿P0去判断ID就可以;因为P0读到的值是0x10,如果你接收 ...

谢谢,明白了,但还是不行
作者: 188610329    时间: 2021-12-13 12:37
你说的不行,到底是什么?
还有,你知道不知道, 这个拨码开关连接P0口到底代表什么意思? 以及,你有没有手段确切地知道P0口的读值?最后,你知道不知道,8951的话,不上拉,P0口是没有1的?

作者: Hephaestus    时间: 2021-12-13 13:38
Zzwh 发表于 2021-12-13 11:57
谢谢,明白了,但还是不行

还是不行,是怎么不行?贴代码出来。
作者: 人工置顶员    时间: 2021-12-14 01:57
顶一下
作者: Zzwh    时间: 2021-12-14 10:35
188610329 发表于 2021-12-13 12:37
你说的不行,到底是什么?
还有,你知道不知道, 这个拨码开关连接P0口到底代表什么意思? 以及,你有没有手 ...

谢谢大佬的回复,通过串口把P0口的值读出来发现是高低4位反过来了(因为硬件是个成品,我是拿来搞程序的),现在把高低4位互换搞好了
作者: Zzwh    时间: 2021-12-14 10:36
Hephaestus 发表于 2021-12-13 13:38
还是不行,是怎么不行?贴代码出来。

谢谢大佬的回复,是我的问题,通过串口把P0口的值读出来发现是高低4位反过来了(因为硬件是个成品,我是拿来搞程序的),现在把高低4位互换搞好了
作者: datouyuan    时间: 2021-12-14 10:45
是不是硬件问题?
把2个拨码开关都拨到0位,看P0的8个脚是否全为0。
把2个拨码开关都拨到3位,看P0的8个脚是否为00110011。
作者: Zzwh    时间: 2021-12-14 11:46
datouyuan 发表于 2021-12-14 10:45
是不是硬件问题?
把2个拨码开关都拨到0位,看P0的8个脚是否全为0。
把2个拨码开关都拨到3位,看P0的8个 ...

谢谢回复,是硬件的问题,把高低4位互换就好了




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