在SDCC编译器中使用51单片机的外部扩展存储(外部8080总线)

  熟悉Keil的朋友应该都知道,在Keil中可以使用XBYTE关键字使用P0与P2组成一个标准的16位Intel总线收发器对外部设备(一般为扩展RAM,常见于8031系列单片机)进行读写操作。最近打算把代码移植到SDCC环境下开发的时候便遇到了SDCC中没有XBYTE关键字的问题,折腾一番后找到了如下的解决方案:

  例如8255的PA端口地址为0x0001,在Keil中若要将其赋值0xAA的写法是

#define PORT_8255A_PA XBYTE[0x0001]

void main()
{
    PORT_8255A_PA = 0xAA;
}

  在SDCC中若想实现同样的效果,也仅需要如下几行代码:

volatile __xdata __at (0x0001) unsigned char PORTA_8255A_PA;

void main()
{
    PORTA_8255A_PA = 0xAA;
}

  如果想要兼容Keil的写法仅需在自己源文件开头添加如下宏定义:

#define XBYTE ((unsigned char volatile __xdata *) 0)

  之后的写法就和Keil中一模一样啦!这段代码其实来源于Keil C51自带的absacc.h中~在HML_FwLib_8051库中,也有类似的代码,存放于mem.h,欢迎大家使用!

  具体涉及的关键词作用可查询SDCC手册和C语言相关参考资料,如果觉得本文有帮助就按个赞吧~~

你可能感兴趣的:(#,mcs-51)