51單片機頭文件reg51.h詳解
我們在用c語言編程時往往第一行就是頭文件,51單片機為reg51.h或reg52.h,51單片機相對來說比較簡單,頭文件里面內(nèi)容不多,像飛思卡爾、ARM系列的單片機頭文件往往內(nèi)容就非常多,盡管如此,對一些初次接觸單片機的朋友來說,51的頭文件還是搞不太清楚,今天具體來說明一下。
本文引用地址:http://m.butianyuan.cn/article/201612/324301.htm1)“文件包含”處理概念
所謂“文件包含”是指在一個文件內(nèi)將另外一個文件的內(nèi)容全部包含進來。因為被包含的文件中的一些定義和命令使用的頻率很高,幾乎每個程序中都可能要用到,為了提高編程效率,減少編程人員的重得勞動,將這些定義和命令單獨組成一個文件,如reg51.h,然后用#include
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文件夾里就可以了。)
評論