51單片機---Keil C語言
sbit、sfr、sfr16屬于C51的擴展數(shù)據(jù)類型;
1、sbit:定義可位尋址類型的變量,用于位尋址,從位尋址字節(jié)中定義位變量;sbit定義的變量屬于特殊功能寄存器類型的位變量,存放在特殊功能寄存器區(qū);
sbit的三種形式:
sbit 位變量名 = 位地址;
sbit 位變量名 = 特殊功能寄存器名 ^ 位位置;
sbit 位變量名 = 字節(jié)地址 ^ 位位置;
如:
sbit P1_0 = P1 ^ 0;
sbit P1_1 = P1 ^ 1;
sbit P1_2 = P2 ^ 2;
2、sfr/sfr16:分別定義8位和16位的特殊功能寄存器類型的變量,這種類型的變量存放的是硬件的物理地址碼;
sfr/sfr16的形式:
sfr 特殊功能寄存器名 = 特殊功能寄存器地址常數(shù)(地址常數(shù));
sfr16 特殊功能寄存器名 = 特殊功能寄存器地址常數(shù)(地址常數(shù));
如:
sfr P1 = 0x90; //定義P0口的物理地址碼;
sfr P2 = 0xA0; //定義P1口的物理地址碼;
sfr16 T2 = 0xCC; //定義T2的物理地址碼;
注意:sbit/sfr/sfr16定義的變量都存放在地址[80H,FFH]這16字節(jié)的地址范圍內;
二、新增加的關鍵字
interrupt:定義一個中斷服務函數(shù);
reentrant:定義一個可再重入函數(shù);
using:設定中斷服務函數(shù)所使用的工作寄存器組;
三、存儲類型
單片機的存儲空間在物理上分為4個部分:
A、片內數(shù)據(jù)存儲區(qū);
B、片外數(shù)據(jù)存儲區(qū);
C、片內程序存儲區(qū);
D、片外程序存儲區(qū);
所以,存儲類型就分為以下6種:
1、code:程序代碼存儲區(qū)ROM,共64K,由MOVC @DPTR訪問;
2、data:可直接尋址的片內數(shù)據(jù)存儲區(qū),共128字節(jié),訪問速度比較快;
3、bdata:可位尋址的片內數(shù)據(jù)存儲區(qū),共16字節(jié)(128位),允許位與字節(jié)混合訪問;sbit/sfr/sfr16;
4、idata:可間接尋址的片內數(shù)據(jù)存儲區(qū),共256字節(jié),允許訪問片內全部的RAM空間;
5、pdata:可分頁尋址的片外數(shù)據(jù)存儲區(qū),共256字節(jié),由MOVX @Ri訪問;
6、xdata:可尋址的片外數(shù)據(jù)存儲區(qū),共64KB,由MOVX @DPTR訪問;
使用code來定義變量的存儲類型時,編譯器會將其定義存放在程序代碼存儲區(qū)ROM中,這樣的話,這種類型的變量的值就不能再被修改了;
評論