PWM_DUTY equ 7FH ;CICLO DE TRABAJO
PWM_CTA equ 7EH
PWM_OUT equ P1.1 ;señal pwm
;**************************************
org 0
sjmp INICIO
;-------------------------------------------------------
; ------- Rutina de interrupción PWM -------
;-------------------------------------------------------
Org 0BH ;vector de interrupción del Timer0
PWM_SERVO:
djnz PWM_CTA,PWM_CHK
mov PWM_CTA,#200
clr PWM_OUT
reti
PWM_CHK:
xch A,PWM_CTA
cjne A,PWM_DUTY,PWM_fin
setb PWM_OUT
PWM_fin:
xch A,PWM_CTA
reti
;*************************************
; ------- Inicio de programa principal -------
;-------------------------------------------------------
INICIO:
acall COND_INI
CICLO1:
mov A,PWM_DUTY
cjne A,#200,INCREMENTA
sjmp DECREMENTA
INCREMENTA:
inc PWM_DUTY
acall RETARDO
sjmp CICLO1
CICLO2:
mov A,PWM_DUTY
cjne A,#0,DECREMENTA
sjmp CICLO1
DECREMENTA:
dec PWM_DUTY
acall RETARDO
sjmp CICLO2
;-------------------------------------------------------
RETARDO:
djnz R7,$
djnz R6,RETARDO
ret
;*************************************
; ------- Rutina de configuración del sistema -------
;--------------------------------------------------------
COND_INI:
mov TMOD,#02H
mov TL0,#48H
mov TH0,#48H ;T = 20mSeg, xtal 11.059 MHz
setb TR0
mov IE,#82H
clr PWM_OUT
mov PWM_DUTY,#0
mov PWM_CTA,#200
ret
;***************************************
end