打印

求助PIC12F683 ADC转换

[复制链接]
2617|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
晨星之光|  楼主 | 2011-6-28 15:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 晨星之光 于 2011-6-28 16:04 编辑

大家好!
有个问题想大家帮帮忙!
我在用PIC12F683 ADC模块时,AD转换的数据都是0。请问这是什么原因呀????
我用软件仿真和实物仿真时,程序都只执行
if(get_ad()<206)
{
MOS_ON;
}
我在实物仿真时不论怎么改变电压都是只执行以上的指令。
如何知道转换后的值是否已经存入ADRESH和ADRESL两个结果寄存器?????

完整代码如下:

#include<pic.h>

__CONFIG(0x0014);

#define uint unsigned int
#define uchar unsigned char

#define MOS_ON GPIO5=1
#define MOS_OFF GPIO5=0

uint AD_V[8];
uint AD_data;
uint adval,i,AD_sum;
void delay_ms(uchar ms)
{
        uchar x,y;
        for(x=ms;x>0;x--)
                for(y=220;y>0;y--);
}
void IO_init(void)
{
        TRISIO5 = 0;    //
        TRISIO0 = 1;    //7脚设置为输入
        OSCCON = 0x77;   //内部振荡器8M时钟
        OPTION = 0x00;   //定时器0 8分频
        CMCON0 = 0x07;   //比较器关闭        
        ANSEL = 0x61;  //0110 1000 ADC时钟64分频,GP3 ADC输入
        ADCON0 = 0x81; //1000 1111 AD转换结果右对齐,参考电压VDD,3通道,开AD转换
        ADON=1;
                delay_ms(10);
}

/**********************************
电池电压检测
**********************************/
uint get_ad(void)
{
        ADON=1;
        for(i=0;i<8;i++)
        {
                GODONE=1;
                while(GODONE);        
                adval=ADRESH;
                adval=(adval<<8)+ADRESL;
                AD_V=adval;
        }
        AD_sum=0;
        GODONE=0;
        for(i=0;i<8;i++)
        {
                AD_sum +=AD_V;
        }
        AD_data=AD_sum>>3;
        return (AD_data);
}
void main(void)
{
        IO_init();
        while(1)
        {
                if(get_ad()<206)
                {
                        MOS_ON;
                }
                else
                {
                        MOS_OFF;
                }
        }
}

相关帖子

沙发
晨星之光|  楼主 | 2011-7-4 17:33 | 只看该作者
原来是没有把AD的参考负电压与单片机共地。

使用特权

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

本版积分规则

0

主题

39

帖子

0

粉丝