首先就是上面说的你把main函数中的延时函数调用前的void去掉
其次
把 sbit D1=P1^0; //位 *** 作放到函数声明 void yanshi(); 前面
所有的变量定义、位定义,都不能出现在中间,要放在最前面
就这个程序而言,就纯在这几个错误,只要是有错误就无法编译成功
错误一、按键检测函数内,赋值语句被你写成判断语句了,如下图这里
就是说多写了一个等于号,并且这几个按键的检测部分否存在此错误,另外还有第一行的if判断语句也要使用方括号
错误二、中断函数部分,在中断内不能使用局部变量的声明,否则相当于每次进入中断都重新声明一个变量,之后再累加,始终是从0到1的变化,还有一点是,中断内不要使用工作方式设定TMOD=0x01;,这个只需要设定一次即可,就是在主函数中设定一次就可以了,如图
解决办法是,将temp的变量声明语句移到函数外,使其成为全局变量
错误三、既然程序的前端有各个函数的定义部分,那就要吧主函数放在最上端,不需要经常修改的函数放在最下端,虽然这不是强制性的,但这是一个良好的编程习惯
先改正以上错误吧!
#include "reg52h"
#include "stringh"
unsigned char flag,i,put=0;
unsigned char table[2];
unsigned char str[2]={"aa"};
unsigned char code req[]="OK";
void mcu_51_uart_init()
{
TMOD=0x20; //M1 0010 M2 0000
TH1=0xfd; //波特率9600 定时器初值
TL1=0xfd; //波特率9600 定时器初值
TR1=1; // 启动定时器1
REN=1; //允许串口接收
SM0=0; //设定串口工作方式1
SM1=1; //同上
EA=1; //开总中断
ES=1; //开串口中断
}
void mcu_51_uart_send()
{
if(flag==1&&strcmp(table,str)==0)
{
ES=0;
for(i=0;i<2;i++)
{
SBUF=req[i]; //发送
while(!TI);
TI=0;
}
ES=1;
flag=0;
}
}
void main()
{
mcu_51_uart_init();
while(1)
{
mcu_51_uart_send();
}
}
void ser() interrupt 4
{
if(RI)
{
RI=0;
table[put]=SBUF;
if((put==0)&&(table[0]=='a'))put++;
put&=2;
if(put==0)flag=1;
}
}
以上就是关于51单片机编程错误 1.C(20): error C141: syntax error near 'void'全部的内容,包括:51单片机编程错误 1.C(20): error C141: syntax error near 'void'、单片机调试的时候出错了 求大神、单片机程序错误 strcmp等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)