PWM DATA 31H ;PWM周期
COUNTER DATA 32H
pwmhmin DATA 33H
ORG 0000H
AJMP MAIN
;ORG 0003H
;AJMP INT_X0
;ORG 0013H
;AJMP INT_X1
ORG 000BH
AJMP INT_T0
ORG 0100H
MAIN:
MOV SP,#60H ;给堆栈指针赋初值
mov ie,#87h
MOV PWMH,#02H ;
MOV COUNTER,#01H
MOV PWM,#14H
MOV TMOD,#02H ;定时器0在模式2下工作
MOV TL0,#38H ;定时器每200us产生一次溢出
MOV TH0,#38H ;自动重装的值
SETB ET0 ;使能定时器0中断
SETB EA ;使能总中断
SETB TR0
SETB IT0
SETB IT1
sjmp $
INT_X0:
MOV A,PWMH
CJNE A,PWM,INC1
SJMP EXIT1
INC1:
clr TR0
MOV A,PWMH
INC A
MOV PWMH,A
EXIT1:
setb TR0
RETI
INT_X1:
MOV A,PWMH
CJNE A,#01h,DEC1
SJMP EXIT2
DEC1:
clr TR0
MOV A,PWMH
DEC A
MOV PWMH,A
EXIT2:
setb TR0
RETI
INT_T0:
INC COUNTER ;计数值加1
MOV A,COUNTER
CJNE A,PWMH,INTT01 ;如果等于高电平脉冲数
CLR P1.0 ;P1.0变为低电平
INTT01: CJNE A,PWM,INTT02 ;如果等于周期数
MOV COUNTER,#01H ;计数器复位
SETB P1.0 ;P1.0为高电平
INTT02:
RETI
END
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』