大家好,我用keil编译C语言时,遇到如下错误: ERROR: PREPROCESSOR: MACROS TOO NESTED

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大家好,我用keil编译C语言时,遇到如下错误: ERROR: PREPROCESSOR: MACROS TOO NESTED相关的知识,希望对你有一定的参考价值。

主函数程序:
#include<stc12c5a60s2.h>
#include"AD7841.h"

void main()

while(1);

AD7841.h程序:
#ifndef _AD7841_H_
#define _AD7841_H_
#include<stc12c5a60s2.h>

/*-------------端口定义---------------*/
sbit DCLK = P1^0;
sbit DIN = P1^1;
sbit BUSY = P1^2;
sbit DOUT = P1^3;
sbit CS = P1^4;

/*---------------函数声明--------------*/
void write_ADS7841(uchar i);
void Init_AD7841(void);
uint read_ADS7841(void);

#endif
AD7841.c程序:
#include"AD7841.h"

/*--------------------------------------------
函数功能:向AD7841写入数据
输入参数 :控制字
返回参数:无
-----------------ADS7841控制字节描述-----------
Control Byte S A2 A1 A0 MODE SGL/DIF P1 P0
S 1 start,恒为1
A2 A1 A0 通道选择
SGL/DL=1 CH0 -------9 (S A2 A1 A0)
CH1 -------D (S A2 A1 A0)
CH2 -------A (S A2 A1 A0)
CH3 -------E (S A2 A1 A0)

SGL/DL=0 CH0+ CH1--------9 (S A2 A1 A0)
CH0- CH1+-------D(S A2 A1 A0)
CH2+ CH3--------A(S A2 A1 A0)
CH2- CH3+-------E(S A2 A1 A0)
MODE 0 与MODE引脚共同决定转换位数,如果引脚为低,总为12位,
如果MODE引脚为高, MODE位=0为12位 MODE位=1为8位
SGL/DIF 1 高电平单端,低电平差分输入
P1 P0 11 00转换结束进入掉电模式,11 持续供电
------------------------------------------------*/
void write_ADS7841(uchar i) //下降沿写入

uchar n;
CS=0;
for(n=0;n<8;n++)

DCLK=1;
DCLK=1;
DIN=(bit)(i&0x80);
DCLK=0;
DCLK=0;
i=i<<1;


// CS=1; //片选无效 这句不能加上去,加上去显示的就不行了


/*--------------------------------------------
函数功能:初始化AD7841
输入参数 :无
返回参数:无
-----------------------------------------------*/
void Init_AD7841(void)

CS=1; //先让ADS7841片选无效
/*****************重要*******************************/
DOUT=1; //拉高 不然显示都是0
/******************************************************/
DOUT=1; //拉高 不然显示都是0
BUSY=1;
write_ADS7841(0x93); //S=1 SGL/DIF=1 PD1 PD0 =00 选择掉电模式

/*--------------------------------------------
函数功能:从AD7841读数据
输入参数 :无
返回参数:16位的转换值
-----------------------------------------------*/
uint read_ADS7841(void)

uchar n;
uint x;
x=0;
CS=0;
while(BUSY==1);
/*

DCLK=1;
DCLK=1;
DCLK=0;
DCLK=0;

*/

for(n=0;n<12;n++) // 上/下降沿读 ??? 因为DCLK此时为0 貌似都是下降沿有效


DCLK=1;
DCLK=1;
DCLK=0;
DCLK=0;
x=x|DOUT;
//if(n!=0)
//
x=x<<1;
//


for(n=0;n<3;n++)

DCLK=0;
DCLK=0;
DCLK=1;
DCLK=1;


CS=1;
return x;

烦请大侠解决?说的对才有加分

ERROR: PREPROCESSOR: MACROS TOO NESTED 嵌套太多的错误提示!
其实是主程序和AD模块控制程序同时都在调用同一个h头文件:
#include<stc12c5a60s2.h>

将AD模块的控制程序调用的头文件屏蔽就不会这样提示。
参考技术A 需要看一下 stc12c5a60s2.h 文件的内容 参考技术B uint
uchar
在哪定义了

~~~~~~~~~~~~~~~~~~~
参考技术C 是哪一句报错?追问

我点击后没有指向,应该是.H .C文件出错了

以上是关于大家好,我用keil编译C语言时,遇到如下错误: ERROR: PREPROCESSOR: MACROS TOO NESTED的主要内容,如果未能解决你的问题,请参考以下文章

很急,我用keil写一个C语言子函数,去调用数组,怎么写,例如

用命令行编译Java时遇到如下错误提示(该错误是在Class文件生成后,执行java命令时出现的)

keil编译没有显示未定义,但是iar显示

keil51中怎么用C语言编程把处理得到的数据存到数据存储器中,掉电不会消失

我用keil进行调试时,程序总是自汇编的一段程序里反复执行,无法跳到main函数,请问一下大家怎么解决

如何使用Keil编译汇编程序或C语言程序