本變數型態(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. mysql出现错误“ Every derived table must have its own alias”

    Every derived table must have its own alias 这句话的意思是说每个派生出来的表都必须有一个自己的别名 一般在多表查询时,会出现此错误. 因为,进行嵌套查询的时 ...

  2. Html.DropDownList的用法

    直接上代码 页面代码 <td> <%= Html.DropDownList("selCity") %> </td> controller里面的代 ...

  3. poj3461 Oulipo

    Description The French author Georges Perec (1936–1982) once wrote a book, La disparition, without t ...

  4. Java中判断集合类为空的方法

    *****需要引入Spring的核心Jar包***** 工具类: org.springframework.util.CollectionUtils 方法: public static boolean ...

  5. js iframe 跳转

    iframe 页面内操作: //iframe指向指定页面 parent.document.getElementById("hot").src = $("#hidPageU ...

  6. JMeter分布式性能测试

    利用JMeter进行负载测试的时候,使用单台机器模拟测试超过1000个行程的并发就有些力不从心,在执行的过程中,JMeter自身会自动关闭,要解决这个问题,可以使用分布式测试,运行多台机器运行所谓的  ...

  7. [RxJS] Toggle A Stream On And Off With RxJS

    This lesson covers how to toggle an observable on and off from another observable by showing how to ...

  8. Verilog 读写文件

    Verilog 读写文件 在数字设计验证中,有时我们需要大量的数据,这时可以通过文件输入,有时我们需要保存数据,可以通过写文件保存. 读写文件testbench module file_rw_tb() ...

  9. java基础之成员变量与局部变量

    成员变量的含义 局部变量的含义 成员变量与局部变量的区别

  10. Visual Studio 命中断点时 打印信息

    打印时间: 开始: {DateTime.Now.ToString()} 结束: {DateTime.Now.ToString()} 搜索 复制