关于C51中的带参宏的用法,希望高手能给与解答

2020-01-30 14:06发布

我在KEI环境下
#include<reg52.h>

typedef unsigned char u8;

#define SPI_MASTER                1

sfr SPCTL         = 0xCE;
#define MSTR                = 0x10;
#define SSIG                = 0x80;

#define AssignBit(type ,flag , which_bit, val) ((((type)which_bit)&((type)val)) | ((flag)&(~((type)which_bit))))

#define SPI_SetMode(mode)                                        { AssignBit(u8, SPCTL, (u8)(MSTR | SSIG), ((mode<<4) | (mode<<7)) ); }

void SPI_Init(void)
{
        SPI_SetMode(SPI_MASTER);       
}

也就是我定义了一个带参宏AssignBit,然后又根据AssignBit定义了一个带参宏 SPI_SetMode,然后使用SPI_SetMode进行初始化,可是编译器老是报错
MAIN.C(40): error C141: syntax error near '='
MAIN.C(40): error C141: syntax error near ';'
MAIN.C(40): error C141: syntax error near '|'
MAIN.C(40): error C141: syntax error near ')'
MAIN.C(40): error C190: '&': not an lvalue
MAIN.C(40): error C141: syntax error near ')'
MAIN.C(40): error C141: syntax error near '='
MAIN.C(40): error C141: syntax error near ';'
MAIN.C(40): error C141: syntax error near '|'
MAIN.C(40): error C141: syntax error near ')'

希望高手能指点一下
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。