keil c51 显示error c141

#include<reg52.h>#define uint unsigned int#define uchar unsigned charsbit SIG1=P3^0;sbit M1=P3^1;sbit R1=P3^2;sbit SIG2=P3^3;sbit M2=P3^4;sbit R2=P3^5;sbit LED6=P1^4;uchar time;uchar movctro;uchar a,b,d;void delay(d){uchar data i;for(;d>0;d--)for(i=26;i>0;i--);}void timbas(){TMOD=0x01;TH0=0xff;TL0=0xa3;EA=1;ET0=1;TR0=1;}void neutra(){TR0=0;M1=M2=0;return;}void foward(){uchar i;a=b=20;for(i=1;i<100;i++){timbas();}}void main(){if(SIG1=SIG2=1)TR0=0;switch(movctro){case 0:neutra;break;case 1:foward;break;}void tim0() interrupt 1{ TR0=0;TH0=0xff;TL0=0xa3;TR0=1;time++;if(time>=200)time=0;if(time<=a)M1=1;else M1=0;if(time<=b)M2=1;}else {M2=0;}}

主程序main() 和T0的中断程序有错误,修改如下,另外,那个延时子程序没有用上,编译时会警告的。
void main()
{
while(1)//应该有主循环语句
{
if(SIG1==1&&SIG2==1)//两个条件的if语句应该这么写
TR0=0;
switch(movctro)
{
case 0:neutra();//这是调子函数,要带()
break;
case 1:foward();//这是调子函数,要带()
break;
}
}
}//少一个大括号
void tim0() interrupt 1
{
TR0=0;TH0=0xff;TL0=0xa3;
TR0=1;time++;
if(time>=200)time=0;
if(time<=a)M1=1;
else M1=0;
if(time<=b)M2=1;
else
M2=0;
}追问

感谢,代码确实有挺多不足的,延时函数也没有用到只是备用了,要做双PWM波输出,所以思路路有点乱,在后面补一个}后就解决了出错的问题
额外问一下就是有办法把子函数映射成端口编码吗 想单独用P3口做外部控制端

温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-11-30
你加一个c51.h的头文件试试 好久没写过 也看不到你的完整代码 你试试先
第2个回答  2018-11-29
void前面那不是少了个}吗。本回答被提问者采纳
第3个回答  2018-11-29
截图……追问

我把中断函数移上去以后就提示空白处有问题。。

追答

time0改成timer0试试

相似回答