C51單片機的數(shù)據(jù)類型
C51支持C語言的所有標(biāo)準(zhǔn)數(shù)據(jù)類型,除此之外,還加入了用于專門訪問80C51硬件的數(shù)據(jù)類型,如:bit、sbit、sfr和sfrl6。這些數(shù)據(jù)類型在ANSIC中是沒有的。
bit:聲明位變量,其值為0或1。
sbit:聲明可位尋址變量中的某個位變量,其值為0或1
sfr:聲明特殊功能寄存器,地址范圍為:0~255。
sfr16:同上,地址范圍為0~65535。
C51編譯器支持表5-1列出的數(shù)據(jù)類型。除了這些變量類型外,變量能被組合到結(jié)構(gòu)、聯(lián)合和數(shù)組中。兼容ANSIC標(biāo)準(zhǔn)的數(shù)據(jù)類型可通過指針訪問,但擴展的bit、sbit、sfr和sfrl6數(shù)據(jù)類型專用于訪問80C51的特殊功能寄存器,故不能通過指針進行訪問。
表5-1 C51數(shù)據(jù)類型
數(shù)據(jù)類型 | 位 | 字節(jié) | 值的范圍 |
char | 8 | 1 | -128~127 |
unsigned char | 8 | 1 | 0~255 |
enum | 16 | 2 | -32768~32767 |
short | 16 | 2 | -32768~32767 |
unsigned short | 16 | 2 | 0~65535 |
int | 16 | 2 | -32768~32767 |
unsigned int | 16 | 2 | 0~65535 |
long | 32 | 4 | -2147483648~2147483647 |
unsigned long | 32 | 4 | 0~4294967295 |
float | 32 | 4 | ±1.175494E-38~±3.402823E+38 |
bit | 1 | - | 0,1 |
sbit | 1 | - | 0,1 |
sfr | 8 | 1 | 0~255 |
sfr16 | 16 | 2 | 0~65535 |
80C51有21個特殊功能寄存器,它們在片內(nèi)RAM安排了絕對地址,80C51的芯片說明中已經(jīng)為它們用預(yù)定義標(biāo)識符起了名字。C51要做的就是承認(rèn)這些標(biāo)識符并將其與絕對地址聯(lián)系起來?梢杂胹fr與sfr16兩種標(biāo)識符。
例5.1 用sfr數(shù)據(jù)類型定義特殊功能寄存器示例。
sfr SCON = 0x98; /*聲明SCON為串口控制器,地址為0x98*/
sfr P0 = 0x80; /*聲明P0為特殊功能寄存器,地址為0x80*/
sfr TMOD = 0x89; /*聲明TMOD為定時器/計數(shù)器的模式寄存器,地址為0x89*/
sfr PSW = 0xD0; /*聲明PSW為特殊功能寄存器,地址為0xD0*/
說明:sfr之后的寄存器名稱必須大寫,定義之后可以直接對這些寄存器賦值。
在許多80C51派生系列中可用兩個連續(xù)地址的特殊功能寄存器指定一個16位值,如:
sfr16 T2 = 0xCDCC /*聲明T2為16位特殊功能寄存器,地址為0CCH(低字節(jié))和0CDH(高字節(jié))*/
例5.2 用 sbit的數(shù)據(jù)類型定義位變量示例。
sbit CY = PSW^7; /*從已聲明的PSW中,指定PSW.7為CY*/
sbit CY = 0xD0^7;/*整數(shù)0xD0為基地址,指定0xD0的第七位為CY*/
編輯:admin 最后修改時間:2023-06-28