單片機中數制與數制的轉換是怎樣實現的??
關于數制之間的轉換,其實在數字電路的書中會講到,也很容易理解。在我們生活中,十進制經常被我們用到:數字0,1,2,3,4,5,6,7,8,9,逢十進一。那在單片機運用中,常見數制有:二進制、八進制、十進制、十六進制。
在單片機編程中經常應用到二進制和十六進制。比如現在有八個LED燈,在某一時刻,前四個燈全亮,后四個燈全滅。LED正極接電源,那么用51單片機P1八個口控制LED的亮滅(輸出低電平LED亮,高電平LED滅),前四個LED分別連接P1.0~P1.3,后四個連接P1.4~P1.7。這一段的代碼用二進制和十六進制分別可以這樣編寫:
二進制代碼:P1.0=0;P1.1=0;P1.2=0;P1.3=0;P1.4=1;P1.5=1;P1.6=1;P1.7=1;
十六進制代碼:P1=0xF0;
由此可見,單片機中利用到多個串口時,編程使用十六進制比較方便,另外如果要循環移位常用十六進制。單片機中利用到單個串口時,編程使用二進制比較方便
一、進制簡略介紹;
1、二進制:使用數碼只有0和1兩個數字,逢二進一
一般使用單片機IO輸出兩種狀態:高電平、低電平。一般用0表示低電平,1表示高電平。編程控制就是以這個概念來編寫程序邏輯。如果是3.3V系統,高電平就為3.3V,如果為5V,那高電平就為5V,低電平為0V。如果做輸出口的話,就是單片機通過軟件置位相關寄存器讓端口置高電平或低電平,達到電平輸出的目的,如果做輸入口,就是單片機捕捉端口的電平然后置位相關寄存器,然后軟件讀取寄存器中0或1,達到輸入作用。
2、八進制:使用數碼有0~7共八個數字,逢八進一
3、十進制:使用數碼有0~9共十個數字,逢十進一
4、十六進制:數碼有0~9,A~F共十六個數,逢十六進一
十六進制在單片機中經常使用,程序中會用到,通訊會用到,程序生成的HEX文件也是十六進制的。而bin文件是二進制文件。
二、進制間的轉換
1、二進制與十進制之間的轉換;
二進制轉十進制:把二進制數按權展開、相加即得十進制數
十進制轉二進制:十進制數除2取余法,即十進制數除2,余數為權位上的數,得到的商值繼續除2,依此步驟繼續向下運算直到商為0為止。
2、二進制與八進制之間的轉換;
二進制轉八進制:3位二進制數按權展開相加得到1位八進制數。3位二進制轉成八進制是從右到左開始轉換,不足時補0。
八進制轉成二進制:八進制數通過除2取余法,得到二進制數,對每個八進制為3個二進制,不足時在最左邊補零。
3、二進制與十六進制之間的轉換;
二進制轉十六進制:與二進制轉八進制方法近似,八進制是取三合一,十六進制是取四合一。4位二進制轉成十六進制是從右到左開始轉換,不足時補0。
十六進制轉二進制:十六進制數通過除2取余法,得到二進制數,對每個十六進制為4個二進制,不足時在最左邊補零。
4、十進制與八進制與十六進制之間的轉換
十進制轉八進制或者十六進制有兩種方法第一:間接法—把十進制轉成二進制,然后再由二進制轉成八進制或者十六進制。直接法—把十進制轉八進制或者十六進制按照除8或者16取余,直到商為0為止。