設:
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。 |