在操作中學習。如果只是光看教程,沒有實際的操作,對編程語言的理解很空泛,所以決定從單片機中學習C語言。
#include sbit LED = P0^0; //這里就是對P0寄存器進行位操作。相當于對P0^0位賦予了一個新的名字,LED。實際上這一塊可以包含在頭文件中。避免重復操作。 void main() LED = 0; 以上程序能夠在KingST的C52單片機學習板上點亮一個LED小燈。 附上單片機原理圖 #include 表示包含了C52單片機的特殊功能寄存器,和位的定義。 51單片機頭文件reg51.h詳解 我們在用c語言編程時往往第一行就是頭文件,51單片機為reg51.h或reg52.h,51單片機相對來說比較簡單,頭文件里面內容不多,像飛思卡爾、ARM系列的單片機頭文件往往內容就非常多,盡管如此,對一些初次接觸單片機的朋友來說,51的頭文件還是搞不太清楚,今天具體來說明一下。 所謂“文件包含”是指在一個文件內將另外一個文件的內容全部包含進來。因為被包含的文件中的一些定義和命令使用的頻率很高,幾乎每個程序中都可能要用到,為了提高編程效率,減少編程人員的重得勞動,將這些定義和命令單獨組成一個文件,如reg51.h,然后用#include 2)寄存器地址及位地址聲明的原因 sfr P1 = 0x90這句話表示:P1口所對應的特殊功能寄存器P1在內存中的地址為0x80,sbit EA=0xAF這句話表示EA這一位的地址為0xAF。 sfr 表示特殊功能寄存器的意思,它并非標準C 語言的關鍵字,而是Keil 為能直接訪問80C51中的特殊功能寄存器 而提供了一個新的關鍵詞,其用法是:sfr 特殊功能寄存器名=地址值(注意對于頭文件里“特殊功能寄存器名”,用戶實際上也可以修改的,如P1=0x80,也可改為A1=0x80,但sfr 和地址值則不能更改,否者會編譯出錯。) 第一種方法: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寄存器的地址值 前面講到了寄存器地址和位地址(前提能位尋址)聲明的目的是為告訴C編譯器相應寄存器及其位在內存中的地址,這樣我們對寄存器及一些位賦的變量和數值才能正確保存,然后才能供CPU正確的調用,完成相應的功能。 4)REG51.H頭文件原文及解釋 REG51.H Header file for generic 80C51 and 80C31 microcontroller. Copyright (c) 1988-2002 Keil Elektronik GmbH and Keil Software, Inc. All rights reserved. --------------------------------------------------------------------------*/ #ifndef __REG51_H__ #define __REG51_H__ /* BYTE Register */ sfr P0 = 0x80; //三態雙向 IO口 P0口 此句話的意思是:特殊功能寄存器 P0 地址為0x80 ,可位尋址,下同 //低8位地址總線/數據總線(一般不用而只作普通I/O口,注意作I/O口用時,硬件上需接上接電阻) sfr P1 = 0x90; //準雙向 IO口 P1口 //高8位地址總線,一般也作普通I/O用 sfr P3 = 0xB0; //雙功能 //1.準雙向 IO口 P3口 //2. P30 RXD串行數據接受 // P31 TXD串行數據發送 // P32 外部中斷0 信號申請 // P33 外部中斷1 信號申請 // P34 定時/計數器T0 外部計數脈沖輸入 // P35 定時/計數器T1 外部計數脈沖輸入 // P36 WR 片外RAM寫脈沖信號輸入 // P37 RD 片外ram讀脈沖信號輸入 sfr PSW = 0xD0; // 可以位尋址(C語言編程時可不考慮此寄存器) //程序狀態寄存器Program Status WORD (程序狀態信息) //psw.7(CY) 進位標志 //psw.6(AC)輔助進位標志位低四位向高四位進位或借位時 AC=1 //主要用于十進制調整 //psw.5(F0)用戶可自定義的程序標志位 //psw.4(RS1) //psw.3(RS0) //工作寄存器選擇位 //任一時刻只有一組寄存器在工作 //0 0 0區 00H~07H //0 1 1區 08H~0fH //1 0 2區 10H~17H //1 1 3區 18H~1FH //psw.2(OV) 溢出標志位 //psw.1( ) 保留為 ,不可使用
sbit ADDR0 = P1^0;
sbit ADDR1 = P1^1;
sbit ADDR2 = P1^2;
sbit ADDR3 = P1^3;
sbit ENLED = P1^4;
{
ENLED = 0;
ADDR3 = 1;
ADDR2 = 1;
ADDR1 = 1;
ADDR0 = 0;
while(1);
}
1)“文件包含”處理概念
reg51.h里面主要是一些特殊功能寄存器的地址聲明,對可以位尋址的,還包括一些位地址的聲明,如果如sfr P1=0x80; sfr IE=0xA8;sbit EA=0xAF等。
注意這里出現了一個使用很頻繁的sfr和sbit。
sbit 表示位的意思,它也是非標準C 語言的關鍵字,編寫程序時如需操作寄存器的某一位(可位尋址的寄存器才能用)時,需定義一個位變量,此時就要要到sbit,如sbit deng=P1^0,sbit EA = 0xAF;需要注意的是,位定義時有些特殊, 用法有三種:
以上三種定義方法需注意的是 IT0 deng EA可由用戶隨便定義,但必須滿足C語言對變量名的定義規則。除些外其它的則必須按照上面的格式寫,如“名稱^變量位地址值”中“^”,它是由keil軟件的規定的 ,不能寫成其它的,只能這樣能才編譯通過。
以上是對寄存器地址和位地址的定義和聲明作了解釋,大家需要牢牢記住:只有對寄存器及相關位進行聲明地址后,我們才能對其進行賦相關的值,keil軟件才能編譯通過。至于說為什么,這可能一句話兩句話也說不清楚。
3)內存、SFR、位、地址等的通俗解釋
上段文字出現了寄存器(SFR)、位,地址、內存等,單片機學習過程中還會出現ROM、RAM等名詞,可能大家覺得不是很好理解,這里可以通俗的解釋一下,如下面三個圖所示。
我們把內存比作賓館,ROM、RAM、SFR相當于賓館里具體的有三種不同功能樓層(具體這個賓館多少層即多少ROM、RAM、SFR,視各個賓館或者每種單片機而不同),每層8個房間相當于8位,每個房間要么住男人要么住女人相當于每位要么放入數字1要么放入數字0,keil編譯器就相當于賓館的工作人員,旅客去住旅館相當寫程序的過程,住賓館的人必須事先要給工作人員說你是哪一層哪一個房間(即聲明寄存器地址和位地址,)賓館工作人員才能把你帶到你的房間里去(這里假設這個賓館可以由旅客自己決定住哪個房間)。即:只有對寄存器及相關位進行聲明地址后,我們才能對其進行賦相關的值,keil軟件才能編譯通過。
打開reg51.h 可以看到這樣的一些內容(此文件一般在C:KEILC51INC下 ,INC文件夾根目錄里有不少頭文件,并且里面還有很多以公司分類的文件夾,里面也都是相關產品的頭文件。如果我們要使用自己寫的頭文件,使用的時候只需把對應頭文件拷貝到INC文件夾里就可以了。)
下面附出頭文件的原文,并把注釋文件一并附后。
/*--------------------------------------------------------------------------
sfr P2 = 0xA0; //準雙向 IO口 P2口
上一篇:?CS5532 C51驅動程序
下一篇:C語言基礎及流水燈實現
推薦閱讀最新更新時間:2025-06-14 15:22






設計資源 培訓 開發板 精華推薦
- LTC3835EGN 演示板、低 Iq、36Vin 同步降壓控制器
- LT3791EFE 98.5% 高效 100W (33.3V/3A) 降壓-升壓型 LED 驅動器的典型應用電路
- 使用 Analog Devices 的 LTC6990IDCB#TRMPBF 的參考設計
- STM32F103開發板-板載stlink
- 89C52RC開發板
- MIC280,MIC280 Precision Itty-bitty 熱監控器評估板
- NCP301LSN20T1 2V 窗口電壓檢測器的典型應用
- MIC2537 的典型應用:四路配電開關最終信息
- OM13524: PCA9745B demonstration board OM13524
- AM2F-1205SH52Z 5V 2W DC/DC 轉換器的典型應用
- 納祥科技2W 24位數字功放NX4920,可用于AI語音播報、WIFI播放器
- 常用解調器的定義和工作原理
- 從性能與網絡傳輸出發,講講鐵威馬MAX系列為什么一騎絕塵
- 惠普選中Hailo下一代人工智能加速器,革新零售業與酒店業運營模式
- 跨國商務溝通困局破解之道:時空壺 W4Pro 全場景應用解析
- 從矢量降噪到雙向同傳,時空壺 W4Pro 如何重構 AI 同傳技術標準?
- LoRa+NB-IoT雙模融合,地下車庫信號盲區電梯場景等的冗余通信
- LoRa與UWB的“定位之戰”,成本敏感場景高精度需求的場景切割
- 時空壺X1再升級:引領AI同傳新時代,革新演講翻譯體驗
- ARXML 規則下 ECU 總線通訊與 ADTF 測試方案