这篇文章主要介绍了使用C语言访问51单片机中存储器的相关知识,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
使用C语言访问51单片机中存储器
1.头文件
在Keil C51工程中 #include <absacc.h> ,可以直接使用CBYTE, XBYTE, DBYTE, PBYTE
absacc.h 的部分内容如下:
#ifndef __ABSACC_H__
#define __ABSACC_H__
#define CBYTE ((unsigned char volatile code *) 0)
#define DBYTE ((unsigned char volatile data *) 0)
#if !defined (__CX2__)
#define PBYTE ((unsigned char volatile pdata *) 0)
#endif
#define XBYTE ((unsigned char volatile xdata *) 0)
#define CWORD ((unsigned int volatile code *) 0)
#define DWORD ((unsigned int volatile data *) 0)
#if !defined (__CX2__)
#define PWORD ((unsigned int volatile pdata *) 0)
#endif
#define XWORD ((unsigned int volatile xdata *) 0)
code data pdata xdata 均为存储器类型,下节将详叙,此处用T替代:
unsigned char volatile T * 为指向存储器T中无符号整型数的指针类型
((unsigned char volatile T * ) 0) 对0做强制类型转换
2.code data pdata xdata
code data pdata xdata均为存储器类型
- code:用于存储常数和函数,使用16位地址访问,可位于片内或片外
- ROMdata:用于存储变量,使用8位地址,位于片内RAMp
- data:用于存储变量,使用8位地址,位于片外RAMx
- data:用于存储变量,使用16位地址,位于片外RAM
3.CBYTE、DBYTE、PBYTE和XBYTE的区别
注意:以下存储地址范围均指理论上可访问的最大范围,具体操作时需根据存储器大小调整
从存储器类型的区别中可以得出本节四者的区别:
CBYTE
CBYTE 是用于访问代码存储器的,即ROM部分。
rval = CBYTE[adress]; //访问到代码存储器中的内容
其中代码存储器地址(adress)范围是 0X0000--0xFFFF ,大小为16K。
DBYTE
DBYTE 是用于访问片内数据存储器的,即片内RAM部分,
DBYTE[adress] = 0XFB; //写数据
rval = DBYTE[adress]; //读数据
其中片内存储器地址(adress)范围是 0x00--0xFF ,大小为256byte。
XBYTE
XBYTE 是用于访问片外数据存储器的,即片外RAM部分,但是XBYTE只能读数据不能写数据到片外RAM。
rval =XBYTE[adress]; //读数据
片外数据存储器的写可以使用下面这条语句:
char xdata x1 _at_ 0x30 ; //x1为char型全局变量,地址位于xdata区地址0x30
x1 = 0x01; //给片外存储器地址赋值
地址范围为 0x0000--0xFFFF,大小为16K。
PBYTE
PBYTE也用来访问扩展ram,但只能访问开始的256字节。
4.CWORD、XWORD、DWORD和PWORD
上节所述四者为单字节访问,对应双字节访问使用CWORD、DWORD、XWORD和PWORD。
5.参考
https://wenku.baidu.com/view/fe5a4b09f61fb7360a4c659c.html
到此这篇关于使用C语言访问51单片机中存储器的文章就介绍到这了,更多相关C语言51单片机存储器内容请搜索编程学习网以前的文章希望大家以后多多支持编程学习网!
本文标题为:使用C语言访问51单片机中存储器的核心代码
基础教程推荐
- 如何C++使用模板特化功能 2023-03-05
- C语言 structural body结构体详解用法 2022-12-06
- 详解c# Emit技术 2023-03-25
- C语言基础全局变量与局部变量教程详解 2022-12-31
- C++详细实现完整图书管理功能 2023-04-04
- C/C++编程中const的使用详解 2023-03-26
- 一文带你了解C++中的字符替换方法 2023-07-20
- C利用语言实现数据结构之队列 2022-11-22
- C++中的atoi 函数简介 2023-01-05
- C++使用easyX库实现三星环绕效果流程详解 2023-06-26