KeilC51基本关键字

本文详细介绍了KeilC51中由ANSI标准定义的32个基本关键字及KeilCx51扩展的关键字,包括数据类型、控制语句、存储类型和其他关键字,并深入解析了C51扩展关键字的功能与使用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

KeilC51基本关键字

 

一、由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

 

二、KeilCx51扩展的关键字:

•_at_  •alien  •bdata     •bit     •code   •compac     •data

•far   •idata  •interrupt  •large   •pdata   •_priority_   •reentrant

•sbit   •sfr    •sfr16     •small  •_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  xdata  0x8000*/

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);       /*callPL/Mfunc*/

}

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-addressablearray*/

4、bit位变量定义

格式:bit  name<[>=value<]>;

例:static  bit  done_flag=0;    /*bitvariable*/

5、sfr  sfr16  sbit  C51扩展数据类型

sfr  用于定义8位特殊功能寄存器

sfr16  用于定义16位特殊功能寄存器

sbit  用于定义可位寻址对象

例:sfr  P0=0x80;    /*Port-0, address  80h*/

sfr16  T2=0xCC;    /*Timer2: T2L  0CCh, T2H  0CDh*/

sbit  EA=0xAF;    //将位绝对地址赋給位变量

sfr  PSW=0xD0;  sbit  OV=PSW^2;  sbit  OV=0xD0^2;

int  bdata  ibase;    /*Bit-addressableint*/

sbit  mybit0=ibase^0;    /*bit0ofibase*/

6、compact,large,smallC51中变量的存储模式选择

Small模式用于将所有未指明存储区的变量均保存在data存储区

compact模式用于将所有未指明存储区的变量均保存在pdata存储区

Large模式用于将所有未指明存储区的变量均保存在xdata存储区

例:#pragmasmall    /*Defaulttosmallmodel*/

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)    /*Smallmodel*/

{ return(i*y+y*i+func(-1,4.75)); }

int  large_func(int  i,int  k)  large    /*Largemodel*/

{  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 0x00  data/idataDATA/IDATAI:0x00-I:0xFF

0x01xdataXDATAX:0x0000-X:0xFFFF

0x02-0x7Ffar HDATA X:0x010000-X:0x7E0000

0x80unused

0x81-0xFDfarconst HCONST

C:0x800000-C:0xFC0000(farconstismappedintothebankedmemoryareas)

0xFE pdataXDATAone256-bytepageinXDATAmemory

0xFF code CODE/ CONST C:0x0000-C:0xFFFF

8、interruptC51使用interruptm修饰符可将函数转化为中断函数m为中断向量优先级。

例:unsigned  int  interruptcnt;

unsigned  char  second;

void  timer0 (void) interrupt  1  using2{

if (++interruptcnt==4000) {         /*countto4000*/

second++;                     /*secondcounter*/

interruptcnt=0;                   /*clearintcounter*/

}

}

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)using 3

 {...}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值