单片机串口程序问题,下面是我编的程序

来源:百度知道 编辑:UC知道 时间:2024/05/14 09:02:38
#include<reg52.h>//用数字控制蜂鸣器的响声频率,可是在keil软件仿真中不能正常调试,帮我看看
sbit feng=P2^3;
int flag,flag1,flag2,flag3,flag4,tlag,tlag1,dat;
void main()
{
dat=0;
EA=1;
ES=1;
ET0=1;
ET1=1;
TMOD=0x21;
PCON=0x00;
SCON=0X50;
TH1=0xfd;
TL1=0xfd;
TH0=0x4c;
TL0=0x00;
TR0=1;
TR1=1;
while(1)
{
while(dat==0)
{
if(flag1==1)
{
flag1=0;
feng=!feng;
}
}
while(dat==1)
{
if(flag2==1)
{
flag2=0;
feng=!feng;
}
}
while(dat==2)
{
if(flag3==1)
{
flag3=0;
feng=!feng;
}
}
while(dat==3)
{
feng=1;
}

}

}

void haha1() interrupt 4
{

我是在你的程序上做了个人的最少的必要修改
代码如下:

#include "reg52.h"

sbit feng=P2^3;
int flag,flag1,flag2,flag3,flag4,tlag,tlag1,dat;

//----------------延时函数-------------------------//
//在I/O口驱动蜂鸣器后加入必要延时,否则将听不到声音
void delay(unsigned char time)
{
while(time--);
}
//-------------------------------------------------//

void main()
{
dat=0;
EA=1; //开总中断
ES=1; //开串行中断
ET0=1; //开定时器0中断
ET1=1; //开定时器1中断
TMOD=0x21;
PCON=0x00;
SCON=0X70; //SM2=1,只有才收到有效停止位时,才激活 RI=1
//你原来的程序是 0x50
TH1=0xfd;
TL1=0xfd;
TH0=0x4c;
TL0=0x00;
TR0=1;
TR1=1;
while(1)
{
while(dat==0)
{
if(flag1==1)
{
flag1=0;
feng=!feng;
delay(10); //具体延时情况根据你实际情况调节函数的形参大小
}
}

while(da