#include <reg51.h>
#include <stdlib.h>
sbit Pulse = P2^0;
float Fixed_frequency;
#define Fixed_Period ((1.0/Fixed_frequency)*500)
unsigned int Frequency = 12;
#define Period ((1.0/Frequency)*500)
unsigned int Temp = 0, i = 1, Ms_20 = 0;
void Timer0_Init()
{
TMOD &= 0XF0;
TMOD |= 0X01;
TH0 = 0X96;
TL0 = 0X88;
ET0 = 1;
TR0 = 1;
}
void Timer1_Init()
{
TMOD &= 0X0F;
TMOD |= 0X20;
TH1 = TL1 = 256 - Period;
ET1 = 1;
TR1 = 1;
}
void main()
{
Timer0_Init();
Timer1_Init();
EA = 1;
for(;;)
{
;
}
}
void timer0() interrupt 1
{
TH0 = 0X96;
TL0 = 0X88;
Ms_20++;
if( Ms_20 == 3000)
{
Fixed_frequency = rand()%13 + 12;
ET1 = 0;
TR1 = 0;
TH1 = TL1 = 256 - Fixed_Period;
ET1 = 1;
TR1 = 1;
}
else if(Ms_20 == 6000)
{
ET0 = 0;
TR0 = 0;
ET1 = 0;
TR1 = 0;
}
if(Ms_20 < 3000)
{
Frequency+=0.1;
if(Frequency >25)
Frequency = 12;
ET1 = 0;
TR1 = 0;
TH1 = TL1 = 256 - Period;
ET1 = 1;
TR1 = 1;
}
}
void timer1() interrupt 3
{
Pulse = !Pulse;
}
//預期效果:一、打開開關,超聲波發出6KHz的低頻測試超聲,持續10秒鐘左右,1分鐘后進入工作狀
二、開始工作時超聲波頻率是12 KHz~25 KHz。2分鐘的工作,一分鐘是掃頻,一分鐘是定頻。掃頻是在12KHz~25 KHz的頻段中不斷變換頻點循環工作。循環速度是3.8秒,定頻是工作時隨機選取一個頻點工作1分鐘。
|