打印
[PIC®/AVR®/dsPIC®产品]

多通道AD转换寄存器不赋值给变量

[复制链接]
758|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
rc201004|  楼主 | 2014-11-4 22:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 rc201004 于 2014-11-7 17:58 编辑

void Initial(void)
{
        TRISA=0b00001111;
        PORTA=0;
        ADCON1=0x83;
        ADCON0=0x41;//0100 0001
}

void MeasureCV(void)
{
    unsigned int adval;
        if(1)
        {
                GO=1;
                while(!GO);
                ADIF=0;
                adval=ADRESH;              //00000000 00000011读取转换值
                adval=adval<<8|ADRESL;    //00000011 11111111
                ADTimes++;
                ADChannel&=0x03;//0000 0011        
                (ADChannel==0)        //AN0               
                                {
                                        MeaC=adval;
                                        ACC[0]=MeaC/1000+48;
                                        ACC[1]=MeaC%1000/100+48;
                                        ACC[2]=MeaC%100/10+48;
                                        ACC[3]=MeaC%10+48;
                                }
                                if(ADChannel==1)        //AN1
                                {
                                        MeaV=adval;
                                        ACV[0]=MeaV/1000+48;
                                        ACV[1]=MeaV%1000/100+48;
                                        ACV[2]=MeaV%100/10+48;
                                        ACV[3]=MeaV%10+48;
                                }
                                if(ADChannel==2)                //AN2
                                {
                                        MeaI=adval;
                                ACI[0]=MeaI/1000+48;
                                        ACI[1]=MeaI%1000/100+48;
                                        ACI[2]=MeaI%100/10+48;
                                        ACI[3]=MeaI%10+48;
                                }
                                ADChannel++;
                                if(ADChannel==3)
                                {ADChannel=0;}
                                ADCON0&=0b11000111;        //0100 0001        
                                ADCON0|=(ADChannel<<3);
                                delaynms(10);                        
        }
}
void main(void)
{
        unsigned char i;
        Initial();
        lcdinit();
        while(1)
        {
                MeasureCV();
                display();
        }
}
用调试模式看到每次通道正常切换,ADRESH,与ADRESL值正常,可MeaV没有值?为什么?怎么改?求助,谢谢
沙发
Rain_King| | 2014-11-4 23:23 | 只看该作者
我看了看,逻辑上,貌似没啥错误,不过首先是delaynms(10)差评.....还有(ADChannel==0)前面的if没有了,虽然么有逻辑问题,但是,总觉得坑.........其次,MeaV为啥没有值,或许是你的adval没有值呢.....你可以测试一下的啊.........最后,不知道是不是测试代码,但是这代码质量,确实不怎么好啊........

使用特权

评论回复
板凳
wangch_sh| | 2014-11-5 17:33 | 只看该作者
if(ADChannel==1)        //测量的是电压,AN1
你看一下ADChannel=1吗?
只有等于1,才有可能赋值。

使用特权

评论回复
地板
rc201004|  楼主 | 2014-11-7 18:14 | 只看该作者
本帖最后由 rc201004 于 2014-11-7 18:17 编辑

上面问题已经解决,谢各位了,多通道采样在中断中做会方便很多

使用特权

评论回复
5
rc201004|  楼主 | 2014-11-7 18:22 | 只看该作者
Rain_King 发表于 2014-11-4 23:23
我看了看,逻辑上,貌似没啥错误,不过首先是delaynms(10)差评.....还有(ADChannel==0)前面的if没有了,虽 ...

if 是复制粘贴时弄掉了,adval 有值的,在线调发现,本应是MeaI的值没有赋,在下一次转换后,上次的值赋给了MeaC

使用特权

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

本版积分规则

1

主题

3

帖子

0

粉丝