Keil C51基本关键字:
一、由ANSI标准定义的共32个:
auto double int struct break else long switch case enum register typedef char extern return union const float short unsigned continue for signed void default goto sizeof volatile do if while static
二、Keil Cx51扩展的关键字:
•_at_•alien •bdata •bit •code •compact •data •far
•idata
•interrupt
•large
•pdata
•_priority_
•reentrant
•sbit
•sfr
•sfr16
•smallenum函数
•_task_
•using
•xdata
三、标准C关键字说明:
1数据类型关键字(12个):
(1)char:声明字符型变量或函数
(2)double:声明双精度变量或函数
(3)enum:声明枚举类型
(4)float:声明浮点型变量或函数
(5)int:声明整型变量或函数
(6)long:声明长整型变量或函数
(7)short:声明短整型变量或函数
(8)signed:声明有符号类型变量或函数
(9)struct:声明结构体变量或函数
(10)union:声明联合数据类型
(11)unsigned:声明无符号类型变量或函数
(12)void:声明函数无返回值或无参数,声明无类型指针(基本上就这三个作用)
(2)控制语句关键字(12个):
A循环语句
(1)for:一种循环语句(可意会不可言传)
(2)do:循环语句的循环体
(3)while:循环语句的循环条件
(4)break:跳出当前循环
(5)continue:结束当前循环,开始下一轮循环
B条件语句
(1)if:条件语句
(2)else:条件语句否定分支(与if连用)
(3)goto:无条件跳转语句
C开关语句
(1)switch:用于开关语句
(2)case:开关语句分支
(3)default:开关语句中的“其他”分支
D
return:子程序返回语句(可以带参数,也看不带参数)
3存储类型关键字(4个)
(1)auto:声明自动变量一般不使用
(2)extern:声明变量是在其他文件正声明(也可以看做是引用变量)
(3)register:声明积存器变量
(4)static:声明静态变量
4其它关键字(4个):
(1)const:声明只读变量
(2)sizeof:计算数据类型长度
(3)typedef:用以给数据类型取别名(当然还有其他作用
(4)volatile:说明变量在程序执行中可被隐含地改变
四、C51扩展关键字说明
1、_at_定义变量的绝对地址
格式:<[>memory_type<]>type variable_name_at_constant;
例:int xdata value_at_0x8000;/*int at xdata0x8000*/ 2、alien(PL/M-51)函数外部声明
C函数调用PL/M-51必须先用alien声明
例:extern alien char plm_func(int,char);
char c_func(void){
int i;
char c;
for(i=0;i<100;i++){
c=plm_func(i,c);/*call PL/M func*/
}
return(c);
}
C函数要被PL/M-51调用必须先用alien声明
例:alien char c_func(char a,int b){
return(a*b);
}
3、Code data,bdata,pdata,idata,xdata C51存储器类型声明
Code程序代码存储区
Data直接寻址片内数据存储区(低128字节)
Bdata位寻址片内数据存储区(16字节)
Idata间接寻址片内数据存储区(256字节)
Pdata分页寻址外部数据存储区(256字节)
Xdata可寻址片外数据存储区(64KB)
例:int bdata ibase;/*Bit-addressable int*/
char bdata bary[4];/*Bit-addressable array*/
4、bit位变量定义
格式:bit name<[>=value<]>;
例:static bit done_flag=0;/*bit variable*/
5、sfr sfr16sbit C51扩展数据类型
sfr用于定义8位特殊功能寄存器
sfr16用于定义16位特殊功能寄存器
sbit用于定义可位寻址对象
例:sfr P0=0x80;/*Port-0,address80h*/
sfr16T2=0xCC;/*Timer2:T2L0CCh,T2H0CDh*/
sbit EA=0xAF; //将位绝对地址赋給位变量
sfr PSW=0xD0; sbit OV=PSW^2; sbit OV=0xD0^2;
int bdata ibase;/*Bit-addressable int*/
sbit mybit0=ibase^0;/*bit0of ibase*/
6、compact,large,small C51中变量的存储模式选择
Small模式用于将所有未指明存储区的变量均保存在data存储区
compact模式用于将所有未指明存储区的变量均保存在pdata存储区
Large模式用于将所有未指明存储区的变量均保存在xdata存储区
例:#pragma small/*Default to small model*/
extern int calc(char i,int b)large reentrant;
extern int func(int i,float f)large;
extern void*tcp(char xdata*xp,int ndx)compact;
int mtest(int i,int y)/*Small model*/
{ return(i*y+y*i+func(-1,4.75)); }
int large_func(int i,int k)large/*Large model*/
{ return(mtest(i,k)+2); }
7、far far存储区是指许多新的8051扩展地址空间。CX51编译器使用通用的3个字节的指针来访问扩展内存空间。两个CX51的内存类型far and far const,访问扩展RAM空间的变量和扩展ROM空间中的常量。
R3 Value Memory
Type
Memory
Class
Address Range
0x00data/idata DATA/
IDATA
I:0x00-I:0xFF
0x01xdata XDATA X:0x0000-X:0xFFFF
0x02-0x
7F
far HDATA X:0x010000-X:0x7E0000 0x80unused
0x81-0x FD far const HCONST
C:0x800000-C:0xFC0000(far const is mapped into the
banked memory areas)
0xFE pdata XDATA one256-byte page in XDATA memory
0xFF code CODE/
CONST
C:0x0000-C:0xFFFF
8、interrupt C51使用interrupt m修饰符可将函数转化为中断函数m为中断向量优先级。
例:unsigned int interruptcnt;
unsigned char second;
void timer0(void)interrupt1using2
{ if(++interruptcnt==4000){/*count to4000*/
second++;/*second counter*/
interruptcnt=0;/*clear int counter*/
}
}
9、_task_与_priority_CX51编译器使用_task_和_priority_支持RTX51Full和RTX51 Tiny的实时多任务操作系统。
_task_关键字指定一个函数是一个实时的任务。
_priority_关键字指定任务的优先级。
例:void func(void)_task_num_priority_pri
10、reentrant重入函数修饰符。所谓重入函数就是允许被嵌套调用的函数。
通常情况下,C51的功能不能被嵌套调用。因为,函数参数和局部变量都存储在固定的内存位置。函数的递归调用使用相同的内存位置。而且,在这种情况下,参数和数据得到损坏。例:int calc(char i,int b)reentrant
{ int x; x=table[i]; return(x*b); }
11、using定义函数时用来选择函数使用寄存器的分组组
例:void rb_function(void)using3
{ . . . }
藏在水中的人
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论