当前位置:首页 > 单片机 > 单片机
[导读] 深入理解并应用C51对标准ANSIC的扩展是学习C51的关键之一。因为大多数扩展功能都是直接针对8051系列CPU硬件的。大致有以下8 类: 8051存储类型及存储区域l;存储模式l存储器类型声明l变量类型声明l 位变

深入理解并应用C51对标准ANSIC的扩展是学习C51的关键之一。因为大多数扩展功能都是直接针对8051系列CPU硬件的。大致有以下8 类: 8051存储类型及存储区域l;存储模式l存储器类型声明l变量类型声明l 位变量与位寻址l特殊功能寄存器(SFR)l C51指针l函数属性具体说明如下(8031为缺省CPU)。
第一节KeilC51扩展关键字
C51 V4.0版本有以下扩展关键字(共19个):_at_ ;idata;sfr16;alien;interrupt;smallbdata;large;_task_;Code;bit;pdatausing;reentrant xdata;comPACt sbit;data; sfr
第二节 内存区域(Memory Areas):
1. Pragram Area:
由Code说明可有多达64kBytes的程序存储器
2. Internal Data Memory
内部数据存储器可用以下关键字说明:data:直接寻址区,为内部RAM的低128 字节00H~7FH,idata:间接寻址区,包括整个内部RAM区 00H~FFH,bdata:可位寻址区,20H~2FH
3. External Data Memory
外部RAM视使用情况可由以下关键字标识:xdata:可指定多达64KB的外部直接寻址区,地址范围0000H~0FFFFHpdata:能访问1页(25bBytes)的外部RAM,主要用于紧凑模式(Compact Model)。
4. Speciac Function Register Memory
8051提供128Bytes的SFR寻址区,这区域可位寻址、字节寻址或字寻址,用以控制定时器、计数器、串口、I/O及其它部件,可由以下几种关键字说明:sfr:字节寻址 比如 sfr P0=0x80;为PO口地址为80H,=;后H~FFH之间的常数。sfr16:字寻址,如sfr16 T2=0xCC;指定Timer2口地址T2L=0xcc T2H=0xCDsbit:位寻址,如sbit EA=0xAF;指定第0xAF位为EA,即中断允许还可以有如下定义方法:sbit 0V=PSW^2;(定义0V为PSW的第2位)sbit0V=0XDO^2;(同上)或bit 0V-=0xD2(同上)。
第三节 存储模式
存储模式决定了没有明确指定存储类型的变量,函数参数等的缺省存储区域,共三种:
1. Small模式

所有缺省变量参数均装入内部RAM,优点是访问速度快,缺点是空间有限,只适用于小程序。
2. Compact模式
所有缺省变量均位于外部RAM区的一页(256Bytes),具体哪一页可由P2口指定,在STARTUP.A51文件中说明,也可用pdata指定,优点是空间较Small为宽裕速度较Small慢,较large要快,是一种中间状态。
3. large模式
所有缺省变量可放在多达64KB的外部RAM区,优点是空间大,可存变量多,缺点是速度较慢。提示:存储模式在C51编译器选项中选择。
第四节 存储类型声明
变量或参数的存储类型可由存储模式指定缺省类型,也可由关键字直接声明指定。各类型分别用:code,data,idata,xdata,pdata说明,例:data uar1char code array[ ]=“hello!”;unsigned char xdata arr[10][4][4];
第五节 变量或数据类型

C51提供以下几种扩展数据类型:bit 位变量值为0或1sbit 从字节中定义的位变量 0或1sfr sfr字节地址 0~255sfr16 sfr字地址 0~65535其余数据类型如:char,enum,short,int,long,float等与ANSI C相同。
第六节 位变量与声明
1. bit型变量
bit型变量可用变量类型,函数声明、函数返回值等,存贮于内部RAM20H~2FH。注意:(1) 用#pragma dISAble说明函数和用“usign”指定的函数,不能返回bit值。(2) 一个bit变量不能声明为指针,如bit *ptr;是错误的(3) 不能有bit数组如:bit arr[5];错误。
2. 可位寻址区说明20H-2FH
可作如下定义:int bdata i;char bdata arr[3],然后:sbit bito=in0;sbit bit15=I^15;sbit arr07=arr[0]^7;sbit arr15=arr[i]^7;
第七节 Keil C51指针>
C51支持一般指针(Generic Pointer)和存储器指针(Memory_Specific Pointer).
1. 一般指针
一般指针的声明和使用均与标准C相同,不过同时还可以说明指针的存储类型,例如:long * state;为一个指向long型整数的指针,而state本身则依存储模式存放。char * xdata ptr;ptr为一个指向char数据的指针,而ptr本身放于外部RAM区,以上的long,char等指针指向的数据可存放于任何存储器中。一般指针本身用3个字节存放,分别为存储器类型,高位偏移,低位偏移量。
2. 存储器指针
基于存储器的指针说明时即指定了存贮类型,例如:char data * str;str指向data区中char型数据int xdata * pow; pow指向外部RAM的int型整数。这种指针存放时,只需一个字节或2个字节就够了,因为只需存放偏移量。
3. 指针转换
即指针在上两种类型之间转化:当基于存储器的指针作为一个实参传递给需要一般指针的函数时,指针自动转化。如果不说明外部函数原形,基于存储器的指针自动转化为一般指针,导致错误,因而请用“#include”说明所有函数原形。可以强行改变指针类型。
第八节 Keil C51函数
C51函数声明对ANSI C作了扩展,具体包括:
1. 中断函数声明中断声明方法如下:void serial_ISR () interrupt 4 [using 1]{}为提高代码的容错能力,在没用到的中断入口处生成iret语句,定义没用到的中断。void extern0_ISR() interrupt 0{}void timer0_ISR () interrupt 1{}void extern1_ISR() interrupt 2{}void timer1_ISR () interrupt 3{}void serial_ISR () interrupt 4{}
2. 通用存储工作区
3. 选通用存储工作区由using x声明,见上例
4. 指定存储模式

由small compact 及large说明,例如:void fun1(void) small { }提示:small说明的函数内部变量全部使用内部RAM。关键的经常性的耗时的地方可以这样声明,以提高运行速度。
5. #pragma disable

在函数前声明,只对一个函数有效。该函数调用过程中将不可被中断。
6. 递归或可重入函数指定
在主程序和中断中都可调用的函数,容易产生问题。因为51和PC不同,PC使用堆栈传递参数,且静态变量以外的内部变量都在堆栈中;而51一般使用寄存器传递参数,内部变量一般在RAM中,函数重入时会破坏上次调用的数据。可以用以下两种方法解决函数重入:a、在相应的函数前使用前述“#pragma disable”声明,即只允许主程序或中断之一调用该函数;b、将该函数说明为可重入的。如下:void func(param...) reentrant;KeilC51编译后将生成一个可重入变量堆栈,然后就可以模拟通过堆栈传递变量的方法。由于一般可重入函数由主程序和中断调用,所以通常中断使用与主程序不同的R寄存器组。另外,对可重入函数,在相应的函数前面加上开关#pragma noaregs”,以禁止编译器使用绝对寄存器寻址,可生成不依赖于寄存器组的代码。
7. 指定PL/M-51函数
由alien指定。


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

嵌入式开发作为一种专业且技术密集型的领域,涵盖了从硬件底层驱动、中间件到应用层软件开发等多个层面的工作,其所需的工具种类繁多,各有针对性,旨在提升开发效率、保证代码质量以及简化调试过程。

关键字: 嵌入式开发 keil

随着无人机的普及,越来越多的人开始使用无人机进行各种飞行任务,但是不当的使用会给公共安全和社会秩序带来潜在的风险,因此对于无人机使用的规定也变得越来越严格。本文将介绍无人机使用的标准和规定,以帮助大家正确使用无人机。

关键字: 无人机 标准 UAV

智能家居作为新兴领域,逐渐走入了人们的生活。智能家居系统是利用先进的计算机技术、网络通讯技术、智能云端控制、综合布线技术、医疗电子技术依照人体工程学原理,融合个性需求,将与家居生活有关的各个子系统如安防、灯光控制、窗帘控...

关键字: 智能家居 标准

之后新建新的工程,添加.a文件就可以使用了,当然也可以使用keil来添加,但是keil默认的是用.lab,需要自己配置一下文件属性,改为lib文件即可。一半release sdk的时候用这种方式很关键的,毕竟自己的核心代...

关键字: keil 文件属性 lib文件

因为5G涵盖内容更丰富,上述三个5G专利池侧重点也不同:Avanci侧重汽车和物联网;Sisvel侧重手机等终端领域;Alium侧重无线接入网RAN。

关键字: 5G 标准 必要专利

摘要:近年来随着国家经济快速发展,我国高压电力线路的覆盖面积也逐年增大。其中,林地高压电力线路是我国目前重点发展的电力工程项目之一,受到社会各界的广泛关注。基于此,现主要对林地高压电力线路绿色施工管理与环境保护现状进行了...

关键字: 绿色施工管理 环境保护 方法

摘要:电子产品在设计、实验、生产和运行过程中通常会有静电(ESD)释放,而静电的释放会对电子产品带来一定的干扰和危害,这些干扰和危害会对电子产品的正常工作产生一定的影响,甚至会损害电子产品的元件。因此,加强电子通信产品E...

关键字: 电子通信产品 ESD 防护设计 危害 方法

伺服驱动器的工作原理及伺服驱动器的常见接线方法

关键字: 驱动 方法

PLC学习笔记1 接触器的使用和接线

关键字: 接触器 方法

为了保证航天型号元器件的固有质量和使用质量满足航天工程的要求,需要制定一系列标准和文件,规范元器件的选择、采购和应用。这一系列标准和文件按照其内在联系形成的科学有机整体就是元器件标准体系。

关键字: 电子 标准
关闭
关闭