C51—运算量(重点:特殊功能寄存器变量、位变量
位类型符有两个:bit和sbit。可以定义两种位变量。
a、bit型位变量
在格式中可以加上各种修饰,但是要注意存储器类型只能是bdata、data、idata,只能是片内RAM的可位寻址区,严格来说只能是bdata。
例如:
bit bdata a1;
b、sbit型位变量
sbit位类型符用于定义在可位寻址字节或者特殊功能寄存器中的位,定义时需要指明其位地址,可以使位直接地址,可以是可位寻址变量带位号,也可以是特殊功能寄存器名带位号。
例如(这些东西都在#include"reg52.h"中):
sbit OV=0xd2;
sbit CY=0xd7;
unsigned char bdata flag;
sbit flag_0=flag^0;
sfr P1=x090;
sbit P1_1=P1^1;
3、存储模式(个人感觉真的用不到这些东东了,因为你丫的要是嫌小可以换个大的,而且还相当的便宜~~~~,我以前试过扩展一个RAM和ROM,擦不成啊~~)
C51编译器支持3种存储模式:SMALL模式、COMPACT模式和LARGE模式。不同的存储模式对变量默认的存储器类型不一样。
1)SMALL模式
SMALL模式成为小编译模式,在SMALL模式下,编译时函数参数以及变量被默认在片内RAM中,存储类型为data。
2)COMPACT模式
COMPACT模式称为紧凑编译模式,在COMPACT模式下,编译时函数参数和变量被默认在片外RAM的低256B空间,存储类型为pdata。
3)LARGE模式
LARGE模式称为大编译模式,在LARGE模式下,编译时函数参数和变量被默认在片外RAM的64KB空间了,存储器类型为xdata。
例如:
#pragma small
char k1;
int xdata m1;
#pragma compact
char k2;
int xdata m2;
int func1(int x1,int y1) large
{
}
int func2(int x2,int y2)
{
}
4、绝对地址的访问(这里才是重点中的重点啊~~~)
在C51中,可以通过变量的形势访问51单片机的存储器,也可以通过绝对地址来访问存储器。三种方法:
1)使用C51运行库中预定义宏(就是调用#include"absacc.h")
C51编译器提供了一组宏定义来对51单片机的code、data、pdata和xdata空间进行绝对寻址!
规定只能以无符号数方式访问,定义了8个宏定义,其函数原型如下:
#define CBYTE((unsigned char volatile*)0x50000L)
#define DBYTE((unsigned char volatile*)0x40000L)
#define PBYTE((unsigned char volatile*)0x30000L)
#define XBYTE((unsigned char volatile*)0x20000L)
#define CWORD(unsigned int volatile*)0x50000L)
#define DWORD(unsigned int volatile*)0x40000L)
#define PWORD(unsigned int volatile*)0x30000L)
#define XWORD(unsigned int volstile*)0x20000L)
例如:
#include"absacc.h"
#include"reg52.h"
typedef unsigned char uchar;
typedef unsigned int
void main()
{
}
2)通过指针访问
采用指针的访问的方法,可以在C51程序中对任意指定的存储器单元进行访问。
typedef unsigned char uchar;
typedef unsigned int uint;
void func()
{
}
3)使用C51扩展关键字 _at_ (这个用的最多了~~~)
总算完了,我真的要累死了~~~~擦擦擦擦啊
一般格式:
[存储类型] 数据类型说明 变量名 _at_ 地址常量;
其中,存储类型为data、bdata、idata、pdata、xdata等C51能识别的数据类型,如果省略,则会按照存储模式规定的默认存储类型确定变量的存储区域(这里又用到上边的了);数据类型为C51支持的数据类型;地址常数用于指定变量的绝对地址,必须位于有效的存储器空间之内;使用_at_定义的变量必须为全局变量。
C51运算量特殊功能寄存器变量位变 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)