Keil编程的AT89C51,我不知道该怎么修改!才正确!

#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit Key = P1^7;
sbit DoorBell = P3^0;
uint p = 0;

void Timer0() interrupt 1
{
DoorBell = ~DoorBell;
p++;
if(p<400)
{
TH0 = (8192-700)/32;
TL0 = (8192-700)%32;
}
else if(p<800)
{
TH0 = (8192-1000)/32;
TL0 = (8192-1000)%32;
}
else
{
TR0 = 0;
P = 0;
}
}

void main()
{
IE = 0x82;
TMOD = 0x00;
TH0 = (8192-700)/32;
TL0 = (8192-700)%32;
while(1)
{
if(Key == 0)
{
TR0 = 1;
while(Key==0);
}
}

Text1.a(14): error A9: SYNTAX ERROR
Text1.a(15): error A9: SYNTAX ERROR
Text1.a(16): error A9: SYNTAX ERROR
Text1.a(42): error A56: UNBALANCED IF-ENDIF CONTROLS
Text1.a(42): warning A41: MISSING 'END' STATEMENT
Target not created

第1个回答  2012-05-06
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit Key = P1^7;
sbit DoorBell = P3^0;
uint p = 0;

void Timer0() interrupt 1
{
DoorBell = ~DoorBell;
p++;
if(p<400)
{
TH0 = (8192-700)/32;
TL0 = (8192-700)%32;
}
else if(p<800)
{
TH0 = (8192-1000)/32;
TL0 = (8192-1000)%32;
}
else
{
TR0 = 0;
P = 0;
}
}

void main()
{
IE = 0x82;
TMOD = 0x00;
TH0 = (8192-700)/32;
TL0 = (8192-700)%32;
while(1)
{
if(Key == 0)
{
TR0 = 1;
while(Key==0);
}
}
}
Build target 'Target 1'
assembling STARTUP.A51...
compiling ewrwrwr.c...
linking...
Program Size: data=11.0 xdata=0 code=232
creating hex file from "ewrwrwr"...
"ewrwrwr" - 0 Error(s), 0 Warning(s).................................
第2个回答  2012-05-06
1、你的main函数少了个大括号
2、你这个程序是C语言,所以要保存为.C文件,而不是.a
3、C语言的程序必须有启动代码,就是STARTUP.A51这个文件,这个是在你建立项目,选择MCU的时候KEIL替你生成的。

你的代码我试过了,没问题的。本回答被提问者采纳
相似回答