打印

C51有关指针数组的问题

[复制链接]
4032|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ChrisPu|  楼主 | 2009-8-27 14:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
由于设计需要,利用软件编程可以比直接硬件设计方便,本人需要利用一个指针数组来保存单片机的几个IO口地址,然后对该IO口进行赋值,但是KEIL编译却会出问题,
程序如下:

   sbit  P0_0=P0^0;
   sbit  P0_1=P0^1;
   sbit *heng[2]={ P0_0,P0_1 };

出现编译错误:error C247:non-address/-constant initializer

作为数组应该能保存相同的数据类型,比如sbit型,但是为啥不能如此设置呢?
可能是语法错误,或者其他,希望高手帮忙解决下,万分感谢!

相关帖子

沙发
lanmp| | 2009-8-27 15:29 | 只看该作者
干吗要这样呢?

使用特权

评论回复
板凳
LYXQ| | 2009-8-27 15:42 | 只看该作者
keil c 不支持bit类型的数组,这种办法你就不用想了

使用特权

评论回复
地板
ChrisPu|  楼主 | 2009-8-27 21:58 | 只看该作者
补充下:当然如果硬件接口连线合适的话就直接用IO总线定义来操作了,但是由于连线问题,IO口没能正好配合,于是希望能将其映射到一个数组进行操作,这种方法可行性?   指针不是可以直接操作地址吗?能否像汇编中一样,对所需的操作用指针进行?

使用特权

评论回复
5
FDLock| | 2009-8-27 23:56 | 只看该作者
"...直接用IO总线定义来操作了,但是由于连线问题,IO口没能正好配合...." 是不是硬件连错线了,想用软件来调整?

如果是这样的话,只需要设计一个函数来转换数据就可以了。

#define uchar  unsigned char

uchar  dataAdjust(uchar ucData)
{
    // 进行数据调整,然后返回调整后的数据
    // 比如D0和D1反了,则将这两位调换一下
}

使用时P0 = dataAdjust(x);

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

13

帖子

0

粉丝