单片机入门之三种进制的转换

  • 学习6600次

单片机使用的两大进制表示形式:十进制和十六进制。

单片机进制1
(这里使用十进制的数据)

单片机进制2
(这里使用十六进制的数据)

十进制一般用于运算,表示形式就是直接写,例如上面的1701。

十六进制一般用于配置单片机的寄存器,表示形式是在数字前面加0x,例如上面的0xC0 0XD0。也就是说,当你看单片机程序遇到0x开头的数据,就是表示十六进制数据。

单片机的寄存器有8位、16位和32位,也就是1个字节、2个字节和4个字节。既然设计到位,那肯定需要二进制的表示。二进制表示数据,非0即1,寄存器中的每一位,也是非0即1,根据寄存器的不同,它的每一位代表的功能不同,例如,把某个寄存器的某个位写1,就开启中断,写0,就关闭中断。看到这里,你就明白些了吧,原来就是这样控制单片机的寄存器。

就像上面说的,配置寄存器,我们一般用十六进制,那么这个十六进制怎么和二进制换算呢?这里就需要用到BCD码了。

BCD码就是8421,它是按照二进制的位置表示的,8421是代表4个位,一个字节8个位,就需要2个8421。如下图所示:

单片机进制3

第一行表示BCD码,第二行表示一个字节,也就是一个8位的寄存器。

如何用BCD码把二进制写成十六进制?

例如一个二进制数据如下:

单片机进制4

如上图,二进制码是:10001010,转换成十六进制是0x8A。

这个是怎么得到的?

看左边的四个位,把有1的上边的8421加起来,上图中,左边四个位只有8下面有1,所以和就是8。

看右边的四个位,把有1的上边的8421加起来,上图中,右边四个位的8和2下面是1,所以把8+2就等于10,十六进制的10就是A。

所以上面的10001010转换成十六进制是0x8A。

再来一个例子,二进制01101100转换成十六进制是0x6C。(这个你自己按照前面的方法算一下,如果算出来和我的结果一样,那恭喜你,你学会了)

十六进制基础:

单片机进制5

另外,学单片机会经常使用WINDOWS自带的“计算器”,进行进制的转换。

单片机进制6

我已经把这篇文章做成PDF了,你可以下载到你的电脑永久保存了:

单片机入门之进制转换(点击下载或者右键另存为下载)

发表评论