欢迎来到天天文库
浏览记录
ID:48784498
大小:74.50 KB
页数:8页
时间:2020-01-24
《Keil C特殊功能寄存器和位定义.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、使用关键字sfr和sfr16可以直接对51单片机的特殊寄存器进行定义,格式如下:sfr定义的名字=特殊功能寄存器地址;Sfr16定义的名字=特殊功能寄存器地址;例如:sfrP1=0x90;//定义P1I/O口,其地址90Hsfr关键字后面是一个要定义的名字,可任意选取,但要符合标识符的命名规则。等号后面必须是地址常数,不允许有带运算符的表达式,而且该常数必须在特殊功能寄存器的地址范围之内(80H-FFH)。一、sfr和sfr16的使用在单片机的C语言程序设计中,可以通过关键字sfr来定义所有特殊功能寄存器,从而在程序中直接访问它们,例如:sfrP1=0x90;//特殊功能寄存器P1
2、的地址是90H对应P1口的8个I/O引脚在程序中就可以直接使用P1这个特殊功能寄存器了,如:P1=0x00;//将P1口的8位I/O口全部清0C语言中,还可以通过关键字sbit来定义特殊功能寄存器中的可寻址位,如:sbitP1_0=P1^0;通常情况下,这些特殊功能寄存器已经在头文件reg51.h中定义了,只要在程序中包含了该头文件,就可以直接使用已定义的特殊功能寄存器。如果没有头文件reg51.h,或者该文件中只定义了部分特殊功能寄存器和位,用户也可以在程序中自行定义。sfr16用来定义16位特殊功能寄存器,如8052的T2定时器,可以定义为:sfr16T2=0xCC;//这里定
3、义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位,可以对每一位进行独立操作。特殊功能寄存器中,对于字节
4、地址能被8整除的寄存器,也可进行位寻址的地址,其位地址从80H开始。特殊功能寄存器的地址和最低位的位地址相同,比如P0口的地址是80H,那么P0口的最低位的位地址也是80H,次低位是81H,最高位的地址是87H,所以P0口的口地址80H与最低位的位地址80H,在物理结构上是完全不同的。1、bit和intchar差不多,只不过char=8位,bit=1位。都是变量,编译器在编译过程中自动分配地址。除非你指定,否则这个地址是随机的。这个地址是位寻址区。bit只有0和1两种值2、sbit(静态地址位定义)是单片机c语言中的一种扩充数据类型,利用它能访问芯片内部的RAM中的可寻址位(20H
5、~2FH)或特殊功能寄存器中的可寻址位。一旦用了sbitxxx=REGE^6这样的定义,这个sbit变量就确定地址了。sbit大部分是用在专用寄存器中的,方便对寄存器的某位进行操作。3、bit位标量bit位标量同样是C51编译器的一种扩充数据类型,利用它可定义一个位标量,但不能定义位指针,也不能定义位数组。它的值是一个二进制位,不是0就是1,类似一些高级语言中的Boolean类型中的True和False。sbit可定义位寻址对象,用sbit定义的位地址必须是专用寄存器,字节地址必须位于80H-FFH之间,方法如下:(1)sbit位变量名=位地址sbitP1_1=0x91;是把位的绝
6、对地址赋给位变量(2)sbit位变量名=特殊功能寄存器名^位位置sftP1=0x90;先定义一个特殊功能寄存器名sbitP1_1=P1^1;再指定位变量名所在的位置(3)sbit位变量名=字节地址^位位置如:sbitP1_1=0x90^1;(3)和(2)其实是一样的,只是把特殊功能寄存器的位址直接用常数表示。在C51存储器类型中提供一个bdata的存储器类型,是指可位寻址的数据存储器,位于单片机的可位寻址区中,可以将要求可位寻址的数据定义为bdata,如:ucharbdataib;//在位寻址区定义无符号字符变量ibsbitib7=ib^7//用关键字sbit定义位变量ib7Int
7、bdataab[2];//在可位寻址区定义数组ab[2]sbitab12=ab[1]^12;//定义ab12为数组ab[1]中的第12位操作符“^”后面的位位置的最大值取决于指定的基址类型,char0-7,int0-15,long0-31。sfrP1=0x90;//这里没有使用预定义文件,而是自己定义特殊寄存器。sbitP1_0=P1^0;sbitP1_1=0x91;sbitP1_7=0x90^7;////这里分别定义P1端口和P10,P11,P17引脚,之前我们使用
此文档下载收益归作者所有