设:
1、定时器中断时间为:T,即每经过时间T中断一次。
2、2NT为PWM的周期。
3、两个PWM分别从P1.0、P1.1输出。
方案:定义三个变量
1、变量1:TW,用于计数PWM周期(初始=0,计数值 0-2N)。
2、变量2:TH,用于计数脉部宽度(输出=1的时间)。
3、变量3:TH2,用于计数P1.1的脉冲宽度(=1的时间)。
中断服务程序这样写:
1、【PWM的周期】:每次中断 TW + 1 ,当TW = 2N 时,让TW = 0,重新计数,这样就完成PWM周期计数。
2、动作判定:
【第一路P1.0】
当TW = 0 时,让 P1.0 = 1,PWM输出1;
当TW = TH 时,让P1.0 = 0,PWM输出0,这样第一路P1.0输出1的宽度就是TH。
【第二路P1.1】
当TW = N 时,让 P1.1 = 1,这样,P1.1以50%的相差输出PWM=1;要点:同时让TH2 = TH,开始计时P1.1输出1的时间。(退出程序,跳过3、)
当TW <> N 时,执行以下3、。
3、【P1.1 = 1的时间】
如果TH2 = 0,什么也不做,保持现状(此时P1.1必定输出0)。
如果TH2 <> 0,则 TH2 -1(P1.1 = 1计时,此时P1.1必定输出1), 当TH2 = 0 时(减成0时,1应该结束了),让P1.1 = 0,这样第二路输出1的宽度就也是TH。
如此,选择不同的TH值,可得到不同的占空比,而两个输出的相差保持50%。注意:必须保证TH < TW。 |