zoukankan      html  css  js  c++  java
  • C51中的xdata

    今天在写公司芯片对应的.H文件时,在定义寄存器的时候出现一个问题。

    我们芯片的寄存器地址是定义在片外RAM区的,不能使用sfr这样的关键字来进行定义。

    后来查阅了对应的资料才发现定义寄存器有很多种方法,不同存储区域的寄存器定义的方式也是不一样的。

    对于处于片外RAM的寄存器我们需要使用xdata关键字定义。

    http://www.51hei.com/mcu/3993.html

    http://blog.chinaunix.net/uid-25562715-id-315902.html

    这两篇文章对xdata idata data解释得都非常详细。

    总结来说:

    空间名称
    地址范围
    说明
    DATA
    D:00H~7FH
    片内RAM直接寻址区
    BDATA
    D:20H~2FH
    片内RAM位寻址区
    IDATA
    I:00H~FFH
    片内RAM间接寻址区
    XDATA
    X:0000H~FFFFH
    64KB常规片外RAM数据区

    使用sfr关键字定义的特殊功能寄存器是在片内RAM区的高128字节中(即在80H-FFH)。

    这里有一点想说一下,sfr在51中编程中用的多一点,它用来定义了片内RAM区的特殊功能寄存器,但是我们也可以完全不使用它,采用类似

    #define P0 ((unsigned char volatile idata*)(0x80))

    的形式代替。

    今天遇到这个问题,说明我对51单片的内存分配、各种寻址方式还是非常不熟悉的,之后要好好熟悉一下。

  • 相关阅读:
    单层感知机实现或运算
    Ubuntu关于eclipse新插件不显示的解决方案
    台州学院maximum cow训练记录
    利用矩阵快速幂转换的题目
    A Few Laughing Men
    TOJ1196: RSA Signing
    HDU
    2018“百度之星”程序设计大赛
    2018 “百度之星”程序设计大赛
    2018 “百度之星”程序设计大赛
  • 原文地址:https://www.cnblogs.com/cuglkb/p/6376172.html
Copyright © 2011-2022 走看看