[应用相关]

STC8A4K60S2A12做测温不准求助

[复制链接]
934|3
手机看帖
扫描二维码
随时随地手机跟帖
fzhlpp|  楼主 | 2020-3-29 17:50 | 显示全部楼层 |阅读模式
内部参考电压我用程序测试结果是1.37v-1.38v,这款芯片16通道是参考电压通道吧?

void InitADC()
{
        P1M0=0X00;
        P1M1=0XFF;
        ADCCFG=0x2F;
        ADC_RES = 0;                    //清除结果寄存器
    ADC_CONTR = 0x8F ;
}
/*----------------------------
读取ADC结果
----------------------------*/
uint GetADCResult()
{       
    uint H_RES;
        uchar L_RES;
    ADC_CONTR |= 0x40;
    _nop_();                        //等待4个NOP
    _nop_();
    _nop_();
    _nop_(); _nop_();
    _nop_();
     while (!(ADC_CONTR & ADC_FLAG));//等待ADC转换完成
    ADC_CONTR &= ~ADC_FLAG;         //关闭 ADC
    H_RES=ADC_RES;      //得到高8位
        H_RES<<=8;
        L_RES = ADC_RESL;         // 低4位。
        //L_RES &= 0x0f;            // 屏蔽无关位
        H_RES |= L_RES;                // 高低字节拼接成一个12位数。
    return H_RES;                 //返回ADC结果   
}
/*----------------------------
发送ADC结果
----------------------------*/
void ShowResult()
{          uint i,vcc,res;   
        GetADCResult();
        GetADCResult();
        res=0;
        for(i=0;i<256;i++)
        {
    res+=GetADCResult();
        }
        res>>=8;
        //vcc=(int)(4095L * *BGV/res);
        //NTC_R=vcc;
        //vcc=*BGV >> 8;        //读取Bandgap电压的高字节
        //vcc=vcc|*BGV;        //读取Bandgap电压的低字节
        NTC_R=res;
}
void main()
{               
                P0M0=0XFF;
                P0M1=0X00;
                BGV = (int idata *)0xef;
                P2M0=0XFF;
                P2M1=0X00;
                InitADC();
            P1=0xff;
        while(1)
                {       
                ShowResult();
                show(NTC_R/100,1);
                show(NTC_R/10%10,2);
                show(NTC_R%10,3);
           delay_ms(20);
        }
       
}

使用特权

评论回复
fzhlpp|  楼主 | 2020-3-29 18:07 | 显示全部楼层
这个技术论坛为什么没有STC原厂入住?我选的这款芯片内部参考电压是1.34V-1.35V,但我的程序测试出来是1.37-1.40,12位AD的结果高8位和低4位到底该怎么处理我都搞糊涂了,芯片保存高数据的是一个字节,低4位也是一个字节是吧,两个数据要合并计算结果到底该怎么处理,我的代码那样处理有问题吗?请高手指教,跪谢!

使用特权

评论回复
gx_huang| | 2020-3-29 20:19 | 显示全部楼层
    H_RES=ADC_RES;      //得到高8位
        H_RES<<=8;
        L_RES = ADC_RESL;         // 低4位。
        //L_RES &= 0x0f;            // 屏蔽无关位
        H_RES |= L_RES;                // 高低字节拼接成一个12位数。
看你配置是右对齐,应该没有错。

使用特权

评论回复
fzhlpp|  楼主 | 2020-3-29 21:02 | 显示全部楼层
gx_huang 发表于 2020-3-29 20:19
H_RES=ADC_RES;      //得到高8位
        H_RES

感谢回复,右对齐的挪到两字节变量中高8位就左移8低4位不动,左对齐的挪到两字节变量中高8位左移4低4位右移4,然后相加合并对吧?

使用特权

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

本版积分规则

6

主题

36

帖子

0

粉丝