zyk12345 发表于 2024-12-22 16:39:43

为啥两种写法效果不一样

使用注释的那个,ADC的值是浮空的
使用下面那个ADC值则正常4095
因为我只需要使用几个ADC,在使用只把部分ADC设置为高阻输入时发现

晓飛飛 发表于 2024-12-22 17:49:49

zyk12345 发表于 2024-12-22 17:29
大佬为啥IO模式不配置成高阻输入,ADC值是4095啊,采集3.3v数据也正常还很稳,配置成高组输入,能测数据 ...

如果设置为推拉模式或者准双向模式时,IO端口默认输出高电平,相应端口由于拉高所以采集到的 就是ADC最大值4095,设置成高阻输入时,采集到的是端口的实际值,至于波动大的情况需要考虑是VREF波动引起的还是输入电压本身波动就大,然后针对性的处理即可。

晓飛飛 发表于 2024-12-22 17:00:58

十进制的1相当于十六进制的0x01, 和0xFF完全是不同的,换算成二进制1是00000001,而0xff是11111111.

zyk12345 发表于 2024-12-22 17:15:12

晓飛飛 发表于 2024-12-22 17:00
十进制的1相当于十六进制的0x01, 和0xFF完全是不同的,换算成二进制1是00000001,而0xff是11111111. ...

0x01和0xFF,最低位都是1,为啥那最后一个端口的效果还是不一样的,搞不懂

zyk12345 发表于 2024-12-22 17:17:33

晓飛飛 发表于 2024-12-22 17:00
十进制的1相当于十六进制的0x01, 和0xFF完全是不同的,换算成二进制1是00000001,而0xff是11111111. ...

我直接赋值1,ADC那个值就是4095,而我使用0xFF,ADC那个值就只有几百的值,0x01和0xFF,有一位是相同的,出来的效果不同

晓飛飛 发表于 2024-12-22 17:25:12

zyk12345 发表于 2024-12-22 17:17
我直接赋值1,ADC那个值就是4095,而我使用0xFF,ADC那个值就只有几百的值,0x01和0xFF,有一位是相同的, ...

除了P1.0,其它IO的输入输出配置完全不同,你的ADC用的不是P1.0吧

zyk12345 发表于 2024-12-22 17:29:46

晓飛飛 发表于 2024-12-22 17:25
除了P1.0,其它IO的输入输出配置完全不同,你的ADC用的不是P1.0吧

大佬为啥IO模式不配置成高阻输入,ADC值是4095啊,采集3.3v数据也正常还很稳,配置成高组输入,能测数据但数据波动大

DebugLab 发表于 2024-12-22 19:11:40

zyk12345 发表于 2024-12-22 17:29
大佬为啥IO模式不配置成高阻输入,ADC值是4095啊,采集3.3v数据也正常还很稳,配置成高组输入,能测数据 ...

设置成高阻,ADC值几百,IO开路的话用手一摸,ADC值还会变,手摸GND和ADC脚,接近0,手摸VCC和ADC脚,接近最大值,这就对了,高阻就是这样的,必须接个稳定电压才能稳(飘几个十几个字也是正常的),不希望飘要优化电路,比如不能用开关电源直接供电,尽量减小纹波,ADC脚接小电容滤波,VREF滤波,再配合数字滤波算法

梁工 发表于 2024-12-22 23:18:49

P1M1=0xff; P1M0=~0xff;   这两句将所有的P1.0~P1.7设置为高阻输入。
P1M1=1; P1M0=~1;   这两句将P1.0设置为高阻输入,P1.1~P1.7设置为推挽输出。
如果P1.0是ADC输入,则ADC结果应该一样。
页: [1]
查看完整版本: 为啥两种写法效果不一样