#include<stc15f2k60s2.h>
#define uint unsigned int
#define uchar unsigned char
sbit P1_0=P1^0;
void dutyANDf(float duty,float f)
{
int Xt1,Xt0;
float t1,t0;
uchar h1,l1,h0,l0;
t1=duty/f; //高电平时长
t0=(1/f)-t1; //低电平时长
Xt1=65536-1000000*t1; //高电平的时长转换成的定时器16位数
Xt0=65536-1000000*t0;; //低电平的时长转换成的定时器16位数
TMOD=0X01;
TR0=1;
h1=(uchar)(Xt1>>8); //高电平高八位保存
l1=(uchar)Xt1; //高电平低八位保存
h0=(uchar)(Xt0>>8); //低电平高八位保存
l0=(uchar)Xt0; //低电平低八位保存
while(1)
{
TH0=h1;
TL0=l1;
do{}while(!TF0);
P1_0=!P1_0;
TF0=0;
TH0=h0;
TL0=l0;
do{}while(!TF0);
P1_0=1;
TF0=0; //溢出复位
}
}
void main()
{
dutyANDf(0.989,55.55);//占空比以及频率 占空比为小数(即百分比)duty=98.9%,f=55.55hz p1^0口观看PWM波形
while(1);
}
|