單片機中數制與數制的轉換是怎樣實現的
\\\插播一條:我自己在今年年初錄製了一套還比較系統的入門單片機教程,想要的同學找我(禾厶-亻言-手戈)免費的。最近比較閒,帶做畢設,帶學生參加省級以上比賽///
單片機中數制與數制的轉換是怎樣實現的呢
關於數制之間的轉換,其實在數字電路的書中會講到,也很容易理解。在我們生活中,十進位經常被我們用到:數字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、十進位與八進位與十六進位之間的轉換
十進位轉八進位或者十六進位有兩種方法第一:間接法—把十進位轉成二進位,然後再由二進位轉成八進位或者十六進位。直接法—把十進位轉八進位或者十六進位依照
綠色圖標【‟で】liutianwang123