KeilC特殊功能寄存器和位定义
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1、bit和int char差不多,只不过char=8位, bit=1位。都是 变量,编译器在编译过程中自动分配地址。除非你指定,否则 这个地址是随机的。这个地址是位寻址区。bit只有0和1两种值 2、 sbit(静态地址位定义)是单片机c语言 中的一种扩充 数据类型,利用它能访问芯片内部的 RAM 中的可寻址位 (20H~2FH)或特殊功能寄存器中的可寻址位。 一旦用了sbit xxx = REGE^6这样的定义,这个sbit变量就 确定地址了。sbit大部分是用在专用寄存器中的,方便对寄存 器的某位进行操作。
sfr P1 = 0x90; //这里没有使用预定义文件,而是自己定 义特殊寄存器。 sbit P1_0 = P1 ^ 0; sbit P1_1 = 0x91; sbit P1_7 = 0x90 ^ 7; // // 这 里 分 别 定 义 P1 端 口 和 P10 , P11 , P17引脚,之前我们使用的预定义文件其实 就是这个作用。
(3) 和 (2) 其实是一样的,只是把特殊功能寄存器的位址 直接用常数表示。
在C51存储器类型中提供一个bdata的存储器类型,是 指可位寻址的数据存储器,位于单片机的可位寻址区中, 可以将要求可位寻址的数据定义为bdata,如: uchar bdata ib; //在位寻址区定义无符号字符变量ib sbit ib7=ib^7 //用关键字sbit定义位变量ib7 Int bdata ab[2]; //在可位寻址区定义数组ab[2] sbit ab12 = ab[1]^12; //定义ab12为数组ab[1]中的第 12位 操作符“ ^” 后面的位位置的最大值取决于指定的基址 类型,char 0-7,int 0-15,long 0-31。
sfr16用来定义16位特殊功能寄存器,如8052的T2定 时器,可以定义为: sfr16 T2 = 0xCC; //这里定义8052定时器2,地址为 T2L=CCH,T2H=CDH 用 sfr16 定义 16 位特殊功能寄存器时,等号后面是它 的低位地址,高位地址一定要位于物理低位地址之上。注 意的是不能用于定时器0和1的定义。
?? sfr16 占用两个内存单元,值域为 0~65535。sfr16 和 sfr 一样用于操作特殊功能寄存 器,所不一样的是它用 于操作占两个字节的寄存器,如定时器 T0 和 T1。
二ቤተ መጻሕፍቲ ባይዱsbit和bit的使用
51单片机的内部RAM中,20H~2FH为位操作区域, 20H的最低位为00H,2FH的最高位为7FH ,位地址的范 围是00H~07FH,共16*8=128位,可以对每一位进行独立 操作。 特殊功能寄存器中,对于字节地址能被8整除的寄存 器,也可进行位寻址的地址,其位地址从80H开始。 特殊功能寄存器的地址和最低位的位地址相同,比如 P0口的地址是80H,那么P0口的最低位的位地址也是80H, 次低位是81H,最高位的地址是87H,所以P0口的口地址 80H与最低位的位地址80H,在物理结构上是完全不同的。
一、sfr和sfr16的使用
使用关键字sfr和sfr16可以直接对51单片机的特殊寄 存器进行定义,格式如下: sfr 定义的名字 = 特殊功能寄存器地址; Sfr16 定义的名字 = 特殊功能寄存器地址; 例如: sfr P1 = 0x90; //定义P1 I/O口,其地址90H sfr 关键字后面是一个要定义的名字,可任意选取, 但要符合标识符的命名规则。 等号后面必须是地址常数,不允许有带运算符的表 达式,而且该常数必须在特殊功能寄存器的地址范围之内 (80H-FFH)。
3、bit位标量 bit位标量同样是C51编译器的一种扩充数据类型,利用它 可定义一个位标量,但不能定义位指针,也不能定义位数组。 它的值是一个二进制位,不是0就是1,类似一些高级语言中的 Boolean类型中的True和False。
sbit 可定义位寻址对象,用 sbit 定义的位地址必须是专 用寄存器,字节地址必须位于80H-FFH之间,方法如下: (1) sbit 位变量名=位地址 sbit P1_1 = 0x91 ;是把位的绝对地址赋给位变量 (2) sbit 位变量名=特殊功能寄存器名^位位置 sft P1 = 0x90 ;先定义一个特殊功能寄存器名 sbit P1_1 = P1 ^ 1 ;再指定位变量名所在的位置 (3) sbit 位变量名=字节地址^位位置 如:sbit P1_1 = 0x90 ^ 1;