|
大家从抛砖中,已经初步看见只要给某个口,例如51机的P1口加上一个8位二进数,这个口的各个引脚就会呈现或是0:对应地电位,或是1:对应高电位,从而使得接在口线上的二极管或亮或灭,如果再通过相应晶体管推动继电器、电磁阀,那不是就可能启动电动机或打开暖气?那可就是真正的控制了!
实际上,在单片机(电脑也是一样)里面来回传递,加工的信息都是二进制数码也就是由0和1组成10110010这样的数:你打开电脑机箱往往看见光驱软驱都是用几十根并排一起带子一样的数据线,里面就有一些线在同时各自都在传送“0”“1”的数据。那么2呢?因为二进制是“逢2进1”,所以对应10进数的2,他要进到下一位成为10,类推,10进制3为二进制11,10进位4为二进制100:因为有两次逢二进一;尽管用二进制来手工计算你的银行存款是根本没有必要的愚蠢举动,但是计算机这个笨蛋确十分乐意这样做,因为它只能识别这样的数码,并且不知疲劳地反复进行惊人次数地运算。
除了机器内部只能跑二进数以外,为了单片机编程的需要,我们会利用华夏祖先的老发明:16进数,什么?中国人发明?当然啦,在第一台计算机出现之前的几百上千年,老祖宗们不都是一直用16两制的杆秤做买卖?。。。16进,就是说直到15两,还只能是不到1斤,进不了位,非要16才行,那么16进有何优点?且不说16两秤易于对分,好算账;电脑中的16进数很容易和二进数转换,而且又接近10进数的计数方式,比直接写一大串0,1更容易不出差错,所以,要鼓捣单片机,非得明白这个不可。
下面让我们写出从0到16的10进数,2进数,16进数的表示:
10进数 2进数 16进数
0 0000 00
1 0001 01
2 0010 02
3 0011 03
4 0100 04
5 0101 05
6 0110 06
7 0111 07
8 1000 08
9 1001 09
10 1010 0A
11 1011 0B
12 1100 0C
13 1101 0D
14 1110 0E
15 1111 0F
16 10000 10
10进数的最右端第0位--最低位(电脑行话叫LSB)和往左的第1位,第2位,第3位
上的1分别代表 1,10,100,1000;
2进数则是代表1, 2, 4, 8;8位2进数11111111能表示最大的正整数是255,
16进数则是代表1, 16,256,4096;4位16进数FFFF能表示最大的正整数是65535;也就是说如果用8位单片机进行数学计算,如果不采取措施,计算结果只能限定在255以内,为了计算更多位数,可以采用多字节计算。(1个8位的2进数,或1个2位的16进数,它的数据宽度为1个字节或1B=1Byte)
单片机中,编程时经常用到2位16进数,因为16进数的每1位都和上列那样和4位2进数对应,所以16进数和2进数的转换很容易,只要你记住上面那个16进00-0F与2进0000-1111的对应关系,把两者直接代换即可,如16进78换成2进就是0111 1000。(不比记忆英语单词难吧?)
因为2进数在某些运算情况比较16进更直观,所以也有应用,特别是涉及按位逻辑运算时候,你只需死死记住:2进数“1”逻辑“或”另一位不管什么2进数,结果都是“1“,2进数”0“逻辑“与”另一位不管什么2进数,结果都是“0”。
为了区别程序中一个数码到底是2进数,10进数,还是16进数,在书写程序时常常用0b10110011表示2进数,1011表示10进数,0xB2表示16进数。对于较大数值的数制转换,其实现在你就用电脑操作系统自带的计算器好了:开始-> 程序->附件
->计算器 ->科学型然后输入数据,选择上面的进制就好了。
以上有些枯燥,但是要学那个鬼单片机,不得不知道这些个乱七八糟的东西。
[ 本帖最后由 wey05 于 2007-7-12 11:04 编辑 ] |
|