合规国际互联网加速 OSASE为企业客户提供高速稳定SD-WAN国际加速解决方案。 广告
【17.1 单片机本身具备基础的数学算术能力。】 单片机本身是一个成品,本身就具备了基础的加减乘除能力,把单片机当做一个大人,我们需要做的只是沟通而已,叫他做加法他就做加法,叫他做减法就他就做减法,至于他是如何计算出来的不用管,“他”本身内部的电路结构就具备了这种基础运算的能力。人机沟通依然是用C语言,本节讲的加法运算,用的C语言符号跟我们日常用的数学加法符号是一样的,都是符号“+”。多说一句,单片机这种内置的基础运算能力并不是无限大的,而是数值不能超过某个范围,如果在加数或者运算结果的数值范围超过4294967295的情况下,要继续实现这类加法运算,这个就需要我们在单片机本身基础的运算能力上专门去编写一套大数据算法的程序才能实现,这个大家暂时不用深入理解,先学好当前基础再说。 【17.2 加法语法格式。】 加法语法格式: “保存变量”=“加数1”+“加数2”+...+“加数N”; 含义:右边的“加数”与“加数”相加(这里暂时把平时所说的被加数也归类为加数),并且把最终的运算结果赋值给左边的“保存变量”。注意,这里的符号“=”不是等于号的意思,而是赋值的意思。左边的“保存变量”必须是变量,不能是常量,否则编译时会报错。而右边的“加数”既可以是变量,也可以是常量,也可以是“保存变量”本身自己。多说一句,什么是变量和什么是常量?变量就是可以在程序中被更改的,是分配的一个RAM空间。而常量往往就是常数值,或者是被分配在ROM空间的一个具体数值。下面根据右边“加数”与“加数”的不同组合,列出了加法运算的5种常用组合。 第1种:“加数1”是常量,“加数2”是常量。比如: unsigned char a; a=3+15; 分析:数字“3”和“15”都是常量。执行上述语句后,保存变量a变成了18。 第2种:“加数1”是变量,“加数2”是常量。比如: unsigned char b; unsigned char x=10; b=x+15; 分析:x是变量,“15”是常量。由于原来x变量里面的数值是10,执行上述语句后,保存变量b变成 了25。而变量x则保持不变,执行完所有语句后x还是10。 第3种:“加数1”是变量,“加数2”是变量。比如: unsigned char c; unsigned char x=10; unsigned char y=6; c=x+y; 分析:x是变量,y也是变量。由于原来x变量里面的数值是10,y变量里面的数值是6,执行上述语句后,保存变量c变成了16。而变量x和y则保持不变,x还是10,y还是6。 第4种:“加数1”是保存变量本身,“加数2”是常量。比如: unsigned char d=2; d=d+18; d=d+7; 分析:d是保存变量本身,“18”是常量。这类语句有一个特点,具备了自加功能,可以更改自己本身的数值。比如原来保存变量d的数值是2,执行“d=d+18;”语句后,d变成了20,接着再执行完“d=d+7;”语句后,d最后变成了27。 第5种:“加数1”是保存变量本身,“加数2”是变量。比如: unsigned char e=2; unsigned char x=10; unsigned char y=6; e=e+x; e=e+y; 分析:e是保存变量,x与y都是变量。这类语句有一个特点,具备了自加功能,可以更改自己本身的数值。比如原来保存变量e的数值是2,x的数值是10,执行“e=e+x;”语句后,e变成了12。由于y的数值是6,接着再执行完“e=e+y;”语句后,所以e最后变成了18。 【17.3 例程练习和分析。】 现在我们编写一个程序来验证上面讲到的5个加法例子: 程序代码如下: /\*---C语言学习区域的开始。-----------------------------------------------\*/ void main() //主函数 { unsigned char a; //定义一个变量a,并且分配了1个字节的RAM空间。 unsigned char b; //定义一个变量b,并且分配了1个字节的RAM空间。 unsigned char c; //定义一个变量c,并且分配了1个字节的RAM空间。 unsigned char d=2; //定义一个变量d,并且分配了1个字节的RAM空间。初始化默认为2. unsigned char e=2; //定义一个变量e,并且分配了1个字节的RAM空间。初始化默认为2. unsigned char x=10; //定义一个变量x,并且分配了1个字节的RAM空间。初始化默认为10. unsigned char y=6; //定义一个变量y,并且分配了1个字节的RAM空间。初始化默认为6. //第1种:“加数1”是常量,“加数2”是常量。 a=3+15; //第2种:“加数1”是变量,“加数2”是常量。 b=x+15; //第3种:“加数1”是变量,“加数2”是变量。 c=x+y; //第4种:“加数1”是保存变量本身,“加数2”是常量。 d=d+18; d=d+7; //第5种:“加数1”是保存变量本身,“加数2”是变量。 e=e+x; e=e+y; View(a); //把第1个数a发送到电脑端的串口助手软件上观察。 View(b); //把第2个数b发送到电脑端的串口助手软件上观察。 View(c); //把第3个数c发送到电脑端的串口助手软件上观察。 View(d); //把第4个数d发送到电脑端的串口助手软件上观察。 View(e); //把第5个数e发送到电脑端的串口助手软件上观察。 while(1) { } } /\*---C语言学习区域的结束。-----------------------------------------------\*/ 在电脑串口助手软件上观察到的程序执行现象如下: 开始... 第1个数 十进制:18 十六进制:12 二进制:10010 第2个数 十进制:25 十六进制:19 二进制:11001 第3个数 十进制:16 十六进制:10 二进制:10000 第4个数 十进制:27 十六进制:1B 二进制:11011 第5个数 十进制:18 十六进制:12 二进制:10010 分析: 通过实验结果,发现在单片机上的计算结果和我们的分析是一致的。 【17.4 如何在单片机上练习本章节C语言程序?】 直接复制前面章节中第十一节的模板程序,练习代码时只需要更改“C语言学习区域”的代码就可以了,其它部分的代码不要动。编译后,把程序下载进带串口的51学习板,通过电脑端的串口助手软件就可以观察到不同的变量数值,详细方法请看第十一节内容。