打印

新手提问bit数组的问题

[复制链接]
3020|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
alex74|  楼主 | 2009-1-13 09:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
AN, TE, AI, MCU, IO
PIC16的C代码如下
volatile bit cols[3] =
{
    RC5,
    RC6,
    RC7,
};

编译结果:
Error[000] E:\mcu_kb\main.c 396 : can't have an array of bits or a pointer to bit
Error[000] E:\mcu_kb\main.c 398 : constant expression required
Error[000] E:\mcu_kb\main.c 399 : constant expression required
Error[000] E:\mcu_kb\main.c 400 : constant expression required

这个数组该如何定义?
沙发
azafightaza| | 2009-1-13 11:20 | 只看该作者

改用结构体进行位定义试试

PICC貌似不可以用数组定义位吧?

使用特权

评论回复
板凳
yewuyi| | 2009-1-13 13:12 | 只看该作者

只能用结构和联合

使用特权

评论回复
地板
alex74|  楼主 | 2009-1-13 16:49 | 只看该作者

谢谢各位

初学者,能不能请给个demo?

使用特权

评论回复
5
yewuyi| | 2009-1-13 17:32 | 只看该作者

这要什么DEMO ?

自己翻C语言的基础教材把。。。

使用特权

评论回复
6
hotpower| | 2009-1-13 17:48 | 只看该作者

...

使用特权

评论回复
7
alex74|  楼主 | 2009-1-14 11:11 | 只看该作者

改了个最经典的用法

但是不知道是否最简,八辈子没用过单片机了

typedef struct
{
    volatile  unsigned char* port;
    unsigned char portMask;    
} tGPIO;

 
tGPIO cols[COL_COUNT] =
{
    {&TRISC, 1<<5},
    {&TRISC, 1<<6},
    {&TRISC, 1<<7},
};

#define bitset(var,mask) ((var) |= (mask))
#define bitclr(var,mask) ((var) &= ~(mask))

void KeySetCol(unsigned char col)
{
    unsigned char i;

    for (i=0; i<COL_COUNT; i++)
        bitset(*cols.port, cols.portMask);

    bitclr(*cols[col].port, cols[col].portMask);
}

使用特权

评论回复
8
alex74|  楼主 | 2009-1-14 11:23 | 只看该作者

。。。

看了那个高齐的网页和hotpower的网页
PICCBITBYTE myvars @(unsigned)0x25;//申请新变量类型PICCBITBYTE名为myvars,并绝对定位在bank0的0x25处

#define myvars0 myvars.BIT.BIT0        //myvars.0
#define myvars1 myvars.BIT.BIT1        //myvars.1
#define myvars2 myvars.BIT.BIT2        //myvars.2
#define myvars3 myvars.BIT.BIT3        //myvars.3
#define myvars4 myvars.BIT.BIT4        //myvars.4
#define myvars5 myvars.BIT.BIT5        //myvars.5
#define myvars6 myvars.BIT.BIT6        //myvars.6
#define myvars7 myvars.BIT.BIT7        //myvars.7
这段代码编译结果是:
Error[000] E:\mcu_kb\main.c 431 : struct/union required
Error[000] E:\mcu_kb\main.c 431 : struct/union required
Error[000] E:\mcu_kb\main.c 431 : illegal conversion

也可能我哪里没搞对,估计还得写个union,太麻烦了。算了,反正能用了

使用特权

评论回复
9
yewuyi| | 2009-1-14 13:41 | 只看该作者

哎。。。

使用特权

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

本版积分规则

43

主题

474

帖子

3

粉丝