PWM_DUTY equ 7FH ;CICLO DE TRABAJO
PWM_TMP1 equ 7EH
PWM_TMP2 equ 7DH
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:
mov PWM_TMP2,A
djnz PWM_TMP1,PWM_CHK
mov PWM_TMP1,#200
clr PWM_OUT
reti
PWM_CHK:
xch A,PWM_TMP1
cjne A,PWM_DUTY,PWM_fin
setb PWM_OUT
PWM_fin:
xch A,PWM_TMP1
mov A,PWM_TMP2
reti
;*************************************
; ------- Inicio de programa principal -------
;-------------------------------------------------------
INICIO:
acall COND_INI
INICIO00:
mov A,PWM_DUTY
cjne A,#200,INCREMENTA
sjmp DECREMENTA
INCREMENTA:
inc PWM_DUTY
acall RETARDO
sjmp INICIO00
INICIO01:
mov A,PWM_DUTY
cjne A,#0,DECREMENTA
sjmp INICIO00
DECREMENTA:
dec PWM_DUTY
acall RETARDO
sjmp INICIO01
;-------------------------------------------------------
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 ;valor de inicio 0º
mov PWM_TMP1,#200
ret
;***************************************
end