PWMH1 DATA 30H ;高電平脈沖的個數
PWMH2 DATA 31H
PWMH3 DATA 32H
PWM DATA 33H ;PWM周期
COUNTER DATA 35H
TEMP DATA 36H
ORG 0000H
AJMP MAIN
ORG 000BH
AJMP INTT0
ORG 0100H
MAIN:
MOV SP,#60H ;給堆棧指針賦初值
MOV TMOD,#02H ;定時器0在模式2下工作
MOV TL0,#38H ;定時器每200us產生壹次溢出
MOV TH0,#38H ;自動重裝的值
SETB ET0 ;使能定時器0中斷
SETB EA ;使能總中斷
SETB TR0 ;開始計時
MOV PWMH1,#2 ; PWM 1 占空比 可以修改
MOV PWMH2,#5 ; PWM 2 占空比 可以修改
MOV PWMH3,#8 ; PWM 3 占空比 可以修改
MOV COUNTER,#0
MOV PWM,#16 ; 占空比 為 16 級 可以修改
JMP $
INTT0: ; 幾個參數需要 定義 三路 PWM 占空比 可以不同
PUSH PSW ; 現場保護
PUSH ACC
INC COUNTER ; 計數值加1
MOV A,COUNTER
CJNE A,PWMH1,INTT01 ; 如果等於高電平脈沖數
CLR P1.0 ; P1.0變為低電平 PWM1
INTT01:
CJNE A,PWMH2,INTT02 ; 如果等於高電平脈沖數
CLR P1.1 ; P1.1變為低電平 PWM2
INTT02:
CJNE A,PWMH3,INTT03 ; 如果等於高電平脈沖數
CLR P1.2 ; P1.2變為低電平 PWM3
INTT03:
CJNE A,PWM,INTT05 ;如果等於周期數
MOV COUNTER,#0 ;計數器復位
SETB P1.0 ;P1.0為高電平
SETB P1.1 ;P1.1為高電平
SETB P1.2 ;P1.2為高電平
INTT05:
POP ACC ;出棧
POP PSW
RETI
END