嵌入式,單片機編程基礎-二進位

2021-01-08 單片機長

作為一名嵌入式底層驅動開發人員,或者是單片機的固件編程人員,掌握一些二進位的基本知識是很必要的。

首先,我們在看處理器的參考手冊時,看到最多的就是有關寄存器的介紹。我們開發驅動程序,本質上也是設置或讀取這些寄存器。參考手冊介紹寄存器時一般都是以比特位為單位介紹的。涉及到比特位當然以二進位表示最為自然。其次,我們在編寫或閱讀底層代碼時,如果涉及到寄存器的配置或是有關比特位的操作也是離不開二進位的影子。

那就來介紹下一些比較常用的的有關二進位的東西。

二進位的表示方法。比如我們要給一個char型變量a賦值一個二進位數100。如果我們寫成a=100,那麼a就是100。大俠別誤會我說的一百;沒錯就是十進位的100。如果要把二進位的100賦給a,需要這樣寫:a=0b100,。那麼如果我實在不知道這個二進位的賦值方法,也沒關係。我們可以寫成a=4。這就涉及到下個知識點二進位和十進位的轉換。

二進位轉十進位。比如我們有個二進位數0b10001001。我們先從右往左數(最右邊的位為第0位),發現共有3個1,分別是第0位、第3位、第7位。那麼計算方法就出來了:0b10001001 = 2^7+2^3+2^0 =128+8+1= 137。

十進位轉二進位時個人推薦靠近法。比如有個十進位數138,要轉成二進位數。第一步,要看2的幾次方能最靠近138又不大於138,經過大腦一陣折騰知道了2的7次方為128最靠近138,這樣我們就知道了這個二進位數的最左邊的1在第7位。第二步,138減去2的7次方(128)還剩下10,那我們看看2的幾次方最靠近這個10又不大於10,顯然2的3次方(8)滿足這個條件,這樣我們就知道了這個二進位數的第3位也是個1。第三步,10減去2的3次方(8)還剩下2,那就好辦了2的1次方就是2,所以這個二進位數的第1位也是個1。經過一陣折騰,我們知道了這個二進位數有3個1,分別在第7位,第三位和第1位。這樣我們就得到了這個二進位數0b10001010。

其實,最後我想說,我們可以用計算器進行二進位和十進位之間的轉換。但是如果我們對轉換比較熟悉的話,工作效率會更快一些。

相關焦點

  • 單片機二進位編碼對照
    二進位編碼 在計飛鶴營養好算機中,是採用二進位飛鶴乳業數。因而,要在計算機飛鶴奶粉中表示的數、字母、符黑龍江飛鶴乳業制碼來表示,這就是二飛鶴吸收好碼來表示,這就是二進位編碼。一、二進位編碼的十進位數: BCD 碼( Binary-Coded Decimal ) 字母與字符的編碼 字母和各種字符( $ 、 # )也必須按特   二進位編碼在計算機中,是採用二進位數。因而,要在計算機中表示的數、字母、符號等都要以特定的二進位碼來表示,這就是二進位編碼。
  • 單片機基本結構及C語言編程基礎
    RXD、TXD、INT0、INT1、T0、T1   單片機內部I/O部件:(所為學習單片機,實際上就是編程控制以下I/O部件,完成指定任務) 1、 四個8位通用I/O埠,對應引腳P0、P1、P2和P3; 2、 兩個16位定時計數器;(TMOD,TCON,TL0,TH0,TL1,TH1) 3、 一個串行通信接口;(SCON,SBUF) 4、 一個中斷控制器;(
  • 單片機進位轉換
    今天我就給大家講講與計算機有關的「進位轉換」問題。   我們以(25.625)(十)為例講解一下進位之間的轉化問題。 1. 十 > 二  給你一個十進位,比如:6,如果將它轉換成二進位數呢?二 ----> 十  二進位數轉換為十進位數   二進位數第0位的權值是2的0次方,第1位的權值是2的1次方……   所以,設有一個二進位數:0110 0100,轉換為10進位為:
  • C/C+編程筆記:C語言進位詳解,二進位、八進位和十六進位!
    二進位 我們不妨將思維拓展一下,既然可以用 0~9 共十個數字來表示數值,那麼也可以用0、1兩個數字來表示數值,這就是二進位(Binary)。例如,數字 0、1、10、111、100、1000001 都是有效的二進位。
  • 跟電師傅學單片機(18):單片機控制轉移指令編程案例講解
    單片機程序案例:要求把06H~09H,20個數據按順序放入內部數據存儲器RAM:10H~23H單元中。案例要求示意圖一:程序編程MOV R0,#10H;將單片機內部RAM單元的首地址10H送到工作寄存器 R0中。
  • 8051單片機簡史:深度認識8051單片機的來龍去脈
    8051單片機具有許多功能,例如:串行通信、定時器、中斷等,因此許多學生和初學者都開始使用8051單片機來研究單片機的概念(儘管隨著Arduino的引入,這種趨勢似乎有了一些改變)。即使8051單片機可能看起來有些過時,我們仍認為它是開始學習單片機、嵌入式系統和編程(包括C和彙編語言)的最佳平臺之一。
  • MSP430單片機的BSL編程工具設計與應用
    摘要:為了對燒斷熔絲的MSP430系列單片機進行程序更新,採用USB轉串口晶片PL2303和VB6.0程式語言設計出了一款高性價比的BSL編程工具,給出了該編程工具的硬體和軟體設計的具體方案,並論述了設計中的要點。該BSL編程工具使用方便、操作簡單、成本低廉,投入使用以後獲得了較好的效果。
  • AVR單片機CRC校驗碼的查表與直接生成
    AVR高速嵌入式單片機功能強大,在無線數據傳輸應用方面具有很大優勢。本文基於 Atmega128高速嵌入式單片機,實現32位CRC校驗碼的直接生成法和查表生成法;根據實驗結果,分析兩種方法的特點。 關鍵詞:Atmega128 CRC校驗碼 CRC生成表 數據段 引 言   隨著技術的不斷進步,各種數據通信的應用越來越廣泛。
  • 關於單片機和嵌入式,它們的區別是什麼
    單片機又是什麼?兩者有什麼區別和聯繫呢?針對兩者之間的問題小編整理了一篇文章,希望對大家理解兩者的基本概念,以及區別有所幫助。 1、從系統組成上區別,單片機由控制器、運算器、存儲器、輸入輸出設備構成,而嵌入式第一步需要結合具體的應用,考慮成本,性能,可擴展性,開發周期等各方面的要求,確定系統的主控器件後,加入微處理器,外圍硬體設備,嵌入式作業系統,應用程式組成。
  • 跟我學java編程—不得不說的二進位和十六進位
    計算機能夠識別的數制是二進位數,二進位數是用0和1兩個數字來表示的數,計算機的指令集也是採用二進位表示,機器語言就是用二進位數編寫程序。可以藉助十進位數來理解二進位數。在十進位中,每一位有0、1、2、3、4、5、6、7、8、9十個數碼,因此基數為10,超過9就必須用多位數來表示,並遵循逢十進一的原則。
  • 基於單片機的四位二進位轉十進位計算顯示程序
    此程序是根據自己的單片機板子寫的,四位共陽數碼管。本文引用地址:http://www.eepw.com.cn/article/170906.htmk1-k4是板子上的4個鍵 用來進行二進位輸入,因為按鍵只有按下和沒有按下兩種狀態,十進位的數值就顯示在數碼管上.
  • 基於AT89C51單片機的十進位計算器系統設計
    基於AT89C51單片機的十進位計算器系統設計
  • 嵌入式C編程的萬能模板程序
    本教程沒有用這種方法, 既然本教程的 C 語言主要針對單片機, 所以我想出了另外一種方法, 這種方法就是直接在單片機上練習 C 語言,這樣會讓初學者體驗更深刻。這種方法對硬體平臺要求不高, 只要 51 學習板上有一個 9 針的串口就可以, 這個串口既可以用來燒錄程序, 也可以用來觀察代碼裡的某個變量, 只要在代碼裡調用 View 函數就可以達到類似VC 平臺軟體下 printf 語句的效果, View 函數可以向串口輸出某個變量的十進位, 十六進位和二進位。
  • STM32 嵌入式學習入門(0)——C語言基礎複習
    摘要    主要介紹了嵌入式編程中幾個常用,但軟體編程中用得不是很多的C語言知識。包括位操作、條件編譯、結構體和結構體指針、typedef聲明類型、以及extern變量聲明、static關鍵字等內容。
  • 聽起來非常高大上的晶片編程是不是遙不可及?其實也不是
    ,它只能識別「0」和「1」這樣的二進位代碼。在早期的單片機開發過程中,人們用二進位代碼編寫程序,再把這些二進位代碼程序寫入單片機,單片機執行這些二進位代碼程序就可完成相應的任務。用二進位代碼編寫的程序稱為機器語言程序。在用機器語言編程時,不同的指令用不同的二進位代碼代表,這種二進位代碼構成的指令稱為機器指令。
  • 基於51單片機的嵌入式SNMP代理器設計與實現
    1 SNMP體系結構 SNMP的體系結構(見圖1)以簡單的查詢/回答模型為基礎,發送查詢的用戶為管理者,SNMP的伺服器(代理器)回答查詢。 SNMP在TCP/IP體系中屬於應用層協議。2 嵌入式代理器的硬體實現 我們設計的基於SNMP的控制系統原理見圖2。 控制現場的信號採集由A/D轉換模塊輸入單片機。單片機對信號進行處理,並且執行SNMP代理器的任務,硬體部分主要包括A/D、串口、乙太網、小邏輯、單片機、監控信號採集、電源及監控等模塊,本文著重介紹與嵌入式SNMP代理器密切相關的部分。
  • 圖形化編程玩51單片機(十五)模擬工廠裡的產品掃描計數器實驗二
    本期實驗:模擬工廠裡的產品掃描計數器:實驗二,在16位簡單計數器的基礎上,拓展為32計數,即9999 9999個計數單元。注釋:由於我們的51單片機是16位的計數器,所以它的程序設計裡的變量最大也只能使用int的類型變量,也就是最大值為65535。這一期我們在上一期的基礎上,利用編程的方法,將我們現有的單片機拓展到32位的計數,也就是能夠達到一億以內的計數了,這基本上能夠滿足大部分的計數需求了。學會這種方法後,再只要添加變量和對變量的分析就可以實現任何數據的計數了。
  • 單片機和嵌入式有什麼關係?
    單片機和嵌入式有什麼關係?單片機是不是就是嵌入式呢?等等等等,初學階段總是會遇到很多這樣的問題,下面就一起來了解下。首先來說下單片機。單片機的本質是一種計算機。而單片機是一種計算機,這種計算機的特點就是「單片」。再來看看嵌入式。嵌入式本質上是一種電子設計方法,這種方法就是將微型計算機嵌入到電子產品內部。只要符合這種設計方法的電子產品就可以稱為嵌入式系統。現在你看到的所有的計算機系統,除了個人電腦外幾乎都是嵌入式系統。
  • 我的單片機轉嵌入式Linux之路
    本科畢業,一手還不錯的牌被浪輸了(電賽3個省一、一等獎學金、三好學生、校優秀實習生等),基礎不夠紮實也沒好好準備,錯過了秋招,去不了心儀大廠,春招將就去了一家國企。一年後發現情況不妙(軟體崗,竟沒代碼可寫),感覺自己不但沒有進步,反而對一些東西感到陌生了,警醒之下裸辭。
  • 單片機學習之二:單片機軟體使用簡明教程
    在我們開始單片機學習之前,我們有必要先來介紹一下單片機編程開發環境。我們現在常用的2種編程開發環境是:偉福WAVE和KEIL C軟體。我們這裡以大家最常用的KEIL C軟體為例,簡單介紹一下編程環境。