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,至於有什麼作用,......