
#include "reg52.h"
#include <intrins.h>
sfr AUXR = 0x8E;
sbit sg20_ctrl = P1^0;
sbit led1 = P2^0;
int jd; //转到的角度
int cnt = 0; //计数次数
void Timer0_Init(void) //500微秒@11.0592MHz
{
AUXR &= 0x7F; //定时器时钟12T模式
TMOD &= 0xF0; //设置定时器模式
TMOD |= 0x01; //配置定时器0工作模式位16位计时
TL0 = 0x33; //设置定时初始值
TH0 = 0xFE; //设置定时初始值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
ET0 = 1; //使能定时器0中断
EA = 1; //
}
void Delay300ms(void) //@11.0592MHz
{
unsigned char data i, j, k;
_nop_();
i = 3;
j = 26;
k = 223;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void Delay2000ms(void) //@11.0592MHz
{
unsigned char data i, j, k;
_nop_();
i = 15;
j = 2;
k = 235;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void sg20_init(void)
{
cnt++;
TL0 = 0x33; //设置定时初始值
TH0 = 0xFE; //设置定时初始值
//控制PWM波
if(cnt < jd)
{
sg20_ctrl = 1;
}
else
{
sg20_ctrl = 0;
}
if(cnt == 40) //20ms到了
{
cnt = 0;
sg20_ctrl = 1;
}
}
void sg20_process(void)
{
jd = 4;
cnt = 0;
Delay2000ms();
jd = 1;
cnt = 0;
Delay2000ms();
}
void main(void)
{
//使硬件稳定一会
Delay300ms();
//定时器初始化
Timer0_Init();
//赋初值
jd = 1;
cnt = 0;
sg20_ctrl = 1;
while(1)
{
sg20_process();
}
}
void Timer0_Isr(void) interrupt 1
{
sg20_init();
}