打印

Pic16f946的ADC采集子程序不工作

[复制链接]
2316|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
reflecter|  楼主 | 2008-10-8 10:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
/*
A/D转化初始化
    ADSEL    //ANS7,ANS6,ANS5,ANS4,ANS3,ANS2,ANS1,ANS0
        //After POR:1,1,1,1,1,1,1,1;默认为模拟输入
        //RE2, RE1, RE0, RA5, RA3, RA2, RA1, RA0
        //1,1,1,1,0,0,1,1
        
    ADCON0    //ADFM,VCFG1, VCFG0,CHS2,CHS1,CHS0,GO/DONE,ADON
        //After POR:0,0,0,0,0,0,0,0
        //1,right justify,0,vss,0,vdd
    ADCON1    //-,ADCS2,ADCS1,ADCS0,-,-,-,-
        //0,1,    0,    1,    0,0,0,0
    
*/
    //ADIF=0;
    ANSEL=0xff;    //8个通道都打开;但程序中,尚未对chn2、3,进行处理
    ADCON0=0X81;    //右对齐,VSS,VDD,ADON=1
    ADCON1=0x50;    // 16Tosc, Tad=4us,@4MHz

/********************************************************************
Function Name    :Collect_Data
Input        :
Return        :
         
Access Register:
         
Description    :最底层的按通道采集程序
Subroutine    :     
stack Layers    :0
Run Time(us)    :
***********************************************************************/

/*
A/D数据采集
注:在ADC采样通道转换时,要注意有一个延时
每一bit的AD转换时间为Tad,在下一次采集前,至少需要等待2Tad的时间.    
*/
void Collect_Data (UC8 chn)
{            
            
    ADCON0    &=0x81;    // clear current channel select
    ADCON0    |=(chn<<2);// apply the new channel select
    /*
    延时至少2Tad时间
    */
    DelayUs(8);
    GODONE    =1;                            
    while(GODONE)continue;// 等待转换结束,转换结束GODONE自动被硬件清零
    ADIF=0;    //虽然没用中断,但是标志位还是要清零
    
    
    ADC_Data.c[0]=ADRESL;
    ADC_Data.c[1]=ADRESH & 0x03;//取10位A/D转换数据
    

}

/*
ADC,10Bit,右对齐,9..0,ADRESH[1..0]+ADRESL[7..0]
*/
union ADC_Value{
        UC8 c[2];
        INT16 i;
}ADC_Data;  //全局变量
沙发
reflecter|  楼主 | 2008-10-8 15:08 | 只看该作者

偶调试找出原因了

这段代码运行正常,只是代码内中断更改配置的缘故。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

23

帖子

0

粉丝