这个STC12的ADC程序为什么不工作,哪里打错了?

这个STC12的ADC程序为什么不工作,哪里打错了?,第1张

这轿兆渣敏个STC12的ADC程序为什么不工作,A/D转换程序有闭梁租问题。

模拟电压输入脚要设置成高阻输入模式。启动A/D转换语句必须写成0X88 keil 里不允许写二进制数。倒数第二行删掉,不能关闭A/D电路。

uchar get_AD_result(uchar channel)

{

uchar AD_finished=0

ADC_RES = 0

channel &= 0x07

ADC_CONTR = AD_SPEED

_nop_()

ADC_CONTR |= channel

_nop_()

ADC_CONTR |= 0x80

delay(1)

ADC_CONTR |= 0x08

AD_finished = 0

while (AD_finished ==0 )

{

AD_finished = (ADC_CONTR &0x10)

}

ADC_CONTR &= 0xE7

return (ADC_RES)

}

把AD的结果通过IO口输出就可以了

这个程序P1.7做AD脚的,你稍微小改下,有什稿穗握么迷糊的,直接搬下来键庆族辩用就OK了,反正我一直这么用,他也没脾气。

STC的单片机基本都差不多少,自己修改下就可以了

这就要看你设置的AUXR1值是多余陆少了。

可以这样,首先定义告毁悉一个16位无符号整型ADC_RESULT

如果AUXR1=0则

ADC_RESULT=ADC_RES先将结果高字袜乎节放入

ADC_RESULT=ADC_RESULT<<2然后左移2位

ADC_RESL=ADC_RESL&0x03确保无用位为0

ADC_RESULT=ADC_RESULT | ADC_RESL最后组合起来称为16位二进制数

如果AUXR1=1则

ADC_RESULT=ADC_RES先将结果高字节放入

ADC_RESULT=ADC_RESULT<<8然后左移8位

ADC_RESULT=ADC_RESULT | ADC_RESL最后组合起来称为16位二进制数


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12474922.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存