CX51变量和运算符

本文围绕CX51展开,介绍了CX51变量和运算符,提及KEIL uVision2单片机c语言编译器支持的数据类型。阐述了CX51存储类型,包括8051系列单片机的四个存储空间及数据存储器分区。还说明了CX51变量与运算符中新增变量类型,以及不同存储区特点,最后对比了C51与标准C语言的差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

CX51变量和运算符

每写一个程序,总离不开数据的应用,在学习 c51 语言的过程中掌握理解数据类型也是 很关键的。先看表 3-1,表中列出了 KEIL uVision2 单片机c语言编译器所支持的数据类型。

在标准C语言中基本的数据类型为 char,int,short,long,float 和 double,而在C51编译器中int 和 short 相同,float 和 double 相同,这里就不列出说明了。下面来看看它们的具体定 义:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4AYoyKTj-1606314629759)(C:\Users\JamesBin\Desktop\51单片机系列教程\图片\20160921225959808.png)]

CX51存储类型

8051 系列单片机在物理上有四个存储空间:

1,片内程序存储空间;

2,片外程序存储空间;

3,片内数据存储空间;

4,片外数据存储空间。

先讲数据存储器。大家都知道8051单片机数据存储器可划分为两大区域:00H~7FH为片内低128字节RAM区;80H~FFH 为特殊功能寄存器区(SFR)。地址为00H~7FH的低128字节片内RAM区又可划分为三个区域:

A、通用寄存器区:地址(00H~1FH)通用寄存器区由4个寄存器组成:0组(00H07H),1组(08H0FH),2组(10H17H),3组(18H1FH),每个寄存器组含有8个通用寄存器:R0,R1,R2,R3,R4,R5,R6,R7,共有32个通用寄存器。

B、可位寻址区:8051系列单片机RAM的可位寻址区时字节地址位20H~2FH的16字节单元,共128位。

C、用户RAM区:8051系列单片机片内RAM的用户RAM区地址位30H~7FH。堆栈也可以设置在这里。

CX51变量与运算符

bit 、 sfr 、sfr16 和sbit是Keil C51中新增的变量类型。

  1. bit用来定义位变量,值只能是0或1。位变量位于8051单片机内部RAM位寻址区(20H~2FH),共为16字节,最多可定义128个位变量。
  2. sfr用于定义特殊功能寄存器变量。该变量存储在片内的特殊功能寄存器存储区中,用来对特殊功能寄存器进行读写操作。
  3. sfr16也用于定义特殊功能寄存器,所不同的是它用于操作占两个字节的特殊功能寄存器。
  4. sbit用于定义特殊功能寄存器位变量,用来对特殊功能寄存器的可位寻址位进行读写操作。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HujtINRC-1606314629761)(C:\Users\JamesBin\Desktop\51单片机系列教程\图片\20160921230003996.png)]

1、片内储存区

  • data将变量存储在片内可直接寻址的数据存储器DATA区中。DATA区位于片内RAM的低128字节(Ox00~~0X7F)。

使用data存储模式,目标代码中对变量的访问速度最快,把经常使用的变量放在DATA区可提高程序运行速度。
若定义i为存储类型为data的无符号字符型数据,可声明为:

若定义i为存储类型为data的无符号字符型数据,可声明为:unsigned char data i

  • bdata用于将变量定义在数据存储器可位寻址的BDATA区,允许位与字节混合访问。

    BDATA区位于单片机内部RAM字节地址Ox20~Ox2F的16个字节中,每个字节8位,共计16x8=128个可寻址位。例如如下声明后可用位变量value0访问字节value的0位:

  • idata将变量存储在片内间接寻址的数据存储区IDATA区中。IDATA区使用指针来进行寻址和访问。

    51内核单片机RAM仅有128个字节,因此无间接寻址数据存储器区,idata与jdata无区别。52内核单片机RAM有256个字节,当片内128字节的直接寻址数据存储区不够用时,可以使用128字节间接寻址数据存储区,访问速度较data慢一些。

2、片外储存区

  • xdata将变量存储在片外数据存储器中,采用16位地址,可以访问外部数据存储区64KB内的任何地址。

  • pdata将变量存储在片外数据存储器中的第一页(地址0OH~FFH)中,存储空间为256字节。对PDATA区寻址,只需要装入8位地址,而对XDATA区寻址要装入16位地址,因此对PDATA区的寻址要比对XDATA区寻址快。

    pdata和xdata存储类型的变量由于需要访问外存,访问速度最慢,应尽量减少对变量的访问次数。这两种类型适合保存原始数据或最终结果,需要频繁访问的中间结果应尽量不用或少用。

3、程序存储器ROM

code将变量存储在程序存储器中,变量只能读不能写,因此适合存储常量或查表类的数组数据,不能用于存储程序运行过程中需要修改的变量。如果想改变变量值,只能在程序中修改后重新将程序烧写进ROM中。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vQ0A5Lnt-1606314629762)(C:\Users\JamesBin\Desktop\51单片机系列教程\图片\timg.jpg)]

C51的语法规定、程序结构及程序设计方法都与标准的C语言程序设计相同,但C51程序与标准的C程序在以下几个方面不一样:

  • C51中定义的库函数和标准C语言定义的库函数不同。标准的C语言定义的库函数是按通用微型计算机来定义的,而C51中的库函数是按51单片机相应情况来定义的;

  • C51中的数据类型与标准C的数据类型也有一定的区别,在C51中还增加了几种针对51单片机特有的数据类型;

  • C51变量的存储模式与标准C中变量的存储模式不一样,C51中变量的存储模式是与51单片机的存储器紧密相关;

  • C51与标准C的输入输出处理不一样,C51中的输入输出是通过51串行口来完成的,输入输出指令执行前必须要对串行口进行初始化;

  • C51与标准C在函数使用方面也有一定的区别,C51中有专门的中断函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值