AD转换的问题
<p>代码:</p><pre>
<code>#include <stdio.h>
#include <stdlib.h>
#include <xc.h>
#include <string.h>
#pragma config POSCMOD= XT
#pragma config OSCIOFNC= OFF
#pragma config FCKSM= CSDCMD
#pragma config FNOSC= FRCDIV
#pragma config IESO= ON
#pragma config WDTPS= PS32768
#pragma config FWPSA= PR128
#pragma config WINDIS= OFF
#pragma config FWDTEN= ON
#pragma config ICS= PGx2
#pragma config GWRP= OFF
#pragma config GCP= OFF
#pragma config JTAGEN= OFF
/*
*
*/
#define POT 5
#define AINPUTS 0XFFDF
void delay(void)
{
int i,j;
for(i=0;i<200;i++)
for(j=0;j<200;j++)
;
}
void initADC(int amask)
{
AD1PCFG=amask;
//AD1CON1=0X00E0;
AD1CON1=0X0000;
AD1CSSL=0;
AD1CON2=0;
AD1CON3=0X1F04;
AD1CON1bits.ADON=1;
}
int readADC(int ch)
{
AD1CHS=ch;
AD1CON1bits.SAMP=1;
///////////////////////////
TMR1=0;
//PORTA=1;
while(TMR1<100);
PORTA=2;
AD1CON1bits.SAMP=1;
while(!AD1CON1bits.DONE);
TMR1=0;
while(TMR1<200);
PORTA=4;
return ADC1BUF0;
}
void main(void)
{
int a;
initADC(AINPUTS);
TRISA=0xff00;
TRISE=0;
//TRISBbits.TRISB5=1;
T1CON=0X8020;
while(1)
{
a=readADC(POT);
a=(a>>2);
//PORTE=(unsigned char)(a);
}
}</code></pre>
<p>while(!AD1CON1bits.DONE);这句过不去。</p>
<p>请问高手,怎么解决?谢谢!</p>
<p>忘了说了,用的芯片是PIC24FJ128GA010</p>
<p>用调试工具逐步跟踪代码执行过程,查看AD1CON1bits.DONE何时被置位</p>
<p>或者建一个简单的ADC测试程序,只包含ADC配置和转换,以排除其他代码干扰。</p>
Jacktang 发表于 2024-6-2 09:06
用调试工具逐步跟踪代码执行过程,查看AD1CON1bits.DONE何时被置位
或者建一个简单的ADC测试程序,只包 ...
<p>微芯官方例程都不行</p>
<div style="text-align: center;"></div>
<p> </p>
<p>例程都不行,是不是板子有问题?</p>
wangerxian 发表于 2024-6-3 10:31
例程都不行,是不是板子有问题?
<p>我用proteus仿真的</p>
chenbingjy 发表于 2024-6-3 11:07
我用proteus仿真的
<p>那大概率是仿真的问题吧。</p>
<div class='shownolgin' data-isdigest='no'><p>十来年前用proteus仿真单片机程序,有时会碰到意想不到的问题,最后是直接用开发板试</p>
</div><script>showreplylogin();</script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script> <div class='shownolgin' data-isdigest='no'>PIC24系列相关模块使用,应该要开启其模块的时钟才行(这点挺像TI和ARM的),你看看是否ADC模块时钟是不是被禁止了。</div><script>showreplylogin();</script> <div class='shownolgin' data-isdigest='no'><p>谢谢大家,搞好了,参考上面的例程</p>
</div><script>showreplylogin();</script>
页:
[1]