zyfei 发表于 2017-11-19 19:13 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 |
同求大神指点![]() |
|
本帖最后由 zl2168 于 2017-11-19 19:14 编辑 哼!你看这些书,当然看不懂!!! 介绍你一本书,张志良编著的:《80C51单片机实用教程——基于Keil C和Proteus》高等教育出版社ISBN 978-7-04-044532-9, 用于学习51单片机原理,程序(双解c和汇编)语句条条有注解,便于阅读理解,便于自学,最主要是能解答你的疑问。 |
| !在线等 |
| 没有人知道么 |
yzwzfyz 发表于 2017-11-3 10:12 很仔细的看了 不然也不会来这里问了 |
|
本帖最后由 yzwzfyz 于 2017-11-3 17:04 编辑 看看与这个章节的目的就明白了。 |