<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 51單片機頭文件reg51.h詳解

          51單片機頭文件reg51.h詳解

          作者: 時間:2016-12-01 來源:網(wǎng)絡 收藏

          我們在用c語言編程時往往第一行就是頭文件,51單片機為reg51.h或reg52.h,51單片機相對來說比較簡單,頭文件里面內(nèi)容不多,像飛思卡爾、ARM系列的單片機頭文件往往內(nèi)容就非常多,盡管如此,對一些初次接觸單片機的朋友來說,51的頭文件還是搞不太清楚,今天具體來說明一下。

          本文引用地址:http://www.ex-cimer.com/article/201612/324301.htm

          1)“文件包含”處理概念

          所謂“文件包含”是指在一個文件內(nèi)將另外一個文件的內(nèi)容全部包含進來。因為被包含的文件中的一些定義和命令使用的頻率很高,幾乎每個程序中都可能要用到,為了提高編程效率,減少編程人員的重得勞動,將這些定義和命令單獨組成一個文件,如reg51.h,然后用#include包含進來就可以了,這個就相當于工業(yè)上的標準零件,拿來直接用就可以了。
          2)寄存器地址及位地址聲明的原因
          reg51.h里面主要是一些特殊功能寄存器的地址聲明,對可以位尋址的,還包括一些位地址的聲明,如果如sfr P1=0x80;sfr IE=0xA8;sbit EA=0xAF等。

          sfr P1 = 0x90這句話表示:P1口所對應的特殊功能寄存器P1在內(nèi)存中的地址為0x80,sbit EA=0xAF這句話表示EA這一位的地址為0xAF。
          注意這里出現(xiàn)了一個使用很頻繁的sfr和sbit。

          sfr表示特殊功能寄存器的意思,它并非標準C語言的關鍵字,而是Keil為能直接訪問80C51中的SFR而提供了一個新的關鍵詞,其用法是:sfr特殊功能寄存器名=地址值(注意對于頭文件里“特殊功能寄存器名”,用戶實際上也可以修改的,如P1=0x80,也可改為A1=0x80,但sfr 和地址值則不能更改,否者會編譯出錯。)
          sbit表示位的意思,它也是非標準C語言的關鍵字,編寫程序時如需操作寄存器的某一位(可位尋址的寄存器才能用)時,需定義一個位變量,此時就要要到sbit,如sbit deng=P1^0,sbit EA= 0xAF;需要注意的是,位定義時有些特殊,用法有三種:

          第一種方法:sbit位變量名=寄存器位地址值

          第二種方法:sbit位變量名=SFR名稱^寄存器位值(0-7)

          第三種方法:sbit位變量名=SFR地址值^寄存器位值

          如:

          sbit IT0=0x88(1)說明:0x88是IT0的位地址值

          sbit deng=P1^2(2)說明:其中P1必須先用sfr定義好

          sbit EA=0xA8^7(3)說明:0xA8就是IE寄存器的地址值
          以上三種定義方法需注意的是 IT0 deng EA可由用戶隨便定義,但必須滿足C語言對變量名的定義規(guī)則。除些外其它的則必須按照上面的格式寫,如“名稱^變量位地址值”中“^”,它是由keil軟件的規(guī)定的,不能寫成其它的,只能這樣能才編譯通過。
          以上是對寄存器地址和位地址的定義和聲明作了解釋,大家需要牢牢記?。褐挥袑拇嫫骷跋嚓P位進行聲明地址后,我們才能對其進行賦相關的值,keil軟件才能編譯通過。至于說為什么,這可能一句話兩句話也說不清楚。
          3)內(nèi)存、SFR、位、地址等的通俗解釋

          前面講到了寄存器地址和位地址(前提能位尋址)聲明的目的是為告訴C編譯器相應寄存器及其位在內(nèi)存中的地址,這樣我們對寄存器及一些位賦的變量和數(shù)值才能正確保存,然后才能供CPU正確的調(diào)用,完成相應的功能。
          上段文字出現(xiàn)了寄存器(SFR)、位,地址、內(nèi)存等,單片機學習過程中還會出現(xiàn)ROM、RAM等名詞,可能大家覺得不是很好理解,這里可以通俗的解釋一下,如下面三個圖所示。
          我們把內(nèi)存比作賓館,ROM、RAM、SFR相當于賓館里具體的有三種不同功能樓層(具體這個賓館多少層即多少ROM、RAM、SFR,視各個賓館或者每種單片機而不同),每層8個房間相當于8位,每個房間要么住男人要么住女人相當于每位要么放入數(shù)字1要么放入數(shù)字0,keil編譯器就相當于賓館的工作人員,旅客去住旅館相當寫程序的過程,住賓館的人必須事先要給工作人員說你是哪一層哪一個房間(即聲明寄存器地址和位地址,)賓館工作人員才能把你帶到你的房間里去(這里假設這個賓館可以由旅客自己決定住哪個房間)。即:只有對寄存器及相關位進行聲明地址后,我們才能對其進行賦相關的值,keil軟件才能編譯通過。





          4)REG51.H頭文件原文及解釋
          打開reg51.h可以看到這樣的一些內(nèi)容(此文件一般在C:KEILC51INC下,INC文件夾根目錄里有不少頭文件,并且里面還有很多以公司分類的文件夾,里面也都是相關產(chǎn)品的頭文件。如果我們要使用自己寫的頭文件,使用的時候只需把對應頭文件拷貝到INC文件夾里就可以了。)


          上一頁 1 2 3 下一頁

          評論


          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();