80C51特殊功能寄存器定义方式 4.2.2 变量及其定义方法 …… ⒌ 80C51特殊功能寄存器定义方式 80C51片内有21个特殊功能寄存器,在C51的文件夹里,有一个取名reg51.h的库函数文件,对80C51片内21个特殊功能寄存器按MCS-51中取的名字(必须大写)全部作了定义,并赋予了既定的字节地址。因此,该21个特殊功能寄存器已不需重复定义,只需在程序开头的头文件部分写一条预处理命令:#include <reg51.h>,表示程序可以调用该库函数reg51.h(52系列单片机应用#include <reg52.h>)。但对于不符合MCS-51中特殊功能寄存器名的标识符,或未在头文件中写入上述预处理命令的,则应重新定义,否则出错。 …… 需要注意的是,特殊功能寄存器定义应放在函数外(即作为全局变量)。 需要说明的是,虽然C51允许用关键词sfr和sfr16定义80C51特殊功能寄存器,体现了C51编译功能的多样性和完整性,但编者还是建议读者不要去重新定义,而直接使用预处理命令,既省事又不易出错。 …… ⒍ 位变量定义方式 80C51片内RAM有16字节128位的可寻址位(字节地址20H~2FH,位地址00H~7FH),还有11个特殊功能寄存器是可位寻址的,C51编译器扩充了关键词bit和sbit,用于定义这些可寻址位。位变量也需先定义,后使用。 …… ⑵ 定义11个特殊功能寄存器可寻址位的位变量 80C51单片机11个可寻址位的特殊功能寄存器中,有6个SFR(PSW、TCON、SCON、IE、IP和P3),它们每一可寻址位有位定义名称,C51库函数reg51.h也已对其按MCS-51中取的位定义名称(必须大写)全部作了定义,并赋予了既定的位地址。只要在头文件中声明包含库函数reg51.h,就可按位定义名称直接引用。 但是,还有5个SFR(ACC、B、P0、P1和P2),可寻址位没有专用的位定义名称,只有位编号,但这些位编号不符合ANSI C标识符要求,例如,ACC.0、P1.0等(C51标识符规定不可用小数点),应重新定义。其格式如下: ……
以上摘自张志良编著 《80C51单片机实用教程——基于Keil C和Proteus》高等教育出版社ISBN 978-7-04-044532-9
|