使用C语言访问51单片机中存储器的核心代码

 更新时间:2022年01月16日 13:01:16   作者:却话夜雨  
这篇文章主要介绍了使用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++改变编程入口为main函数

    C++改变编程入口为main函数

    这篇文章主要介绍了C++改变编程入口为main函数的方法的相关资料,需要的朋友可以参考下
    2015-06-06
  • C++基础入门教程(八):函数指针

    C++基础入门教程(八):函数指针

    这篇文章主要介绍了C++基础入门教程(八):函数指针,本文讲解了函数原型和函数定义、const限定符与指针、函数的指针参数、为什么要使用指针参数等内容,需要的朋友可以参考下
    2014-11-11
  • C++迭代器失效问题及解决

    C++迭代器失效问题及解决

    这篇文章主要介绍了C++迭代器失效问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • 浅谈关于C++memory_order的理解

    浅谈关于C++memory_order的理解

    这篇文章主要介绍了浅谈关于C++memory_order的理解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • C++中访问字符串的三种方法总结

    C++中访问字符串的三种方法总结

    以下是对C++中访问字符串的三种方法进行了详细的总结介绍,需要的朋友可以过来参考下,希望对大家有所帮助
    2013-10-10
  • C++ cin输入的多种方法详解

    C++ cin输入的多种方法详解

    cin是C++编程语言中的标准输入流对象,即stream类的对象。cin主要用于从标准输入读取数据,这里的标准输入,指的是终端的键盘。接下来通过本文给大家分享C++ cin输入的几种方式,一起看看吧
    2021-09-09
  • C语言中bool变量的深入理解

    C语言中bool变量的深入理解

    C语言中没有BOOL类型变量,它是C++独有的,由于使用BOOL类型可以使代码更具有可读性,下面这篇文章主要给大家介绍了关于C语言中bool变量的相关资料,需要的朋友可以参考下
    2021-08-08
  • C++实现合并排序的方法

    C++实现合并排序的方法

    这篇文章主要介绍了C++实现合并排序的方法,实例分析了合并排序的原理与相关实现技巧,需要的朋友可以参考下
    2015-07-07
  • C++ accumulate函数详细介绍和具体案例

    C++ accumulate函数详细介绍和具体案例

    这篇文章主要介绍了C++ accumulate函数详细介绍和具体案例,accumulate是numeric库中的一个函数,主要用来对指定范围内元素求和,但也自行指定一些其他操作,如范围内所有元素相乘、相除等
    2022-08-08
  • C语言实现的一个三子棋游戏详解流程

    C语言实现的一个三子棋游戏详解流程

    三子棋是一种民间传统游戏,又叫九宫棋、圈圈叉叉、一条龙、井字棋等。将正方形对角线连起来,相对两边依次摆上三个双方棋子,只要将自己的三个棋子走成一条线,对方就算输了
    2021-10-10

最新评论