本變數型態(Variable Type):

類 別

符號位元

位元組(bytes)

表 示 法

數 值 範 圍

整 數

2

int(short)

-32768~0~>32767

4

long

-2147483648~0~2147483647

2

unsigned int

0~65535

2

unsigned short

0~65535

4

unsigned long

0~4294967295

浮點數

4

float

10^ -38~0~10^38

8

double

10^ -308~0~10^308

字元

1 unsigned char 0->255

1

char

-128~0~127

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
變數宣告(Variable Declare):
 
1.定址的位元組(byte)變數宣告
2.不定址的位元組(byte)變數宣告
3.定址的位元(bit)變數宣告
4.不定址的位元(bit)變數宣告

code    讀取的程式記憶體(MOVC @A+DPTR)

data   直接定址存取的內部資料記憶體(MOV DIRECT,..)

idata  間接定址存取的內部資料記憶體(MOV @Rn,..)

bdata   可位元定址Bit Addressable)的內部記憶體(SETB 20H.1)

xdata   存取的外部資料記憶體( MOVX @DPTR )

pdata   存取的外部資料記憶體( MOVX @Rn   )

bit     不定址位元變數

sbit    定址的位元變數

 

 
 
1.定址的位元組(byte)變數宣告  
 符號 配置記憶體 C語言

組合語言(8051)

code  PM

//目前仍未完成定址能力

code const char msg[3]={1,2,3};

P1=msg[2];

;以 MOVC @A+DPTR 讀取的程式記憶體

MOV DPTR,#msg+02H

CLR A

MOVC A,@A+DPTR

MOV P1,A

 

data  DM

unsigned char data PortCTR _at_ 0x0013;

PortCTR=5;//地址值由設計者指定=0x13

;MOV DIRECT,#DATA直接存取的內部資料記憶體

MOV 13h,#5

 

idata  DM

unsigned char idata PortCTR _at_ 0x0013;

PortCTR=5;//地址值由設計者指定=0x13

 

;MOV @R0,#DATA間接存取的內部資料記憶體

MOV R0,#13h

MOV @R0,#05H

 

bdata  DM

unsigned char bdata flag _at_ 0x21;
sbit flag0=flag^0;
sfr P1=0x90; 
void main (void) 
{

unsigned char i;
   flag=0x12;//地址值由設計者指定=0x21
   flag0=1;//地址值由設計者指定=0x21

//的第 0bit

i=flag;
   P1=i;

while(1);

}

//P1=????       ans:P1=0x13

;可以位元定址(Bit Addressable)的內部

;記憶體

MOV 21h,#012H   ;flag=21h

SETB 21h.0                ;or setb 8

MOV P1,flag

 

xdata  XDM

unsigned char xdata PortCTR   _at_ 0x0003;

PortCTR=0x80;//地址值由設計者

//指定 =0x003
 

;MOVX @DPTR 存取外部資料記憶體

 

MOV DPTR,#0003h     ;PortCTR

MOV A,#080H

MOVX @DPTR,A

pdata  XDM

unsigned char  pdata Mem _at_ 0x5678;

Mem=0x1234;//地址值由設計者指定=0x78

;以 MOVX @Rn,A   存取外部資料記憶體

 

MOV R0,#78H  ;low k地址是78h不是5678h,小心使用

MOV A,#012H

MOVX @R0,A

INC R0

MOV A,#034H

MOVX @R0,A

 

sfr  SFR

sfr P1=0x90;   //地址值由設計者指定

// =0x90但是也必須依單晶片

//8051

P1 equ 0x90

     
2.不定址的位元組(byte)變數宣告
  符號 配置記憶體 C語言

組合語言(8051)

code  PM

 

code const char msg[3]={1,2,3};

P1=msg[2];//地址值由c-compiler指定

;以 MOVC @A+DPTR 讀取的程式記憶體

MOV DPTR,#msg+02H

CLR A

MOVC A,@A+DPTR

MOV P1,A

 

data  DM

unsigned char data PortCTR;

PortCTR=5;//地址值由c-compiler指定

;MOV DIRECT,#DATA直接存取的內部資料記憶體

MOV PortCTR,#5

 

idata  DM

unsigned char idata PortCTR;

PortCTR=5; //地址值由c-compiler指定

 

;MOV @R0,#DATA間接存取的內部資料記憶體

MOV R0,#PortCTR

MOV @R0,#05H

 

xdata  XDM

unsigned char xdata PortCTR;

PortCTR=0x80;//地址值由c-compiler指定
 

;MOVX @DPTR 存取外部資料記憶體

 

MOV DPTR,#PortCTR     ;PortCTR初值為0

MOV A,#080H

MOVX @DPTR,A

pdata  XDM

unsigned char  pdata Mem ;

Mem=0x1234;//地址值由c-compiler指定

;以 MOVX @Rn,A   存取外部資料記憶體

 

MOV R0,#Mem  ;Mem給初值

MOV A,#012H

MOVX @R0,A

INC R0

MOV A,#034H

MOVX @R0,A

 

 

3.定址的位元(bit)變數宣告
  符號 配置記憶體 C語言 組合語言(8051)

 

       
 sbit  

sbit P17=0x97

char bdata flag _at_ 0x20;

sbit flag_0=flag^0;

flag_0=1;

 

//地址值由設計者指定

//須注意的是其給定的地址是該單

//晶片具有可位元的記憶體,也就是

//在DM的0x20~0x2F或者是SFR記憶

//體地址

P17    reg    0x97

flag   equ    20h

flag_0 reg    20h.0

setb   flag_0

 

 

4.不定址的位元(bit)變數宣告
  符號 配置記憶體 C語言 組合語言(8051)
 bit  

bit flag_start;

 

//地址值由c-compiler指定

//須注意的是其給定的地址是該單晶片具有

//可位元的記憶體,也就是在DM的0x20~0x2F

//地址

 

keil c51 本變數型態(Variable Type)的更多相关文章

  1. KEIL C51 中嵌入汇编以及C51与A51间的相互调用

    如何在 KEIL C51(v6.21) 中调用汇编函数的一个示例 有关c51调用汇编的方法已经有很多帖子讲到,但是一般只讲要点,很少有对整个过程作详细描述,对于初学者是不够的,这里笔者通过一个简单例子 ...

  2. Keil C51 中的函数指针和再入函数

    函数指针是C语言中几个难点之一.由于8051的C编译器的独特要求,函数指针和再入函数有更多的挑战需要克服.主要由于函数变量的传递.典型的(绝大部分8051芯片)函数变量通过堆栈的入栈和出栈命令来传递. ...

  3. KEIL C51高级编程

    第一节 绝对地址访问C51提供了三种访问绝对地址的方法: 1. 绝对宏:在程序中,用“#include”即可使用其中定义的宏来访问绝对地址,包括:CBYTE.XBYTE.PWORD.DBYTE.CWO ...

  4. Keil C51中变量的使用

    引言 8051内核单片机是一种通用单片机,在国内占有较大的市场份额.在将C语言用于51内核单片机的研究方面,Keil公司做得最为成功.由于51内核单片机的存储结构的特殊性,Keil C51中变量的使用 ...

  5. Keil C51 vs 标准C

    深入理解并应用C51对标准ANSIC的扩展是学习C51的关键之一.因为大多数扩展功能都是直接针对8051系列CPU硬件的.大致有以下8类: 8051存储类型及存储区域 存储模式 存储器类型声明 变量类 ...

  6. Keil C51 知识点

    第一节 Keil C51扩展关键字     深入理解并应用C51对标准ANSIC的扩展是学习C51的关键之一.因为大多数扩展功能都是直接针对8051系列CPU硬件的.大致有以下8类: 8051存储类型 ...

  7. Keil C51程序设计中几种精确延时方法

    1 使用定时器/计数器实现精确延时 单片机系统一般常选用11.059 2 MHz.12 MHz或6 MHz晶振.第一种更容易产生各种标准的波特率,后两种的一个机器周期分别为1 μs和2 μs,便于精确 ...

  8. Keil C51必须注意的一些有趣特性

    Keil c51号称作为51系列单片机最好的开发环境,大家一定都很熟悉.它的一些普通的特性大家也都了解,(书上也都说有)如:因为51内的RAM很小,C51的函数并不通过堆栈传递参数(重入函数除外),局 ...

  9. Keil C51编译及连接技术

    主要介绍Keil C51的预处理方法如宏定义.常用的预处理指令及文件包含指令,C51编译库的选择及代码优化原理,C51与汇编混合编程的方法与实现以及超过64KB空间的地址分页方法的C51实现. 教学目 ...

随机推荐

  1. VS2010编译Qt程序失败------error LNK1123: 转换到 COFF 期间失败:

    error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏使用VS2010编译VC++项目的时候可能会出这个问题. 据说升级到SP1后可能问题解决,但是下载量太大,目前没有得到证实. ...

  2. 自定义DTD(myeclipser的XML提示功能)

    了解DTD定义详见:http://www.w3school.com.cn/dtd/dtd_elements.asp PS:文本只是简单的介绍,启到抛砖引玉的作用. 1.创建DTD文件 <?xml ...

  3. POJ3580---SuperMemo (Splay)

    各种操作,区间更新,求最值.翻转.插入.删除.当然是Splay这种神器了. 主要是 revolve这个操作,其实也就是3个区间翻转放到一块, 比如 REVOLVE x y T,T %= (y-x+1) ...

  4. Android单元测试: 首先,从是什么开始

    Android单元测试: 首先,从是什么开始 http://chriszou.com/2016/04/13/android-unit-testing-start-from-what.html 这是一系 ...

  5. 使用css框架的优缺点

    使用css框架的优点 1.加速开发 CSS框架提供通用的代码(如reset,和移动端开发的一些常用设置)和许多丰富的UI组件样式——因此我们不需要从头开始写. 2.无兼容性烦恼 CSS框架解决了各个浏 ...

  6. linux高级技巧:heartbeat+lvs(一)

    1.heartbeat一个简短的引论:        Heartbeat 项目是 Linux-HA project的一个组成部分,它实现了一个高可用集群系统.心跳服务和集群通信是高可用集群的两个关键组 ...

  7. Win32多线程编程(1) — 基础概念篇

      内核对象的基本概念 Windows系统是非开源的,它提供给我们的接口是用户模式的,即User-Mode API.当我们调用某个API时,需要从用户模式切换到内核模式的I/O System Serv ...

  8. LB集群

    LB集群   1. LB.LVS介绍LB集群是load balance 集群的简写,翻译成中文就是负载均衡集群LVS是一个实现负载均衡集群的开源软件项目 LVS架构从逻辑上可分为调度层(Directo ...

  9. 查看哪些进程占用了SWAP分区?

    在日常管理中,我们经常会遇到swap分区使用比较多,那么导致是那些进程使用的呢,其实我们可以通过/proc/pid/下的smaps来获得.使用下面的命令可以列出所有进程占用的swap分区的大小,分别我 ...

  10. JavaScript获取元素样式

    原生的JavaScript获取写在标签内部的样式很简单: <div class="test" id="test" style="width:10 ...