题目:
1.由上位机发送1给单片机时,蜂鸣器以400ms频率发声,发2时以200ms频率发声,发3时以100ms频率发声,发4时关闲蜂鸣器。
我的程序如下:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar flag,a;
sbit d=P0^0;
void init()
{
TMOD=0x20;//设置定时器1为工作方式2
TH1=0xfd;
TL1=0xfd;
TR1=1;//开定时器1
REN=1;//开串口通信
SM0=0;//设置串口通信方式1
SM1=1;
EA=1;//开总中断
ES=1;//开串口中断
}
void delay(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)
{
ES=0;
flag=0;
SBUF=a;//赋给发送缓冲器
while(!TI)
{
if(a=='1')
{
while(!ES)
{
d=0;
delay(400);
d=1;
delay(400);
if(TI==0)
{
TI=1;
ES=1;
}
}
}
else if(a=='2')
{
while(!ES)
{
d=0;
delay(200);
d=1;
delay(200);
if(TI==1)
{
TI=0;
ES=1;
}
}
}
else if(a=='3')
{
while(!ES)
{
d=0;
delay(100);
d=1;
delay(100);
if(TI==1)
{
TI=0;
ES=1;
}
}
}
else if(a=='4')
{
d=1;
if(TI==1)
{
TI=0;
ES=1;
}
}
TI=0;
ES=1;
}
}
}
/* {
if(RI==1)//RI=1表示收到数据
{
RI=0;
P1=SBUF;
}
}*/
}
void ser() interrupt 4
{
RI=0;
// P1=SBUF;
a=SBUF;//中间变量
flag=1;
}
我在做这个实验的时候~发现~只能一次控制蜂鸣器的响灭~~即必须复位之后才能再次发送~!不知是什么原因~
由于本人实在是没有财富值~还是请大侠们帮个忙啊~!
我学的是郭天祥的51单片机!
学的是郭天祥的51单片机!
郭天祥,自己的基本概念不清,就来误导别人!!!
你要求‘‘蜂鸣器以400ms频率发声’’,这不是瞎扯吗?
大家都知道,频率的单位是 Hz,哪能是 ms ?
郭天祥,你来发一个400ms频率的声音,让大家听听!!!