从业十年,教你单片机入门 第13讲:
为什么是二进制?人类日常日子分明是十进制的,为何数字电子范畴偏要挑选二进制?这是由数字硬件电路决议的。人有十个手指头,人能够宣布十种不同声响来命名0,1,2,3…9这些数字,人能够肉眼辨认十种不同状况的信息,可是数字电路要直接处理十进制却很难,相对来说,二进制就轻松多了。一颗LED灯的亮与灭,一根IO口的输出是高电平和低电平,读取某一个点的电压是高于2V仍是低于0.8V,只需要用三极管等元器件就可把处理电路建立起来,二进制广泛应用在数字电路的存储,通讯和运算等范畴,想学好单片机就必须把握它。
二进制怎么表明不计其数的数值?现在用LED灯的亮和灭来跟咱们解说。
(1)1个LED灯:
灭 第0种状况
亮 第1种状况
算计:共2种状况。
(2)2个LED灯挨着:
灭灭 第0种状况
灭亮 第1种状况
亮灭 第2种状况
亮亮 第3种状况
算计:共4种状况。
(3)3个LED灯挨着:
灭灭灭 第0种状况
灭灭亮 第1种状况
灭亮灭 第2种状况
灭亮亮 第3种状况
亮灭灭 第4种状况
亮灭亮 第5种状况
亮亮灭 第6种状况
亮亮亮 第7种状况
算计:共8种状况。
(4)8个LED灯挨着:
灭灭灭灭灭灭灭灭 第0种状况
灭灭灭灭灭灭灭亮 第1种状况
……
亮亮亮亮亮亮亮灭 第254种状况
亮亮亮亮亮亮亮亮 第255种状况
算计:共256种状况。
(5)16个LED灯挨着:
灭灭灭灭灭灭灭灭灭灭灭灭灭灭灭灭 第0种状况
灭灭灭灭灭灭灭灭灭灭灭灭灭灭灭亮 第1种状况
……
亮亮亮亮亮亮亮亮亮亮亮亮亮亮亮灭 第65534种状况
亮亮亮亮亮亮亮亮亮亮亮亮亮亮亮亮 第65535种状况
算计:共65536种状况。
(6)32个LED灯挨着:
灭灭灭灭灭灭灭灭灭灭灭灭灭灭灭灭灭灭灭灭灭灭灭灭灭灭灭灭灭灭灭灭
第0种状况
灭灭灭灭灭灭灭灭灭灭灭灭灭灭灭灭灭灭灭灭灭灭灭灭灭灭灭灭灭灭灭亮
第1种状况
……
亮亮亮亮亮亮亮亮亮亮亮亮亮亮亮亮亮亮亮亮亮亮亮亮亮亮亮亮亮亮亮灭
第4294967294种状况
亮亮亮亮亮亮亮亮亮亮亮亮亮亮亮亮亮亮亮亮亮亮亮亮亮亮亮亮亮亮亮亮
第4294967295种状况
算计:共4294967296种状况。
什么是位?以上一个LED灯就代表一位,8个LED灯就代表8位。一个变量的位数越大就意味着这个变量的取值规模越大。一个单片机的位数越多大,就阐明这个单片机一次处理的数据规模就越大,意味着运算和处理速度就越快。咱们日常所说的8位单片机,32位单片机,便是这个位的概念。为什么32位的单片机比8位单片机的处理和运算能力强,便是这个原因。位的英文名是用bit来表明。
什么是字节?字节是计算机很重要的一个基本单位,一个字节有8位。8个LED灯挨着能代表多少种状况,就意味着一个字节的数据规模有多大。从上面举的比如中,咱们知道8个LED灯挨着,能表明从0到255种状况,所以一个字节的取值规模便是从0到255。
各种界说变量的取值规模。前面第十一节讲了常用变量的界说有3种,unsigned char,unsigned int ,unsigned long。可是没有讲到它们的取值规模,现在讲到二进制和字节了,能够回过头来跟咱们讲讲这3种变量的取值规模,而且很重要。
unsigned char的变量占用1个字节RAM,共8位,依据前面LED灯的比如,取值规模是从0到255。
Unsigned int的变量占用2个字节RAM,共16位,依据前面LED灯的比如,取值规模是从0到65535。
Unsigned long的变量占用4个字节RAM,共32位,依据前面LED灯的比如,取值规模是从0到4294967295。
现在咱们编写一个程序来验证unsigned char和unsigned int的取值规模。界说两个unsigned char变量a和b,a赋值255,b赋值256,255和256刚好处于unsigned char的取值鸿沟。别的再界说两个unsigned int变量c和d,c赋值65535,d赋值65536,65535和65536刚好处于unsigned int的取值鸿沟。最终把程序编译后下载到坚鸿51学习板调查成果。请直接仿制第十节模板程序,修正的main程序代码如下:
void main() //主程序
{
/*—C言语学习区域的开端—————————————————————————*/
unsigned char a; //界说一个变量a,而且分配了1个字节的RAM空间。
unsigned char b; //界说一个变量b,而且分配了1个字节的RAM空间。
unsigned int c; //界说一个变量c,而且分配了2个字节的RAM空间。
unsigned int d; //界说一个变量d,而且分配了2个字节的RAM空间。
a=255;//把255赋值给变量a,a此刻会是什么数?会超规模溢出吗?
b=256;//把256赋值给变量b,b此刻会是什么数?会超规模溢出吗?
c=65535;//把65535赋值给变量c,c此刻会是什么数?会超规模溢出吗?
d=65536;//把65536赋值给变量d,d此刻会是什么数?会超规模溢出吗?
GuiWdData0=a; //把变量a这个数值放到窗口变量0里边显现
GuiWdData1=b; //把变量b这个数值放到窗口变量1里边显现
GuiWdData2=c; //把变量c这个数值放到窗口变量2里边显现
GuiWdData3=d; //把变量d这个数值放到窗口变量3里边显现
/*—C言语学习区域的完毕—————————————————————————*/
while(1)
{
initial();
key_service();
display_service();
}
}
上坚鸿51学习板调查程序履行的成果如下:
unsigned char变量a的数值是255。
unsigned char变量b的数值是0。
unsigned int 变量c的数值是65535。
unsigned int 变量d的数值是0。
经过以上现象剖析,咱们知道unsigned char变量最大能取值到255,假如非要赋值256就会超出规模溢出后变成了0。而unsigned int变量最大能取值到65535,假如非要赋值65536就会超出规模溢出后变成了0。
多说一句,至于unsigned long的取值规模,咱们暂时不必测验,由于我现在给大家用的模板程序能调查的最大变量是16位的unsigned int类型,暂时不支持32位的unsigned long类型。
下节预告:二进制与十六进制。