keil c51 本變數型態(Variable Type)
本變數型態(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; |
;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; unsigned char i; //的第 0bit i=flag; 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; //指定 =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
//地址值由設計者指定 //須注意的是其給定的地址是該單 //晶片具有可位元的記憶體,也就是 //在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)的更多相关文章
- KEIL C51 中嵌入汇编以及C51与A51间的相互调用
如何在 KEIL C51(v6.21) 中调用汇编函数的一个示例 有关c51调用汇编的方法已经有很多帖子讲到,但是一般只讲要点,很少有对整个过程作详细描述,对于初学者是不够的,这里笔者通过一个简单例子 ...
- Keil C51 中的函数指针和再入函数
函数指针是C语言中几个难点之一.由于8051的C编译器的独特要求,函数指针和再入函数有更多的挑战需要克服.主要由于函数变量的传递.典型的(绝大部分8051芯片)函数变量通过堆栈的入栈和出栈命令来传递. ...
- KEIL C51高级编程
第一节 绝对地址访问C51提供了三种访问绝对地址的方法: 1. 绝对宏:在程序中,用“#include”即可使用其中定义的宏来访问绝对地址,包括:CBYTE.XBYTE.PWORD.DBYTE.CWO ...
- Keil C51中变量的使用
引言 8051内核单片机是一种通用单片机,在国内占有较大的市场份额.在将C语言用于51内核单片机的研究方面,Keil公司做得最为成功.由于51内核单片机的存储结构的特殊性,Keil C51中变量的使用 ...
- Keil C51 vs 标准C
深入理解并应用C51对标准ANSIC的扩展是学习C51的关键之一.因为大多数扩展功能都是直接针对8051系列CPU硬件的.大致有以下8类: 8051存储类型及存储区域 存储模式 存储器类型声明 变量类 ...
- Keil C51 知识点
第一节 Keil C51扩展关键字 深入理解并应用C51对标准ANSIC的扩展是学习C51的关键之一.因为大多数扩展功能都是直接针对8051系列CPU硬件的.大致有以下8类: 8051存储类型 ...
- Keil C51程序设计中几种精确延时方法
1 使用定时器/计数器实现精确延时 单片机系统一般常选用11.059 2 MHz.12 MHz或6 MHz晶振.第一种更容易产生各种标准的波特率,后两种的一个机器周期分别为1 μs和2 μs,便于精确 ...
- Keil C51必须注意的一些有趣特性
Keil c51号称作为51系列单片机最好的开发环境,大家一定都很熟悉.它的一些普通的特性大家也都了解,(书上也都说有)如:因为51内的RAM很小,C51的函数并不通过堆栈传递参数(重入函数除外),局 ...
- Keil C51编译及连接技术
主要介绍Keil C51的预处理方法如宏定义.常用的预处理指令及文件包含指令,C51编译库的选择及代码优化原理,C51与汇编混合编程的方法与实现以及超过64KB空间的地址分页方法的C51实现. 教学目 ...
随机推荐
- 多线程操作UI界面的示例 - 更新进度条
http://blog.csdn.net/liang19890820/article/details/52186626
- Qt也有垃圾回收(通过QScopedPointer实现),下决心在项目里使用QScopedPointer,省了太多事情了,而且更安全!!
也谈Qt的垃圾回收 前几天在做代码审核的时候,Kai Uwe Broulik建议使用QScopedPointer来替代手工内存管理,使用后发觉确实节约了不少代码量,我的CHERRY可以延长寿命了!但是 ...
- Qt跨线程信号和槽的连接(默认方式是直连和队列的折中)
Qt支持三种类型的信号-槽连接:1,直接连接,当signal发射时,slot立即调用.此slot在发射signal的那个线程中被执行(不一定是接收对象生存的那个线程)2,队列连接,当控制权回到对象属于 ...
- python高级编程:缓存
# -*- coding: utf-8 -*-__author__ = 'Administrator'#缓存"""对于运行代价很高的函数和方法结果,可以进行缓存,只要:1 ...
- css如何使背景图片水平居中
CSS中定位背景图片的属性是:background-position,用法background-position 属性设置背景图像的起始位置. 你要水平居中可以: div{background-pos ...
- C++ Primer 学习笔记_84_模板与泛型编程 --模板特化
模板与泛型编程 --模板特化 引言: 我们并不总是能够写出对全部可能被实例化的类型都最合适的模板.某些情况下,通用模板定义对于某个类型可能是全然错误的,通用模板定义或许不能编译或者做错误的事情;另外一 ...
- MySQL具体解释(7)-----------MySQL线程池总结(一)
线程池是Mysql5.6的一个核心功能.对于server应用而言,不管是web应用服务还是DB服务,高并发请求始终是一个绕不开的话题.当有大量请求并发訪问时,一定伴随着资源的不断创建和释放.导致资源利 ...
- [Angular 2] WebStorm - Managing Imports
Some tips for import libaray by using webstorm: // Alt + Enter --> Auto Import // Ctrl + Alt + o ...
- c++11 NULL、0、nullptr
C的NULL 在C语言中,我们使用NULL表示空指针,也就是我们可以写如下代码: int *i = NULL;foo_t *f = NULL; 实际上在C语言中,NULL通常被定义为如下: #de ...
- C++11下的线程池以及灵活的functional + bind + lamda
利用boost的thread实现一个线程类,维护一个任务队列,以便可以承载非常灵活的调用.这个线程类可以方便的为后面的线程池打好基础.线程池还是动态均衡,没有什么别的.由于minGW 4.7 对 C+ ...