chenbingjy 发表于 2024-6-1 14:54

AD转换的问题

<p>代码:</p>

<pre>
<code>#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;xc.h&gt;
#include &lt;string.h&gt;


#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&lt;200;i++)
      for(j=0;j&lt;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&lt;100);
    PORTA=2;
    AD1CON1bits.SAMP=1;
    while(!AD1CON1bits.DONE);
    TMR1=0;
    while(TMR1&lt;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&gt;&gt;2);
      //PORTE=(unsigned char)(a);
        }
}</code></pre>

<p>while(!AD1CON1bits.DONE);这句过不去。</p>

<p>请问高手,怎么解决?谢谢!</p>

<p>忘了说了,用的芯片是PIC24FJ128GA010</p>

Jacktang 发表于 2024-6-2 09:06

<p>用调试工具逐步跟踪代码执行过程,查看AD1CON1bits.DONE何时被置位</p>

<p>或者建一个简单的ADC测试程序,只包含ADC配置和转换,以排除其他代码干扰。</p>

chenbingjy 发表于 2024-6-2 18:05

Jacktang 发表于 2024-6-2 09:06
用调试工具逐步跟踪代码执行过程,查看AD1CON1bits.DONE何时被置位

或者建一个简单的ADC测试程序,只包 ...

<p>微芯官方例程都不行</p>

<div style="text-align: center;"></div>

<p>&nbsp;</p>

wangerxian 发表于 2024-6-3 10:31

<p>例程都不行,是不是板子有问题?</p>

chenbingjy 发表于 2024-6-3 11:07

wangerxian 发表于 2024-6-3 10:31
例程都不行,是不是板子有问题?

<p>我用proteus仿真的</p>

wangerxian 发表于 2024-6-3 13:04

chenbingjy 发表于 2024-6-3 11:07
我用proteus仿真的

<p>那大概率是仿真的问题吧。</p>

beyond_笑谈 发表于 2024-6-4 15:13

<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>

dingzy_2002 发表于 2024-8-24 14:34

<div class='shownolgin' data-isdigest='no'>PIC24系列相关模块使用,应该要开启其模块的时钟才行(这点挺像TI和ARM的),你看看是否ADC模块时钟是不是被禁止了。</div><script>showreplylogin();</script>

chenbingjy 发表于 2024-8-24 15:51

<div class='shownolgin' data-isdigest='no'><p>谢谢大家,搞好了,参考上面的例程</p>
</div><script>showreplylogin();</script>
页: [1]
查看完整版本: AD转换的问题