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


关键字:单片机 引用地址:8051单片机数据说明

上一篇:单片机的指令系统和寻址方式介绍
下一篇:C8051F020在LED显示控制系统中的应用

推荐阅读最新更新时间:2024-11-13 10:36

芯圣电子超值型8位触摸单片机——HC89F30XC系列
HC89F30XC系列是芯圣电子推出的超值型8位触摸单片机,内置增强型8051内核,拥有16K的ROM、256Bytes的IRAM以及512Bytes的XRAM;HC89F30XC系列拥有丰富的外设资源,包括4个16位的定时/计数器、1组12位带死区控制互补与1组8位的PWM、最高16+2 路12位的ADC、1个SPI、1个UART以及1个IIC;HC89F30XC全系列支持引脚映射,并配备完整的触摸库。 以下为该系列目前在售的三款型号及对应参数: HC89F30XC全系列拥有多种封装,资源丰富,具有高性价比的优势,可以广泛应用于市面上消费类产品,例如空气炸锅、饭煲、取暖器、空气净化器等。
[单片机]
芯圣电子超值型8位触摸<font color='red'>单片机</font>——HC89F30XC系列
电器设备为什么都要使用单片机
今天,首先学习单片机的基本构成和工作原理,以及外围功能电路,然后,挑战一个实际单片机的运行。 单片机是控制电子产品的大脑 现如今,我们生活中的许多电器都使用了单片机。例如:手机、电视机、冰箱、洗衣机、以及按下开关,LED就闪烁的儿童玩具。那么,单片机在这些电器中究竟做了些什么呢? 单片机是这些电器动作的关键,是指挥硬件运行的。例如:接收按钮或按键的输入信号,按照事先编好的程序,指挥马达和LCD的外围功能电路动作。 那么,单片机是如何构成的呢?如图1所示。 单片机是由CPU、内存、外围功能等部分组成的。如果将单片机比作人,那么CPU是负责思考的,内存是负责记忆的,外围功能相当于视觉的感官系统及控制手脚动作的神经系统。
[单片机]
电器设备为什么都要使用<font color='red'>单片机</font>
单片机PID调速控制直流无刷电机附部分源码
具备知识,stm32基础,了解无刷直流电机原理,pid控制原理 工具: 无刷直流电机:12v电源驱动,50HZ,占空比为5%的pwm波2秒以上解锁电调,再将占空比改为6%,则电机正常运行,改变占空比到9%接近全速转动。 。(在网上摸索了一上午此信息,因为没有直接参考资料,标签都没有) 电调:电调接收了pwm信号,根据信号控制电机的电压,由此控制转速。 12v电源:供电 stm32单片机:输出pwm波 st-link调试模块:调试用,主要调pwm波和pid参数 usb转串口模块:可获取单片机打印的串口信息(可有可无) 霍尔测速传感器:测转速,5v供电,信号线为方波,捕获单位时间方波个数可测转速,由于其他条件一定,方波频率与转速为线性
[单片机]
单片机无线模块解码(可解2262 1527编码芯片)
无线模块解码程序(可解2262 1527编码芯片) 电路原理图如下: Altium Designer画的PCB图如下:(51hei附件中可下载工程文件): 全频扫描万能振动器 或称:万能无线接收机 型号:QY-1083 全频扫描万能振动器 简单介绍: 该接收机体积小,接收信号稳定 技术指标: 1.工作电压:3.7VDC 2.工作电流:≤100mA 3.谐振方式: 4.调制方式:ASK/OOK 5.接收频率: 从250MHz----450MHz内, 6.频率误差: ±75kHz 7.接收距离:10-30M 8.传输速率:≤10Kbps 9.体积:60*65*15MM 10:电源:有开关 采用扫描方式搜索信号,搜索频率宽
[单片机]
<font color='red'>单片机</font>无线模块解码(可解2262 1527编码芯片)
单片机 模糊控制 算法 c语言
1 #include reg52.h 2 //------------------------------------------------------------------------------------ 3 // 定义差距输入常量 4 #define GAP_ZERO 0x00 5 #define GAP_VSMALL 0x01 6 #define GAP_SMALL 0x02 7 #define GAP_MEDIUM 0x03 8 #define GAP_BIG 0x04 9 // 定义控制输出常量 10 #define TURN_ZERO 0x80 11 #define TU
[单片机]
单片机 C语音开发 sbit使用方法
1.bit和sbit都是C51扩展的变量类型。 bit和int char之类的差不多,只不过char=8位, bit=1位而已。都是变量,编译器在编译过程中分配地址。除非你指定,否则这个地址是随机的。这个地址是整个可寻址空间,RAM+FLASH+扩展空间。bit只有0和1两种值,意义有点像Windows下VC中的BOOL。 sbit是对应可位寻址空间的一个位,可位寻址区:20H~2FH。一旦用了sbi xxx = REGE^6这样的定义,这个sbit量就确定地址了。sbit大部分是用在寄存器中的,方便对寄存器的某位进行操作的。 2.bit位标量 bit位标量是C51编译器的一种扩充数据类型,利用它可定义
[单片机]
采用单片机C8051F047和H桥组件LMD18200T实现巡线机器人控制系统设计
1.引言 高压输及杆塔附件长期暴露在野外,因受到持续的机械张力、电气闪络、材料老化的影响而产生断股、磨损、腐蚀等损伤,如不及时修复更换,原本微小的和缺陷就可能扩大,最终导致严重事故。因此,电力公司需要定期对线路设备进行巡检,及时发现早期损伤和缺陷并加以评估,根据评估结果安排必要的维护和修复,从而确保供电的安全可靠性。传统的人工巡检方法不仅工作量大而且条件艰苦,特别是对于山区和大江大河等的输电线路巡检存在很大困难,甚至一些巡检项目靠常规方法都难以完成。因此,采用机器人自动巡线成为保障高压输电线安全运行的一种必要手段。 高压输电线路巡线机器人属于特种机器人的研究范畴,主要完成高压供电线缆的无损探伤、悬垂绝缘子绝缘特性检测、输
[机器人]
软糯Q弹的MCU,你见过吗
树莓派的板子为什么一直那么受欢迎?因为它开源,所以具备非常强的灵活性和可玩性。 最近,国外就有一个众筹项目火了,这个项目就把RP2040的板子替换成了柔性板,让它能够安装在任何狭小的空间或者是弯曲的外壳内。 柔性的RP2040 在国外很火的平台KickStarter上,TOP Gadgets发起了FlexiPi这一个众筹项目。根据介绍,FlexiPi在紧凑的空间融合了柔性和性能,它基于RP2040构建,为开发人员、制造商和爱好者提供了无与伦比的灵活性。 从外观来看,FlexiPi外形尺寸与最初的Pico以及大多数规格非常接近。整体与Pico有一些变化,包括一个可编程的RGB LED和一个 USB Type-C 端口
[单片机]
软糯Q弹的<font color='red'>MCU</font>,你见过吗
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved