;Programa experimental para generar una señal PWM
;----------------------------------------------------------------------------------------------------------------
; DIRECTIVAS
;----------------------------------------------------------------------------------------------------------------
LIST P = 16F84
INCLUDE "P16F84A.INC"
;----------------------------------------------------------------------------------------------------------------
; DECLARACI”N DE VARIABLES
;----------------------------------------------------------------------------------------------------------------
CICLO EQU 0F ;Para memorizar el ciclo de trabajo.
CONTATORE_1 EQU 0D ;Para memorizar el multiplicador d Ton.
CONTATORE_2 EQU 0E ;Memoria necesaria para DELAY_15µs.
;----------------------------------------------------------------------------------------------------------------
; VECTOR DE RESET
;----------------------------------------------------------------------------------------------------------------
ORG 0 ;Inicio en Reset.
;----------------------------------------------------------------------------------------------------------------
; CONFIGURACI”N DE LAS PUERTAS
;--------------------------------------------------------------------------------------------------------------- BSF STATUS,5 ;Paso por P·gina1.
BSF STATUS, RP0
MOVLW 0Xff ;Se configura el
MOVWF TRISA ;PORTB en USCITA.
CLRF TRISB
BCF STATUS,5 ;Regreso a P·gina0.
;-----------------------------------------------------------------------------------------------------------------
; PROGRAMA PRINCIPAL
;-----------------------------------------------------------------------------------------------------------------
RESET CLRF PORTA ;Se define el ciclo de
CLRF PORTB ;trabajo (para un 50 %).
INICIO BCF STATUS, RP0 ; Bank 0
MOVLW 0X0A ;
MOVWF EEADR ; Address to read
BSF STATUS,RP0 ; Bank 1
BSF EECON1,RD ; EE Read
ESPER BTFSC EECON1,RD ; Espera final de lectura
GOTO ESPER ; a que baje la bandera
BCF STATUS,RP0 ; Bank 0
MOVF EEDATA,W ; W = EEDATA
MOVWF CICLO
SUBLW 0X00
BTFSC STATUS,2
INCF CICLO,1
INIZIO CALL CONTROL
;Transferencia del contenido de
MOVF CICLO,w
MOVWF CONTATORE_1 ;CICLO en CONTATORE_1 (CONTATORE_1
GOTO T_ON ;contiene 127).
T_ON BSF PORTB,0 ;Se pone a 1 la salida RB0 (encendido
BCF PORTB,1
;del diodo LED).
CALL DELAY_15µs ;Se llama la temporizaziÛn y se
DECFSZ CONTATORE_1,f ;repite per el nÿmero de veces
GOTO T_ON ;especificado en CONTATORE_1 (aquÌ:127).
MOVLW 0XFF ;Se carga CONTATORE_1 con 255 (valor
MOVWF CONTATORE_1 ;m·ximo cargable en un octeto).
MOVF CICLO,w ;Transferencia de CICLO a W.
SUBWF CONTATORE_1,f ;Resta de 255 y el contenido de
;CICLO (aquÌ: 255-127 = 128).
T_OFF BCF PORTB,0 ;Se lleva a 0 la salida RB0 (se apaga
BSF PORTB,1 ;el diodo LED).
CALL DELAY_15µs ;Se llama la temporizaciÛn y se
DECFSZ CONTATORE_1,f ;repite por el nÿmero de veces
GOTO T_OFF ;especificado en CONTATORE_1 (aqui: 128).
CALL GRABA
GOTO INIZIO
;----------------------------------------------------------------------------------------------------------------
; TEMPORIZACI”N
;----------------------------------------------------------------------------------------------------------------
DELAY_15µs MOVLW 0X02
MOVWF CONTATORE_2
TEMPO clrwdt
DECFSZ CONTATORE_2,f
GOTO TEMPO
GOTO FINE
FINE RETURN
CONTROL BTFSS PORTA,0
CALL SUBE
BTFSS PORTA,1
CALL BAJA
RETURN
SUBE DECF CICLO,1
MOVF CICLO,W
SUBLW 0X01
BTFSS STATUS,2
RETURN
INCF CICLO,1
RETURN
BAJA INCF CICLO,1
MOVF CICLO,w
SUBLW 0XFE
BTFSS STATUS,2
RETURN
DECF CICLO,1
RETURN
GRABA ; Establecer EEADR y EEDATA
MOVLW 0X0A
MOVWF EEADR ; Escribe la dirección en EEADR
MOVF CICLO,w
MOVWF EEDATA ; Se escribe el dato en EEDATA
BSF STATUS,RP0 ; Selecciona el banco 1
BSF EECON1,WREN ; Permiso de escritura activado
;Comienzo de la secuencia de escritura
MOVLW 0x55
MOVWF EECON2 ; Se escribe el dato 55 h en EECON2
MOVLW 0xAA
MOVWF EECON2 ; Se escribe AA h en EECON2
BSF EECON1,WR ; Comienza la escritura
BCF EECON1,WREN ; Permiso de escritura desactivado
;ESPERA BTFSC EECON1,WR ; Espera a que termine la escritura
; GOTO ESPERA
BCF STATUS,RP0 ; Selecciona el banco
RETURN
END