hhh402 发表于 2023-11-26 08:24:21

STC-ISP范例程序ADC程序问题

STC-ISP(V6.92F)范例程序ADC程序,下面程序来源于STC-ISP(V6.92F)范例程序
int ADCRead()
{
    int res;

    ADC_CONTR |= 0x40;                        //启动AD转换
    _nop_();
    _nop_();
    while (!(ADC_CONTR & 0x20));                //查询ADC完成标志
    ADC_CONTR &= ~0x20;                         //清完成标志
    res = (ADC_RES << 8) | ADC_RESL;            //读取ADC结果

    return res;
}
请问: res = (ADC_RES << 8) | ADC_RESL; ADC_RES << 8是否会发生数据溢出,ADC_RES是char类型,ADC_RES<< 8是不是永远=0;

gentleman 发表于 2023-11-26 09:54:20

ADCRES 是高8位

社区闲人 发表于 2023-11-26 12:43:05

请问: res = (ADC_RES << 8) | ADC_RESL; ADC_RES << 8是否会发生数据溢出,ADC_RES是char类型,ADC_RES<< 8是不是永远=0;

答:因res为16位变量,编译器会对参与运算的8位变量进行数值提升。
还可以查看编译后的汇编代码进行确认。

梁工 发表于 2023-11-27 11:55:44

请问: res = (ADC_RES << 8) | ADC_RESL; ADC_RES << 8是否会发生数据溢出,ADC_RES是char类型,ADC_RES<< 8是不是永远=0;
================================

为了避免异常,建议如下:
res = ( (u16)ADC_RES << 8)+ADC_RESL;

JackLaw666 发表于 2023-11-30 08:46:14

向高手学习{:4_196:}
页: [1]
查看完整版本: STC-ISP范例程序ADC程序问题