#include<reg52.h>
#define off 1 //高电平时灯为关闭状态
#define on 0 //低电平时灯为开启状态
bit flag1 = 0; //接收标志位
bit flag2 = 0;
bit flag3 = 0;
sbit led = P1^7;
void main()
{
TMOD = 0x21;
SCON = 0x90; //串行方式2
SP = 0x07; //初始推栈指针
IE = 0x90; //允许串行中断
PCON = 0;
TCON = 0;
led = off;
while(1)
{
PCON = 1;
}
//当连续接收到字符串cccc5555时,将灯开启
22行 intcom_isr() interrupt 4 //串口中断
23行 {
unsigned int temp = 0;
temp = SBUF;
RI = 0;
if(temp == 0x0cc) //收到cc字符
{
if(flag1 == 0) //如果是第一次收到cc,置位flag1
{
flag1 = 1;
}
else
{
if(flag2 == 1)//如果已经接收到两次cc,说明接收字符为非法,取消所有标志位
{
flag1 = 0;
flag2 = 0;
flag3 = 0;
led = off;
}
else //接收到两次cc时,置位第二个标志位
{
flag2 = 1;
}
}
}
else if(temp == 0x55)
{
if(flag1 == 1&&flag2 == 1) //如果收到55,并且之前已经收到cccc
{
if(flag3 == 0) //如果第一次接收到55
flag3 = 1;
else //如果已经收到一次55
{
led = on;
flag1 = 0;
flag2 = 0;
flag3 = 0;
}
}
else //如果收到的数据为乱序
{
flag1 = 0;
flag2 = 0;
flag3 = 0;
led = off;
}
}
else //当收到其他字符串
{
flag1 = 0;
flag2 = 0;
flag3 = 0;
led = off;
}
}
}
Error c141: syntax error near ‘{’
Error c141: syntax error near ‘interrupt’
Warning c206: ‘intcom_isr’ :missing function prototype |