同意2楼的说法:你的循环一旦进入,无法退出!所以复位之后在发送才好使!
看看我的程序怎么样?
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit fm=P2^3;
uint a,flag,count;
void init()
{
TMOD=0x20;//设置定时器T1为工作方式2
TH1=0xfd;//装初始值设置波特率为:9600bps
TL1=0xfd;
TR1=1;
SM0=0;
SM1=1;
REN=1;
EA=1;
ES=1;
}
void delay_ms(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void main()
{
init();
while(1)
{
if(flag==1)//如果标志位置1,说明接收到数据了
{
flag=0;
while(a=='1')//发送1给单片机时,蜂鸣器以400ms频率发声
{
delay_ms(400);
fm=~fm;
}
while(a=='2')//发2时以200ms频率发声
{
delay_ms(200);
fm=~fm;
}
while(a=='3')//发3时以100ms频率发声
{
delay_ms(100);
fm=~fm;
}
while(a=='4')//发4时关闲蜂鸣器
{
fm=1;
}
}
}
}
void ser() interrupt 4
{
RI=0;
a=SBUF;//单片机接收到数据后,将数据传入变量a
flag=1;//标志位置1
}
|