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

{...}

KeilC51基本关键字相关推荐

  1. 关于keil-C51中code、idata以及xdata

    对了,我最近开通了微信公众号,计划是两边会同步更新,并逐步的会将博客上的文章同步至公众号中. 感兴趣的朋友可以扫描下方的二维码或者搜索"里先森sements"来关注,欢迎来玩~! ...

  2. 用中颖SH79F3283进行项目中遇到的一些问题

    中颖的文档写的感觉不是太清楚,以下是我个人整理的一些比较坑的地方. 一.烧录 烧录必须得买他家的,一般的jtag不能用,一个三百多块钱呢.其次烧录要么用keil4要么用Prowrite这个官方自带的烧 ...

  3. 51单片机学习过程中的常见疑惑

    一.什么是51单片机?AT89C51.STC89C51.BF7615BM28这些都是51单片机吗? 答:51单片机是兼容Intel 8051指令系统的单片机的总称,与具体生产厂商和单片机型号没有直接关 ...

  4. keil编译器的优化问题 关键字volatile的使用

    void main(void) {unsigned int y=0x1314; unsigned char yh=0,yl=0;initcpu();yl=y%256;//取余数得低8位yh=y/256 ...

  5. c语言中external,static关键字用法

    static用法: 在C中,static主要定义全局静态变量.定义局部静态变量.定义静态函数. 1.定义全局静态变量:在全局变量前面加上关键字static,该全局变量变成了全局静态变量.全局静态变量有 ...

  6. java中实现具有传递性吗_Java中volatile关键字详解,jvm内存模型,原子性、可见性、有序性...

    一.Java内存模型 想要理解volatile为什么能确保可见性,就要先理解Java中的内存模型是什么样的. Java内存模型规定了所有的变量都存储在主内存中.每条线程中还有自己的工作内存,线程的工作 ...

  7. volatile关键字之全面深度剖析

    引言 volatile这个关键字可能很多朋友都听说过,或许也都用过.在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果.在Java 5之后,volatile关键字 ...

  8. mysql屏蔽关键字实现方法_PHP屏蔽过滤指定关键字的方法

    本文实例讲述了PHP屏蔽过滤指定关键字的方法.分享给大家供大家参考.具体分析如下: 实现思路: 一.把关键字专门写在一个文本文件里,每行一个,数量不限,有多少写多少. 二.PHP读取关键字文本,存入一 ...

  9. Java 静态变量,静态方法,静态常量(java static 关键字)

    Java 静态变量,静态方法,静态常量  就是变量 ,方法,常量前面添加了static 关键字 为什么要使用静态的呢 有时候在处理问题时会需要两个类在同一个内存区域共享一个数据, 不如现在 Main ...

  10. Java this 关键字使用

    this 引用就是本类的一个对象 理解这句话看下面一段代码 package me; public class Me {String name; //成员变量int age;public Me(Stri ...

最新文章

  1. postman test 脚本
  2. 能迂回,会绕路的开源游戏AI:解决怪物撞墙卡死角
  3. cdh 添加jar包_使用maven下载cdh版本的大数据jar包
  4. 什么是OpenCL?面向FPGA的OpenCL有何优点?
  5. 【MySQL性能优化】数据库设计三大范式(二)
  6. 理解Promise规范
  7. mysql join越多性能_mysqljoin的原理和优化
  8. redhat下升级gcc编译器
  9. wordpress上传文件报错的解决方法(413 Request Entity Too Large、超过upload_max_filesize文件中定义的php.ini值)
  10. 博客也是网络赚钱的有利工具
  11. 关于判断单峰数组的几种方法
  12. Java Swing写的支持合并单元格的JTable
  13. android手机如何设置提高网速,安卓手机网速慢怎么办 安卓手机网速慢解决办法【详解】...
  14. 新手也可以制作出大片的效果——Movavi Video Editor 15 Plus Mac
  15. python拼音名_Python汉字转换成拼音
  16. 常用的Java Web框架简介
  17. 自制AVA数据集工具/slowfast模型训练数据集制作
  18. Autosar AP – 概要
  19. 诗经 - 小雅 - 杕杜
  20. 【程序】STM32F407VE单片机通过FSMC驱动Ilitek ILI9325液晶屏以及XPT2046触控芯片

热门文章

  1. 欢雀HR员工管理系统,轻松搞定员工档案管理!
  2. python 档案管理系统_用Python编写人才档案管理系统?
  3. Spring Boot Shiro原理系列
  4. 颈椎前路caspar撑开器_Mobi-C人工颈椎间盘在颈前路手术的临床应用
  5. 世界银行的WDI世界发展指标数据EXCEL版本(1960-2017年)
  6. css3ps插件,CSS3Ps(PS图层转换插件) V1.0 官方版
  7. 华为存储iscsi配置_使用华为存储配置ISCSI存储方法和iSCSI建立连接提示目标错误...
  8. pointcloud90度分割+球面投影(pcl+ros+python)
  9. Matlab/simulink 2018a利用 powergui 进行FFT分析(傅里叶分析谐波)
  10. php 过滤微信符号昵称,PHP处理微信昵称特殊符号过滤的方法