在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语言相关参考资料,如果觉得本文有帮助就按个赞吧~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值