暂时不看你的硬件,先看你的程序。
依据你的思想,在程序中因该注意的几点是:
首先中断总允许EA=1;要在初始化的最后允许。
其次中断的应用用不用using一般没什么问题,有时候用了可能还会发生冲突。
在中断程序中每一秒钟都控制蜂鸣器关闭一次,引起重复操作。可以在中断中设置标志位,主程序判断。
在主程序中再设置标志位,使其蜂鸣器程序只执行一次。
宪程序可以更改如下:
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit BEEP=P3^7;
uint n,nn;
uint j,Timer_flag,Stop_flag;
void delay500(void)
{
uchar i;
for(i=230;i>0;i--);
}
void beep_beep()
{
if(Stop_flag==0)
{
for(j=200;j>0;j--)
{
BEEP=~BEEP; //输出频率1KHz
delay500(); //延时500us
}
for(j=200;j>0;j--)
{
BEEP=~BEEP; //输出频率500Hz
delay500(); //延时1ms
delay500();
}
}
}
main()
{
TMOD=0x01;
TH0=0xfc;
TL0=0x66; //1ms定时
ET0=1;
TR0=1;
EA=1;
while(1)
{
beep_beep();
if(Timer_flag)
{
BEEP=1; //关闭蜂鸣器
}
Stop_flag=1;
}
}
void Time0(void) interrupt 1
{
TH0=0xfc; //1ms定时
TL0=0x66;
n++;
if(n==100)
{
n=0;
nn++;
}
if(nn==5)
{
nn=0;
Timer_flag=1;
}
}
|