上图看代码
通过串口输出可得,adc_value=1023,用计算器可算得(1023*4930)/1023=4930,但是在串口得到的却是0.061,很显然值是错的,我们把代码放到Visual Studio中编译来运行
结果为4930,值是正常的
原因总结: 在C语言中四则运算默认使用int型变量存储其运算结果,51位单片机是8位的MCU,int型变量只占2字节,则int取值范围为2^8 + 2^8 =65536,而1023*4930已经大于这个值,所以是无法运算的,而在Visual Studio中运行正常,是因为电脑CPU是64位的,int占4字节。更改代码:
将结果转换取值范围更大的long类型,结果正常。
8/16位系统中变量取值范围
char 1字节 -128~+127
int 2字节 -32768~+32767
unsigned int 2字节 0~65535
long int 4字节 -2147483648~+2147483647
32/64位操作系统中取值范围:
int -2147483648~2147483647(-2^32~2^32-1
4个字节