标题: STC单片机 ADC模拟量有个地方不理解,每次读ADC的值时,要先打开转换ADC_CONTR |=... [打印本页]

作者: 芯菲    时间: 2024-1-10 02:18
标题: STC单片机 ADC模拟量有个地方不理解,每次读ADC的值时,要先打开转换ADC_CONTR |=...
STC单片机  ADC模拟量有个地方不理解,每次读ADC的值时,要先打开转换ADC_CONTR |= 0x40;
转换完成后又关闭转换ADC_CONTR &= 0xBF;
读完ADC的值后,又打开转换ADC_CONTR |= 0x40;
每次要读ADC数据,都要这样操作一便。
什么是转换?为什么每次读数据都要打开和关闭一次转换?

作者: newlined    时间: 2024-1-10 06:18
ADC_CONTR |= 0x40,是把ADC_CONTR的D6置1,D6是ADC_START位,应该是开始AD转换的意思。
看手册是这样说的:ADC_START:ADC 转换启动控制位。写入 1 后开始 ADC 转换,转换完成后硬件自动将此位清零。看手册,读完AD值后,应该不用关闭了。

作者: wulin    时间: 2024-1-10 07:16
模拟量转换成数字量不是立即完成,需要一点时间。启动转换后等待转换完成标志ADC_FLAG为1后,读取的数字量才有效,并且软件清0 ADC_FLAG,为下一次转换作准备。
作者: 刘佑红    时间: 2024-1-10 08:37
根据手册得知,每次转换前是需要先写入ADC_CONTR |= 0x40,但转换结束不需要再写入ADC_CONTR &= 0xBF了,因为单片机会自己清零,在实际应用中也是这样的。






作者: cocolala    时间: 2024-1-10 09:22
    1、要看下你的芯片版本,STC很多芯片如果不是最终版本会有硬件BUG,那么有问题不奇怪。
    2、你的应用是不是需要多个通道切换,如果是,这种打开ADC之后关闭ADC再到打开是属于正常的逻辑。如果是单个固定通道,又不考虑功耗,那么打开一次就可以不用关闭的。
    3、楼上正解,ADC打开后,包括ADC电源打开,是需要稍作延时的,这样检测出的值才更准确。

作者: joyb    时间: 2024-1-10 10:30
这是STC12的


作者: 芯菲    时间: 2024-1-12 16:26
刘佑红 发表于 2024-1-10 08:37
根据手册得知,每次转换前是需要先写入ADC_CONTR |= 0x40,但转换结束不需要再写入ADC_CONTR &= 0xBF了,因 ...

谢谢!
作者: 芯菲    时间: 2024-1-12 16:27
wulin 发表于 2024-1-10 07:16
模拟量转换成数字量不是立即完成,需要一点时间。启动转换后等待转换完成标志ADC_FLAG为1后,读取的数字量 ...

谢谢!
作者: 清风皓月抚心绕    时间: 2024-1-12 16:47
adc采集是独立于51单片机运行的,AD转换芯片与51单片机通过对应通信协议进行数据通信。0x40相当于二者沟通的门户,当单片机需要使用ADC的数据时打开通道进行数据交换。习惯上在读完后关闭通道,解放cpu资源。
作者: lgwd    时间: 2024-1-13 17:15
提出这类问题或是表明你没有认真阅读STC的说明书。或是你没有读懂说明书,那就是就是基础问题,还需要加倍努力提高单片机开发基础能力!




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