历史上的今天
返回首页

历史上的今天

今天是:2025年04月21日(星期一)

正在发生

2021年04月21日 | Keil模式设置和编程的事项

2021-04-21 来源:eefocus

因为大多数扩展功能都是直接针对8051系列CPU硬件的。大致有以下8类:


8051存储类型及存储区域 , 存储模式 , 存储器类型声明 , 变量类型声明 , 位变量与位寻址 ,特殊功能寄存器(SFR) ,C51指针


l 函数属性


具体说明如下(8031为缺省CPU)。


第一节KeilC51扩展关键字


C51 V4.0版本有以下扩展关键字(共19个):


_at_ idata sfr16 alien interrupt small


bdata large _task_ Code bit pdata


using 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~0FFFFH


pdata:能访问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=0xCD


sbit:位寻址,如sbit EA="0xAF";指定第0xAF位为EA,即中断允许


还可以有如下定义方法:


sbit 0V=PSW^2;(定义0V为PSW的第2位)


sbit 0V=0XDO^2;(同上)


或bit 0V-=0xD2(同上)。


第三节 存储模式


存储模式决定了没有明确指定存储类型的变量,函数参数等的缺省存储区域,共三种:


1. Small模式


所有缺省变量参数均装入内部RAM,优点是访问速度快,缺点是空间有限,只适用于小程序。


small模式下,再入函数的堆栈是设在idata中的


2. Compact模式


所有缺省变量均位于外部RAM区的一页(256Bytes),具体哪一页可由P2口指定,在STARTUP.A51文件中说明,也可用pdata指定,优点是空间较Small为宽裕速度较Small慢,较large要快,是一种中间状态。


compact模式下,再入函数堆栈是设在pdata中的


3. large模式


所有缺省变量可放在多达64KB的外部RAM区,优点是空间大,可存变量多,缺点是速度较慢。


提示:存储模式在C51编译器选项中选择。


第四节 存储类型声明


变量或参数的存储类型可由存储模式指定缺省类型,也可由关键字直接声明指定。各类型分别用:code,data,idata,xdata,pdata说明,例:


data uar1


char code array[ ]=“hello!”;


unsigned char xdata arr[10][4][4];


第五节 变量或数据类型


C51提供以下几种扩展数据类型:


bit 位变量值为0或1


sbit 从字节中定义的位变量 0或1


sfr sfr字节地址 0~255


sfr16 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. 指针转换


即指针在上两种类型之间转化:


l 当基于存储器的指针作为一个实参传递给需要一般指针的函数时,指针自动转化。


l 如果不说明外部函数原形,基于存储器的指针自动转化为一般指针,导致错误,因而请用“#include”说明所有函数原形。


l 可以强行改变指针类型。


第八节 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指定。


推荐阅读

史海拾趣

EM Microelectronic-Marin SA公司的发展小趣事

随着RFID技术的广泛应用,制定统一的国际标准变得尤为重要。EM Microelectronic-Marin积极参与了RFID标准制定机构的讨论,与其他企业一起提交了RFID标准建议。这一过程中,公司不断推动技术创新,力求在标准制定中占据有利地位。虽然最终的标准之争结果未知,但EM Microelectronic-Marin的技术实力和创新精神得到了业界的广泛认可。

ETC公司的发展小趣事

北京速通科技有限公司(以下简称速通科技)作为ETC行业的领军企业,其创立之初就专注于电子不停车收费系统(ETC)的研发与应用。随着国内交通拥堵问题的日益严重,速通科技看到了ETC系统在未来交通管理中的重要地位。公司组建了一支由行业专家和技术精英组成的团队,开始了ETC技术的探索之路。

Hamamatsu公司的发展小趣事

速通科技始终将用户体验放在首位。公司不断完善ETC系统的服务功能,提高了系统的稳定性和易用性。同时,速通科技还建立了完善的客户服务体系,为用户提供24小时不间断的在线客服支持。这些举措大大提高了用户对ETC系统的满意度和信任度。

DESCO公司的发展小趣事

作为一家有社会责任感的企业,DESCO公司始终关注环境保护和可持续发展。公司采用环保材料和生产工艺,减少生产过程中的污染排放。同时,DESCO还积极参与社会公益活动,为当地社区和弱势群体提供帮助和支持。这些举措赢得了社会各界的广泛赞誉和认可。

BERGQUIST公司的发展小趣事

面对日益严峻的环境问题和可持续发展的挑战,BERGQUIST公司始终坚持绿色发展的理念。公司不断投入研发力量,开发环保型热管理材料和生产工艺。同时,公司还积极推广节能减排技术,努力降低生产过程中的能耗和排放。这些举措不仅符合社会发展趋势,也为公司的可持续发展提供了有力保障。

这五个故事从不同角度展示了BERGQUIST公司在电子行业中的发展历程和成就,体现了公司不断创新、追求卓越的精神。这些事实性的描述旨在客观呈现BERGQUIST公司的历史与现状,不含任何褒贬之意。

Goldstar Electron Co Ltd公司的发展小趣事

面对日益严峻的环境问题和可持续发展的挑战,BERGQUIST公司始终坚持绿色发展的理念。公司不断投入研发力量,开发环保型热管理材料和生产工艺。同时,公司还积极推广节能减排技术,努力降低生产过程中的能耗和排放。这些举措不仅符合社会发展趋势,也为公司的可持续发展提供了有力保障。

这五个故事从不同角度展示了BERGQUIST公司在电子行业中的发展历程和成就,体现了公司不断创新、追求卓越的精神。这些事实性的描述旨在客观呈现BERGQUIST公司的历史与现状,不含任何褒贬之意。

问答坊 | AI 解惑

基于mega8的简易循迹小车

放假啦,回到家了。上学期遗留了一些问题。 上学期做了一个基于mega8的简易循迹小车,循黑线行驶。车模是淘宝里购买的,控制电路是自己做的。做出来的效果很不好,虽然能沿黑线行驶,但是摇头晃脑的。 大概原理: 采用4对红外对管识别黑线,得到 ...…

查看全部问答>

再发一个2008年英特尔杯嵌入式邀请赛的作品

本帖最后由 paulhyde 于 2014-9-15 09:01 编辑 2008年英特尔杯大学生电子设计竞赛—嵌入式系统专题邀请赛,一等奖作品:   参赛学校 杭州电子科技大学   指导教师 申兴发   参赛队员 张斌吴积冰陈宁   作品题目   (中英文对照)嵌 ...…

查看全部问答>

【藏书阁】8051 单片机软件设计的艺术

目录: 第1章 声音基础 1-1 Beep无自变量 1-2 Beep自变量X1 1-3 Beep自变量X2 1-4 Beep自变量X3 1-5 Beep定时器 1-6 音乐演奏基础 第2章 单一程序音乐演奏 2-1 if指令 2-2 if宏定义Speaker 2-3 for循环 2-4 do...while循环 2-5 whil ...…

查看全部问答>

变压器设计大师 3.0

变压器是常用的一种器件,本软件可以帮助您快速的计算出变压器的各项参数。同时还附带大量的资料以便您在设计变压器时查询。 与同类软件相比具有许多优点: 1、支持初级绕组多种输入电压。 2、支持次级绕组多绕组、多种电压输出。 3、支持 ...…

查看全部问答>

电梯控制器

想用VHDL语言编一个二层的电梯控制器。要求:一,二极管指示灯指示上升和下降。二,用数码管指示所在层数。…

查看全部问答>

LINUX 系统时间被更改后是否有Signal发生

使用alarm()设置定时器, 若系统时间被更改会存在一系列定时时间从新计算的问题。 是否存在这样的Signal, 被用来通知“LINUX系统时间被更改”。 【另】 当然定时器,可以通过设置实时监视系统时间来实现。 但这样需要在后台运行一个进程来监 ...…

查看全部问答>

求助:无线芯片收发调试的资料

求助:无线芯片收发调试的资料 我做毕业设计,有无线收发这一块。我准备用无线遥控的方式来实现。发送端用pt2262编码,接收端用pt2272解码。不过无线收发还需要调试的,哪位大侠有关于无线收发调试方面的资料请发送到我邮箱:chong.zucc@yahoo.com ...…

查看全部问答>

请教修改.RC文件 或者 做过开机密码问题的高手!

各位:    我的屏是3.5的。在控制面板中设置了密码后,开机不能完全显示输入密码的SHELL (有个输入密码的编辑框显示不出来) 资源在PUBLIC\\COMMON\\OAK\\DRIVERS\\STARTUI下 可是我修改了之后,设置密码再开机,原来的界面都没 ...…

查看全部问答>

驱动是不是都指pc机上的编程?

毕业设计要做usb驱动 但是这个驱动是指的什么呢? pc机上的编程 还是下位机上的编程?…

查看全部问答>

C8051F310在系统编程Flash

C8051F310在系统编程Flash 用单片机,有些数据设置后需要掉电不丢失,一般首先想到的是使用eeprom,比如AVR中的Atmega系列有内部eeprom,也可以外接AT24C01之类的eeprom。这里介绍另外一种参数保存方法,Silicon Laboratories的C8051F系列,其内部 ...…

查看全部问答>