8051 有没有产生PWM的源程序,要只用一个定时器?
以下为T0,T1定时器 产生PWM程序:
#include < reg52.h >
#include < intrins.h >
sbit K1 =P3^4; //增加键
sbit K2 =P3^5; //减少键
unsigned char PWM=0x7f; //赋初值
void delayms(unsigned char ms);
void delay(unsigned char t);
void main()
{
TMOD=0x21;
TH0=0xfc; //1ms延时常数
TL0=0x66; //频率调节
TH1=PWM; //脉宽调节
TL1=0;
EA=1;
ET0=1;
ET1=1;
TR0=1;
while(1)
{
do{
if(PWM!=0xff)
{PWM++; delayms(10);}
}
while(K1==0);
do{
if(PWM!=0x02)
{PWM--; delayms(10);}
}
while(K2==0);
}
}
/*********************************************************/
// 定时器0中断服务程序.
/*********************************************************/
void timer0() interrupt 1
{
TR1=0;
TH0=0xfc;
TL0=0x66;
TH1=PWM;
TR1=1;
 1=0x00; //启动输出
}
/*********************************************************/
// 定时器1中断服务程序
/*********************************************************/
void timer1() interrupt 3
{
TR1=0;
 1=0xff; //结束输出
}
/*********************************************************/
// 延时子程序
/*********************************************************/
void delayms(unsigned char ms)
{
unsigned char i,j;
for(i=ms;i>0;i--)
for(j=110;j>0;j--);
}
|