#include <reg52.h>
unsigned int HighRH=0;
unsigned int HighRL=0;
unsigned int LowRH=0;
unsigned int LowRL=0;
void ConfigPWM(unsigned int,unsigned char);
void ClosePWM();
void delay(unsigned int xms)
{
unsigned int j;
unsigned int k;
for(j=xms;j>0;j--)
for(k=110;k>0;k--);
}
void main()
{
while(1)
{
ConfigPWM(50,3);
delay(500);
ConfigPWM(50,6);
delay(500);
ConfigPWM(50,9);
delay(500);
ConfigPWM(50,12);
delay(500);
ConfigPWM(50,15);
delay(500);
}
}
void ConfigPWM(unsigned int fr,unsigned char dc)
{
unsigned int high,low;
unsigned long tmp;
tmp=(11059200/12)/fr;
high=(tmp*dc)/100;
low=tmp-high;
high=65536-high+12;
low=65536-low+12;
HighRH=(unsigned char)(high>>8);
HighRL=(unsigned char)high;
LowRH=(unsigned char)(low>>8);
LowRL=(unsigned char)low;
TMOD&=0xfd;
TMOD|=0x01;
TH0=HighRH;
TL0=LowRH;
ET0=1;
TR0=1;
P2=0xff;
EA=1;
}
void Timer0(void) interrupt 1
{
if(P2==0xff)
{
TH0=LowRH;
TL0=LowRL;
P2=0x00;
}
else
{
TH0=HighRH;
TL0=HighRL;
P2=0xff;
}
}
|