本帖最后由 chuancqc 于 2019-7-22 13:37 编辑
我看楼主AD取样的代码并没有什么问题
每次采样前需要清ADC中断请求标志,ADCIF=0
ADCON &= Bin(10111111); //清ADC中断请求标志,ADCIF=0
采样后或下一次采样前、需要将GO/DONE标志位置一
ADCON |= Bin(00000001); //GO/DONE标志位置一,开始下一次ADC转换
初始化参考:
ADCON = Bin(10000000); //允许ADC模块
ADT = Bin(11101110); //ADC时钟为系统时钟的32分频,T(ad) = 32*(1/8.192M) = 4us
//ADC采样时间为15个ADC时钟,T(s)= (14+1)*T(ad) = 60us
//ADC转换时间为12*T(ad) + T(s) = 108us
ADCH = Bin(11111111); //通道全开
ADCON &= ~Bin(00001110); //清楚选择通道选择标志位[2:0]
ADCON |= Bin(00000100); //选择CH2通道作为初始通道
ADCON |= Bin(00000001); //开始ADC转换
我之前遇到过烧录器供电仿真读ADC,和烧录口复用的端口AD值一直为0,
后查明原因为烧录器默认烧录口是下拉的,可是楼主用的是1通道,非烧录复用端口
但是楼主if(adval >1001001110) 中的adval是16位撑死也只能够到65535吧
|