历史上的今天
返回首页

历史上的今天

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

正在发生

2021年04月20日 | 8051单片机数据说明

2021-04-20 来源:eefocus

深入理解并应用C51对标准ANSIC的扩展是学习C51的关键之一。因为大多数扩展功能都是直接针对8051系列CPU硬件的。


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


一、Keil C51扩展关键字


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,优点是访问速度快,缺点是空间有限,只适用于小程序。


2、Compact模式


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


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]


{


/* ISR */


}


为提高代码的容错能力,在没用到的中断入口处生成iret语句,定义没用到的中断。


/* define not used interrupt, so generate "IRET" in their entrance */


void extern0_ISR() interrupt 0{} /* not used */


void timer0_ISR () interrupt 1{} /* not used */


void extern1_ISR() interrupt 2{} /* not used */


void timer1_ISR () interrupt 3{} /* not used */


void serial_ISR () interrupt 4{} /* not used */


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指定。


推荐阅读

史海拾趣

AIC [Analog Intergrations Corporation]公司的发展小趣事
  1. 公司成立与初期发展:Analog Integrations Corporation(AIC)是一家总部位于台湾的半导体公司,专注于设计、制造和销售高性能模拟集成电路(IC)产品。公司成立于1996年,由一群拥有丰富经验的工程师共同创立。最初,AIC致力于为广泛的应用领域提供稳定可靠的模拟芯片解决方案,如消费电子、通信、工业控制等。

  2. 技术创新与产品发展:AIC在技术创新和产品研发方面投入了大量资源,不断推出具有竞争力的新产品。公司的产品涵盖了各种模拟IC产品系列,包括功率管理IC、放大器、比较器、数据转换器等。这些产品具有高性能、低功耗、小尺寸等特点,得到了广大客户的青睐。

  3. 全球市场拓展:随着公司技术和产品的不断成熟,AIC开始着眼于国际市场的拓展。公司积极参与国际电子展览和行业会议,与全球客户建立合作关系,拓展海外市场份额。通过建立销售代理商、设立海外办事处等方式,AIC在北美、欧洲、亚太等地区建立了稳固的销售网络。

  4. 质量管理与认证:AIC始终将产品质量视为企业发展的关键。公司严格遵循国际质量管理体系标准,建立了完善的质量管理体系。AIC的生产工艺和产品测试流程经过精心设计和严格监控,确保产品质量的稳定性和可靠性。此外,公司的产品经过了多项国际认证,包括ISO 9001质量管理体系认证、ISO 14001环境管理体系认证等。

  5. 社会责任与可持续发展:作为一家负责任的企业,AIC积极履行社会责任,关注环境保护和可持续发展。公司致力于降低能源消耗和减少废物排放,推动绿色生产和循环利用。此外,AIC积极参与社会公益活动,支持教育、健康、环保等多个领域的项目,为社会发展做出积极贡献。

FDI [Future Designs , Inc.]公司的发展小趣事

为了进一步扩大市场份额,FDI公司开始实施全球化战略。公司先后在欧美、亚洲等地设立了分支机构,并与当地企业建立了紧密的合作关系。同时,FDI还积极参与国际电子展会和论坛,与全球各地的行业精英交流学习。这些举措不仅提升了FDI的品牌影响力,也为其带来了更多的商业机会。

DMS Electronic Components, Inc公司的发展小趣事

DMS自创立之初,就致力于电子元器件的技术创新。公司投入大量研发资源,成功开发出一系列高性能、低成本的电子元器件,这些产品迅速在市场上获得了认可。随着技术的不断进步,DMS不断推出新产品,满足了客户日益增长的需求,逐渐在电子行业中树立了技术领先的形象。

协顺电子(Finecables)公司的发展小趣事

经过多年的发展,协顺电子已经成为中国电子连接器行业的领军企业之一。展望未来,公司将继续坚持“以顾客为中心”的经营理念,不断提升产品质量和技术水平;同时,公司也将积极探索新的业务领域和市场机会,推动公司的持续发展。此外,协顺电子还将加强与国际知名企业的合作与交流,共同推动电子行业的发展和进步。

请注意,以上故事框架仅供参考,具体的故事内容需要根据协顺电子(Finecables)公司的实际情况和发展历程进行创作和补充。

Cliff Electronic Components公司的发展小趣事

随着公司业务的不断拓展,协顺电子逐渐意识到品质和创新的重要性。公司投入大量资金引进先进的生产设备和技术人才,同时加强内部管理和质量控制。此外,协顺电子还积极与国内外知名企业和研究机构合作,共同研发新产品和新技术。这些举措使得公司的产品质量和技术水平得到了显著提升,也赢得了客户的广泛赞誉。

倍思特(BEST)公司的发展小趣事

经过多年的发展,协顺电子已经成为中国电子连接器行业的领军企业之一。展望未来,公司将继续坚持“以顾客为中心”的经营理念,不断提升产品质量和技术水平;同时,公司也将积极探索新的业务领域和市场机会,推动公司的持续发展。此外,协顺电子还将加强与国际知名企业的合作与交流,共同推动电子行业的发展和进步。

请注意,以上故事框架仅供参考,具体的故事内容需要根据协顺电子(Finecables)公司的实际情况和发展历程进行创作和补充。

问答坊 | AI 解惑

闭路监视系统的组成及雷害成因

1、电视监控系统(Closed Circait Televisiow,简称CCTV),一般由以下三部分组成:前端部分:主要由黑白(彩色)摄像机、镜头、云台、防护罩、支架等组成。传输部分:使用同轴电缆、电线、多芯线采取架空、地埋或沿墙敷设等方式传输视频、音频或控 ...…

查看全部问答>

中国的汽车电子方向

根据中国半导体协会的说法,截至2005年,中国车用芯片供应能力是零。那么,都是哪些因素把中国本土IC设计者挡在了圈外     中国汽车产量已接近600万辆,成为世界第三汽车大国,而且发展速度居世界第一。来自IC Insight的数据显示,全球 ...…

查看全部问答>

通过串口下载Vxworks Image

我想通过串口下载镜像文件到目标机,config,h文件配置如下: #define DEFAULT_BOOT_LINE \"tsfs(0,0)PC-12032051:/vxWorks 主机上只有一个串口,所以这就把打印信息输出到屏幕了,#define  INCLUDE_PC_CONSOLE     &nb ...…

查看全部问答>

想GDI全屏画图,(0,0)并不是屏幕坐标顶点,如何才能使得(0,0)代表屏幕坐标顶点?

WinCE下,我的MFC程序用GDI全屏画图,但是(0,0)并不是屏幕坐标顶点B,而是对应着title下面的区域的顶点A, B--------------------        title A-------------------- --------------------- Menu -------------------- ...…

查看全部问答>

我又来了..WINCE 6.0 LOGO和进度条的进度问题

问题1:我想修改我的WINCE 6.0系统的启动LOG,我将JPEG图片转化成.C文件后复制都SRC\\BOOTLOADER\\EBOOT中的   Bitmap.C中,const unsigned char ScreenBitmap[45880] = {}      其他都没改.编译后起来.发现图象LOG显示 ...…

查看全部问答>

U盘 固件程序格式化问题

在开发U盘固件程序的时候,不知道U盘在接收到格式化命令后,该有什么样的动作? 格式化的原理和过程是什么? 谢谢…

查看全部问答>

hdmi解码器绿边问题求助

最近在玩hdmi解码器,解码器连接液晶电视显示我采集好的视频源,在没有解码时,电视上出现的是颜色条,但是在颜色条的最右边会看到一条清楚的绿边,本人觉得这条绿边影响了视频的质量,而且从抓图来看,我的视频源是没有绿边的,这绿边可能只是相邻 ...…

查看全部问答>

电源设计小贴士 50:铝电解电容器常见缺陷的规避方法

因其低成本的特点,铝电解电容器一直都是电源的常用选择。但是,它们寿命有限,且易受高温和低温极端条件的影响。铝电解电容器在浸透电解液的纸片两面放置金属薄片。这种电解液会在电容器寿命期间蒸发,从而改变其电气属性。如果电容器失效,其会出 ...…

查看全部问答>