MCS-51系列单片机片内有20多个特殊功能寄存器(SFR)(51子系列单片机有21个,52子系列单片机有26个),离散地分布在片内RAM的高128B的地址空间,其直接地址为80H~0FFH,访问SFR,只能采用直接寻址。
相对于标准C语言,C51增加了新的数据类型,其中包括与特殊功能寄存器有关的sfr和sfr16数据类型,以便C51访问这些特殊功能寄存器。sfr定义8位的特殊功能寄存器,而sfr16定义16位的特殊功能寄存器。
例如:sfr SCON=0X98;
sfr TMOD=0x89;
说明:定义片内SFR型变量SCON和TMOD,其直接地址分别为98H和89H。
例如:sfr16 DPTR=0X82;
sfr16 T2=0XCC;
说明:定义16位的片内SFR型变量DPTR和T2,其直接地址分别为82H和0CCH。
注意:sfr16定义的变量是一个16位的SFR,其两个字节的地址必须是连续的(低位在前,高位在后),因此不能定义T0(TL0地址为8AH,TH0地址为8CH)和T1(TL1地址为8BH,TH1地址为8DH)。(www.xing528.com)
另外,有11个特殊功能寄存器(字节地址能被8整除)还具有位寻址功能,其每一位都具有位地址,范围为80H~0FFH。C51的关键字sbit可以定义位于SFR的可位寻址的位变量,定义的方法有三种。
1)sbit位变量名=sfr_name^n (n=0~7)。
例如:sfr IP=0xB8; //定义IP为地址为0B8H的中断优先级寄存器
sbit PT1=IP^3; //定义PT1为IP.3,其位地址为0BBH
2)sbit位变量名=字节地址^n (字节地址是11个可位寻址的SFR的地址,n=0~7)。
例如:sbit PT1=0XB8^3; //定义PT1为0B8H.3,其位地址为0BBH
3)sbit位变量名=位地址(0x80~0xFF)。
例如:sbit PT1=0xBB; //定义PT1为位地址为0BBH的可寻址位变量
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。