龙符txt下载(梦入神机):帮我详细的注释一下pwm

来源:百度文库 编辑:高校问答 时间:2024/05/01 22:06:23
C51程序:
#include "reg52.h"

sbit P1_0=P1^0;
sbit P1_1=P1^1;
sbit P1_2=P1^2;

unsigned char PWMH; //高电平脉冲的个数
unsigned char PWM; //PWM周期
unsigned char COUNTER;

void K1CHECK();
void K2CHECK();

void INTTO() interrupt 1
{
COUNTER++; //计数值加1
if((COUNTER!=PWMH)&&(COUNTER==PWM)) //如果等于高电平脉冲数
{
COUNTER=1; //计数器复位
P1_0=1; //P1.0为高电平
}
else if(COUNTER==PWMH)
P1_0=0; //P1.0变为低电平
}

main()
{
PWMH=0x02;
COUNTER=0x01;
PWM=0x15;
TMOD=0x02; //定时器0在模式2下工作
TL0=0x38; //定时器每200us产生一次溢出
TH0=0x38; //自动重装的值
ET0=1; //使能定时器0中断
EA=1; //使能总中断
TR0=1; //开始计时

while(1)
{
if(P1_1==0)
K1CHECK();//扫描KEY1,
if(P1_2==0)
K2CHECK();//扫描KEY2,如果按下KEY2,跳转到KEY2处理程序
}
}
void K1CHECK()
{
while(P1_1==0);
if(PWMH!=PWM)
{
PWMH++;
if(PWMH==PWM)
{
TR0=0;
P1_0=1;
}
else
{
if(PWMH==0x02)
{
TR0=1;
}
}
}
}
void K2CHECK()
{
unsigned char TEMP;
while(P1_2==0);
if(PWMH!=0x01)
{
PWMH--;
TEMP=PWM;
TEMP--;
if(PWMH==0x01)
{
TR0=0;
P1_0=0;
}
else
{
if(PWMH==TEMP)
{
TR0=1;
}
}
}
}