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 C51對C語言的關鍵詞擴充套件之八: far
far的出現,是Keil 編譯器為了支援新出現的8051家族增強型MCU,這些增強型MCU可能擁有大於64KB的儲存器。使用far可訪問擴充套件的RAM,使用const far可訪問擴充套件的ROM。 NXP 51MX架構51微控制器提供通過通用指標訪問多達8MB的code
Keil C51對C語言的關鍵詞擴充套件之十三: sfr
sfr用來定義特殊功能暫存器。用法如下: sfr name = address; name 為暫存器名字 address 為暫存器的地址 示例: sfr P0 = 0x80; /* P0口,地址為0x80 */ sfr P1 = 0x90;/* P1口,地址為0x90
Keil C51對C語言的關鍵詞擴充套件之二: alien
alien關鍵詞主要是為了C51編譯器與PL/M-51編譯器相容。 在C51編譯器中呼叫PL/M-51函式,須使用alien宣告該函式,如下: extern alien char plm_func (int, char); char c_func (void) {
Keil C51對C語言的關鍵詞擴充套件之五: code
code 指定儲存位置位於程式儲存器。程式儲存器只讀,因此code型別的變數,是無法再次賦值的。 unsigned char code ary[ ] = :"Read only"; /* 陣列ary位於程式儲存器 */ ary[0]='a'; /* 錯誤,不可修改*/
Keil C51對C語言的關鍵詞擴充套件之十: pdata
外部ram通過一個地址指標暫存器來間接訪問,讀寫效率要低於內部ram。 外部ram容量最大可位64KB。 Keil C51提供兩種外部資料儲存方式,pdata和xdata。 1)xdata儲存型別,指示變數可儲存在外部ram 64KB地址範圍內任意位置。large記憶體模型
Keil C51對C語言的關鍵詞擴充套件之十一: xdata
xdata宣告的變數位於外部ram 64KB地址範圍內某一位置。 程式示例: unsigned int xdata m=0; /* 宣告一個全域性變數,可位於外部ram 64KB地址範圍內任意位置,由
Keil C51對C語言的關鍵詞擴充套件之六: 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