TM1650 代码找错

问题遇到的现象和发生背景

TM1650 移植到51上面的错误提示

问题相关代码,请勿粘贴截图

unsigned char TM1650_Wait_Ack(void) //等待应答信号
{
unsigned char ucErrTime = 0; //定义一个字节变量ucErrTime
SDA_IN(); //配置数据引脚为输入模式
TM1650_SDA_H; Delay_us(1); //数据信号置高,延迟1us
TM1650_SCL_H; Delay_us(1); //时钟信号为高,延迟1us
while(READ_SDA) //读取”SDA8脚状态“如果为真
{
ucErrTime++; // ucErrTime变量自加1
if(ucErrTime>250) // 等待SDA8脚变低, 返回1
{
TM1650_Stop(); //结束信号函数
return 1; //返回1
}
}
TM1650_SCL_L; //如果”SDA8脚状态“为假,时钟拉低
return 0; //返回0
}

运行结果及报错内容

SOURCE\tm1650.c(81): error C141: syntax error near ';', expected ','
SOURCE\tm1650.c(81): error C141: syntax error near ')', expected '__asm'

我的解答思路和尝试过的方法

编译一直在“while(READ_SDA) ”这一行提示两个错误, 将 READ_SDA替换成 1, 就不显示告警了, READ_SDA 的出处是宏定义:#define READ_SDA P1^4;

我想要达到的结果

找不到问题在哪里,帮忙找到问题,去除告警。

#define READ_SDA P1^4;
后面那个分号去掉
#define就是定义一个符号去替换,会连分号一起加入替换的,当然就报错了
其实有个更好的方式是用sbit代替#define语句
sbit READ_SDA = P1^4;