user-0 提问: 帮我看看这段程序错在哪儿了

回复:
user: user-1
content: 你应该发在嵌入式设计的版块中去的

user: user-2
content: 引用 5 楼 m0_37163288 的回复:[quote=引用 1 楼 cfjtaishan 的回复:] //#include<reg52.h> #include<string.h>  //#define jingzhen 11059200UL 王老师叫我在那个烧录工具STC-ISP中有个波特率计算器，可以直接生成串口初始化的函数的代码 typedef  unsigned char uchar; sbit JDQ1=P1^1; uchar zifuchuan[] = "Lost humanity"; volatile uchar sending; uchar *pd;  void delay(uchar i) {     uchar j,k;     for(j=i;j>0;j++)         for(k=90;k>0;k--); }  void init_serialcom(void) {     SCON = 0x50;  //8位数据,可变波特率     AUXR |= 0x40;  //定时器1时钟为Fosc,即1T     AUXR &= 0xFE;  //串口1选择定时器1为波特率发生器     TMOD &= 0x0F;  //设定定时器1为16位自动重装方式     TL1 = 0x70;  //设定定时初值     TH1 = 0xFF;  //设定定时初值     ET1 = 0;  //禁止定时器1中断     TR1 = 1;  //启动定时器1 }  void recieve(void) {     *pd=SBUF;     sending=1;     while(sending); } void recievec(void) {     while((*pd)!='\0')     {         recieve();         pd++;     } }  void fasongzifuchuan(void) //interrupt 4 {     EA=0;     if(RI)  //收到数据     {         RI=0; //清中断请求     }     else  //发送完一字节数据     {         TI=0;         sending=0; //清正在发送标志     }     uchar* c1="Lost humanity";     uchar* c2="Lost";      if(!strcmp(pd,c1))     {         JDQ1=0;      }     else if(!strcmp(pd,c2))     {         JDQ1=1;      }     else;      EA=1; }  int main() {     init_serialcom();     while(1)     {         delay(200);         recievec();     }     return 0; }  数据类型别名，建议使用typedef，使用宏定义不是不可以，但是最好加上括号；注意，宏定义是等价替换，并且如果不加括号，uchar就是unsigned #define uchar (unsigned char) 个人建议，类型别名不建议使用宏定义，建议使用typedef,宏定义一般用于定义常量，头文件等等  改成#define uchar (unsigned char)还是不行 求助[/quote] 为啥不用typedef呢？

user: user-0
content: 引用 1 楼 cfjtaishan 的回复://#include<reg52.h> #include<string.h>  //#define jingzhen 11059200UL 王老师叫我在那个烧录工具STC-ISP中有个波特率计算器，可以直接生成串口初始化的函数的代码 typedef  unsigned char uchar; sbit JDQ1=P1^1; uchar zifuchuan[] = "Lost humanity"; volatile uchar sending; uchar *pd;  void delay(uchar i) {     uchar j,k;     for(j=i;j>0;j++)         for(k=90;k>0;k--); }  void init_serialcom(void) {     SCON = 0x50;  //8位数据,可变波特率     AUXR |= 0x40;  //定时器1时钟为Fosc,即1T     AUXR &= 0xFE;  //串口1选择定时器1为波特率发生器     TMOD &= 0x0F;  //设定定时器1为16位自动重装方式     TL1 = 0x70;  //设定定时初值     TH1 = 0xFF;  //设定定时初值     ET1 = 0;  //禁止定时器1中断     TR1 = 1;  //启动定时器1 }  void recieve(void) {     *pd=SBUF;     sending=1;     while(sending); } void recievec(void) {     while((*pd)!='\0')     {         recieve();         pd++;     } }  void fasongzifuchuan(void) //interrupt 4 {     EA=0;     if(RI)  //收到数据     {         RI=0; //清中断请求     }     else  //发送完一字节数据     {         TI=0;         sending=0; //清正在发送标志     }     uchar* c1="Lost humanity";     uchar* c2="Lost";      if(!strcmp(pd,c1))     {         JDQ1=0;      }     else if(!strcmp(pd,c2))     {         JDQ1=1;      }     else;      EA=1; }  int main() {     init_serialcom();     while(1)     {         delay(200);         recievec();     }     return 0; }  数据类型别名，建议使用typedef，使用宏定义不是不可以，但是最好加上括号；注意，宏定义是等价替换，并且如果不加括号，uchar就是unsigned #define uchar (unsigned char) 个人建议，类型别名不建议使用宏定义，建议使用typedef,宏定义一般用于定义常量，头文件等等  改成#define uchar (unsigned char)还是不行 求助

user: user-0
content: 引用 2 楼 zhao4zhong1 的回复:偶遇到类似问题都是用 “每次用/*...*/注释掉不同部分再重新编译，直到定位到具体语法出错的位置。” 的方法解决的。  已收藏，谢谢分享

user: user-3
content: C 语言， 变量需要定义在第一个执行语句之前

user: user-4
content: 偶遇到类似问题都是用 “每次用/*...*/注释掉不同部分再重新编译，直到定位到具体语法出错的位置。” 的方法解决的。

user: user-2
content: //#include<reg52.h> #include<string.h>  //#define jingzhen 11059200UL 王老师叫我在那个烧录工具STC-ISP中有个波特率计算器，可以直接生成串口初始化的函数的代码 typedef  unsigned char uchar; sbit JDQ1=P1^1; uchar zifuchuan[] = "Lost humanity"; volatile uchar sending; uchar *pd;  void delay(uchar i) {     uchar j,k;     for(j=i;j>0;j++)         for(k=90;k>0;k--); }  void init_serialcom(void) {     SCON = 0x50;  //8位数据,可变波特率     AUXR |= 0x40;  //定时器1时钟为Fosc,即1T     AUXR &= 0xFE;  //串口1选择定时器1为波特率发生器     TMOD &= 0x0F;  //设定定时器1为16位自动重装方式     TL1 = 0x70;  //设定定时初值     TH1 = 0xFF;  //设定定时初值     ET1 = 0;  //禁止定时器1中断     TR1 = 1;  //启动定时器1 }  void recieve(void) {     *pd=SBUF;     sending=1;     while(sending); } void recievec(void) {     while((*pd)!='\0')     {         recieve();         pd++;     } }  void fasongzifuchuan(void) //interrupt 4 {     EA=0;     if(RI)  //收到数据     {         RI=0; //清中断请求     }     else  //发送完一字节数据     {         TI=0;         sending=0; //清正在发送标志     }     uchar* c1="Lost humanity";     uchar* c2="Lost";      if(!strcmp(pd,c1))     {         JDQ1=0;      }     else if(!strcmp(pd,c2))     {         JDQ1=1;      }     else;      EA=1; }  int main() {     init_serialcom();     while(1)     {         delay(200);         recievec();     }     return 0; }  数据类型别名，建议使用typedef，使用宏定义不是不可以，但是最好加上括号；注意，宏定义是等价替换，并且如果不加括号，uchar就是unsigned #define uchar (unsigned char) 个人建议，类型别名不建议使用宏定义，建议使用typedef,宏定义一般用于定义常量，头文件等等