1. 程式人生 > >Keil C51對C語言的關鍵詞擴充套件之十三: sfr

Keil C51對C語言的關鍵詞擴充套件之十三: sfr

sfr用來定義特殊功能暫存器。用法如下:

sfr name = address;
name 為暫存器名字

address 為暫存器的地址

示例:

sfr P0 = 0x80; /* P0口,地址為0x80 */

sfr P1 = 0x90;/* P1口,地址為0x90 */

sfr P2 = 0xA0;       /* P2口,地址為0xa0 */

sfr P3 = 0xB0;/* P3口,地址為0xb0 */

等號右邊必須為數字常量,不能包含+ -等操作符,數值也不是隨意的,傳統型別8051微控制器支援的地址範圍為0x80 - 0xFF。NXP 80C51MX提供擴充套件地址範圍0x180 - 0x1FF。

假如8個發光二極體共陽極接電源,陰極連線微控制器P0口,我們可以這樣點燈:

sfr P1 = 0x80; /* 0x80實際為微控制器P0口,只不過我們自己給它起個名字 */

voidmain(void)

{

while(1)

{

P1=0xff;

delay( );

P1=0;

delay();

}

}

如果程式比較大,我們也通過sfr給暫存器起別名,別人看了會XXX,至於有什麼作用,......

相關推薦

Keil C51C語言關鍵詞擴充套件八: far

far的出現,是Keil 編譯器為了支援新出現的8051家族增強型MCU,這些增強型MCU可能擁有大於64KB的儲存器。使用far可訪問擴充套件的RAM,使用const far可訪問擴充套件的ROM。 NXP 51MX架構51微控制器提供通過通用指標訪問多達8MB的code

Keil C51C語言關鍵詞擴充套件十三: sfr

sfr用來定義特殊功能暫存器。用法如下: sfr name = address; name 為暫存器名字 address 為暫存器的地址 示例: sfr P0 = 0x80; /* P0口,地址為0x80 */ sfr P1 = 0x90;/* P1口,地址為0x90

Keil C51C語言關鍵詞擴充套件二: alien

alien關鍵詞主要是為了C51編譯器與PL/M-51編譯器相容。 在C51編譯器中呼叫PL/M-51函式,須使用alien宣告該函式,如下: extern alien char plm_func (int, char); char c_func (void) {

Keil C51C語言關鍵詞擴充套件五: code

code 指定儲存位置位於程式儲存器。程式儲存器只讀,因此code型別的變數,是無法再次賦值的。 unsigned char code ary[ ] = :"Read only"; /* 陣列ary位於程式儲存器 */ ary[0]='a'; /* 錯誤,不可修改*/

Keil C51C語言關鍵詞擴充套件十: pdata

外部ram通過一個地址指標暫存器來間接訪問,讀寫效率要低於內部ram。 外部ram容量最大可位64KB。 Keil C51提供兩種外部資料儲存方式,pdata和xdata。 1)xdata儲存型別,指示變數可儲存在外部ram 64KB地址範圍內任意位置。large記憶體模型

Keil C51C語言關鍵詞擴充套件十一: xdata

xdata宣告的變數位於外部ram 64KB地址範圍內某一位置。 程式示例: unsigned int xdata m=0; /* 宣告一個全域性變數,可位於外部ram 64KB地址範圍內任意位置,由

Keil C51C語言關鍵詞擴充套件六: compact

函式的引數和區域性變數儲存在記憶體模型指定的預設區域內。 我們可以通過small,compact 或large 指定一個函式使用何種記憶體模型。 #pragma small /* 預設記憶體模型為small*/ extern int calc (char

C51標準C語言擴充套件 -- 資料型別

--------------------------------------------- -- 時間:2018-11-22 -- 建立人:Ruo_Xiao -- 郵箱:[email protected] ----------------------------------------

c51和一般c語言的不同

   c語言和c51大部分的地方都是相同的,他們的語句,結構,順序都是很相似的,只是c51相比與c語言,多了很多變數型別和其他的東西,下面是總結c語言和c51的一些不同之處。   變數型別   位變數

C語言數組冒泡排序+折半查找法(二分查找)

不存在 次數 存在 是否 .com int count 結束 如果 冒泡排序算法 1 int num[5]; 2 int i; 3 //循環接收用戶輸入的元素 4 for(i=0;i<5;i++){ 5 pr

C語言的陷阱typedef

c語言的陷阱之typedeftypedef是一個關鍵字,可以重命名一些數據類型也可以重定義一些新的數據類型。我們從以下幾個角度去理解typedef。1.typedef和普通數據類型類型typedef int MYINT;int a = 10; MYINT B = 20;123123我們給int重命名成MYIN

C++語言筆記系列十八——虛函數(1)

自己 語言 數據類型 說明 出現 adium 重定義 angle rac 1.C++中的多態 (1)多態性:同一個函數的調用能夠進行不同的操作,函數重載是實現多態的一種手段。 (2)聯編:在編譯階段進行聯接。即是在編譯階段將一個函數的調用點和函數

C++語言筆記系列二十——模版

輸出 類模板 pos 有一個 class 初始 個數 創建對象 example 1.隨意輸入兩個數x和y,輸出最大值max。 int max(int x, int y) {return x>y?x:y;} 2.函數模版 (1)用一種或者多

C語言知識結構

等等 深入 代碼 技術 研究 pop tex dsm 其他 C語言的知識結構整理成思維導圖,例如以下圖所看到的: 這張圖的總體思路是: 用C敲代碼。該學會什麽? 要用C寫的更好,改學會什麽? 事實上。僅僅要是分層的知識結構,大致的思路是:

C語言編程--scanf()函數與getchar()函數搭配來理解C程序的輸入緩存(buffer)

使用 ges border urn alt color 數值 amp tps 博主最近在學習C語言編程,在書中的代碼示例中出現了下面的代碼段: #include<stdio.h> int main() { char a[5]; int i; printf("

梓益C語言學習筆記常用鏈表操作函數

C語言 鏈表操作 梓益C語言學習筆記之常用鏈表操作函數一、創建鏈表void link_creat_head(STU **p_head,STU *p_new){ STU *p_mov=*p_head; if(*p_head==NULL) //當第一次加入鏈表為空時,head執行p_new { *

梓益C語言學習筆記鏈表&動態內存&文件

C語言 鏈表 梓益C語言學習筆記之鏈表&動態內存&文件一、定義: 鏈表是一種物理存儲上非連續,通過指針鏈接次序,實現的一種線性存儲結構。二、特點: 鏈表由一系列節點(鏈表中每一個元素稱為節點)組成,節點在運行時動態生成(malloc),每個節點包括兩個部分: 存儲數據元素的數據域 存儲下一個節點地址的

梓益C語言學習筆記常用字符串操作(sscanf & strtok)

C語言 字符串操作 梓益C語言學習筆記之常用字符串操作(sscanf & strtok)一、sscanf int sscanf(const char *buf,const char *format, …); \\從buf指定的內存區域中讀入信息 例: int a, b, c; ssc

C語言異常處理 setjmp()和longjmp()

divide font 變量 bsp ron 否則 sharp highlight == 異常處理之除0情況 相信大家處理除0時,都會通過函數,然後判斷除數是否為0,代碼如下所示: double divide(doublea,double b) { co

C++學習(十一)(C語言部分) 練習

文件頭 語句 font 判斷 c++ c++學習 %d \n AI 1 /* 2 3 1.if 4 輸入一個成績 進行分級 5 6 輸入一個數字 判斷是否是水仙花數 7 比如 153 = 1 * 1 * 1 + 5 * 5 * 5 + 3