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;
ADCRES 是高8位 请问: res = (ADC_RES << 8) | ADC_RESL; ADC_RES << 8是否会发生数据溢出,ADC_RES是char类型,ADC_RES<< 8是不是永远=0;
答:因res为16位变量,编译器会对参与运算的8位变量进行数值提升。
还可以查看编译后的汇编代码进行确认。 请问: res = (ADC_RES << 8) | ADC_RESL; ADC_RES << 8是否会发生数据溢出,ADC_RES是char类型,ADC_RES<< 8是不是永远=0;
================================
为了避免异常,建议如下:
res = ( (u16)ADC_RES << 8)+ADC_RESL; 向高手学习{:4_196:}
页:
[1]