"Teoría es cuando se sabe todo y nada funciona. Práctica es cuando todo funciona y nadie sabe porqué. En este recinto se conjugan Teoría y Práctica: nada funciona y nadie sabe porqué..."

---------------------------------------------------------------


Ejemplo para generar una Señal PWM por Interrupción

Este ejemplo, genera una señal modulada por ancho de pulso (PWM) con un periodo de 20 mSeg y un ciclo de trabajo de 0 a 100% y de regreso. La variación mínima del ancho del pulso es de 0.5% (1/200).

;definición de variables y constantes

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