Professional Documents
Culture Documents
#include "p12f1822.inc"
__CONFIG _CONFIG1, _FOSC_INTOSC & _WDTE_OFF & _PWRTE_OFF & _MCLRE_ON & _CP_OFF
& _CPD_OFF & _BOREN_OFF & _CLKOUTEN_OFF & _IESO_OFF & _FCMEN_OFF
__CONFIG _CONFIG2, _WRT_OFF & _PLLEN_OFF & _STVREN_OFF & _BORV_LO & _LVP_OFF
CBLOCK 0X20
M1A
M1B
M2A
M2B
M3A
M3B
S3
DUTY_1
DUTY_2
ENDC
;inicializamos el registro de origen
ORG 0
; AN4, PIN-3 IS ANALOG INPUTS, ALL OTHER PINS ARE DIGITAL I/O
BANKSEL ANSELA
CLRF ANSELA ; ANSELA = 00
BSF ANSELA,ANSA4 ; PIN_3 AN3 IS ANALOG INPUT V_POT
BANKSEL TRISA
MOVLW B'00111010'
MOVWF TRISA
BANKSEL T2CON
BSF T2CON,TMR2ON ; HABILITAMOS timer 2
BANKSEL 0
CLRF M1A
CLRF M1B
CLRF M2A
CLRF M2B
CLRF M3A
CLRF M3B
CLRF S3
BCF STATUS,C
;-----------------------------------------------------------------------
REPETIR
CALL ADC_LECTURA
CALL ADC_MULT
CALL PWM_OUT
MOVLW 'N'
CALL TX_ENVIAR
MOVLW '='
CALL TX_ENVIAR
MOVF DUTY_2
CALL TX_ENVIAR
CALL TX_SALTO_LINEA
GOTO REPETIR
RETURN
MOVF M2B,0
ADDWFC M3B,1 ;RESULTADO EN M3B
MOVLW .0
ADDWFC S3,1 ;AQUI SUMAMOS EL ULTIMO DIGITO CON EL CARRIE
;AHORA SUMAMOS EL RESULTADO CON EL M1
BCF STATUS,C
MOVF M1A,0
ADDWF M3A,1 ;RESULTADO FINAL DEL PRIMER BYTE (SE DESCARTA)
MOVF M1B,0
ADDWFC M3B,1 ;RESULTADO FINAL SEGUNDO BYTE EN M3B
MOVLW .0
ADDWFC S3,1 ;RESULTADO FINAL TERCER BYTE S3
;RESULTADO ES( S3(2BITS) M3B(8BITS)) = (MSB LSB)
RETURN
PWM_OUT
BANKSEL 0
MOVF M3B,0 ;LLEVO EL PRIMER BYTE AL ACUMULADOR
MOVWF DUTY_2 ; asignamos el ancho depulso
BCF STATUS,C
RRF S3,1
RRF DUTY_2,1
BCF STATUS,C
;PASAMOS LOS LSB DE M3B A EL REG CCP1CON
BANKSEL 0
BTFSS M3B,0
GOTO NEX1
BANKSEL CCP1CON
BSF CCP1CON,4
GOTO NEX2
NEX1
BANKSEL CCP1CON
BCF CCP1CON,4
NEX2 ;PASAMOS EL OTRO BIT AL REGISTRO MENOS SIGNIFICATIVO
BANKSEL 0
BTFSS M3B,1
GOTO NEX11
BANKSEL CCP1CON
BSF CCP1CON,5
GOTO NEX22
NEX11
BANKSEL CCP1CON
BCF CCP1CON,5
NEX22
;TERMINAMOS DE COLOCAR TODO EL REGISTRO DUTY
;HABILITAMOS LA BANDERA DE ENVIO
BANKSEL 0
MOVF DUTY_2,0
BANKSEL CCPR1L
MOVWF CCPR1L ;CARGO DUTY MAS SIGNIFICATIVO
RETURN
TX_HEXADECIMAL
RETURN
END