搜索
bottom↓
回复: 4

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

[复制链接]

出0入0汤圆

发表于 2013-3-10 10:01:38 | 显示全部楼层 |阅读模式
我在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 ')'

希望高手能指点一下

出0入0汤圆

 楼主| 发表于 2013-3-10 10:02:09 | 显示全部楼层
自己先顶一下

出0入0汤圆

发表于 2013-3-10 10:11:25 | 显示全部楼层
我也帮你顶一下。。、。

出0入0汤圆

 楼主| 发表于 2013-3-10 10:17:16 | 显示全部楼层
我在VC6.0上调试都可通过,是不是KEIL编译器的问题??

出0入0汤圆

发表于 2013-3-10 10:47:39 | 显示全部楼层
国防大学 发表于 2013-3-10 10:17
我在VC6.0上调试都可通过,是不是KEIL编译器的问题??

VC6.0上可以调试通过?结果正确????
不知道怎么调的
#define MSTR                = 0x10;
#define SSIG                = 0x80;
这里的 = ;放进去能没有问题?????
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-4 02:28

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表