Está en la página 1de 5

#INCLUDE "P16F877A.

INC"

ORG 0x0 ;programa principal

GOTO PRINCIPAL ;vamos al programa principal

ORG 0x0004 ;direccion de las interrupciones

GOTO ISR ;vamos a la interrupcion

PRINCIPAL
CALL INIC_E

CALL INIC_C

CALL T0_VI

CALL INIC_T0

CALL INIC_T1

CALL INIC_CCP1

CALL INIC_T2_CCP2

CALL INIC_INT ;NUEVO

BUCLE

GOTO BUCLE

ISR

BTFSS INTCON,T0IF

GOTO T0IF_ES_CERO

T0IF_ES_UNO

CALL BORRAR_T0IF

CALL INVERTIR_RE0

CALL T0_VI

RETFIE

T0IF_ES_CERO

CALL BORRAR_CCP1IF

CALL INVERTIR_RE2

RETFIE

INIC_INT

BANKSEL INTCON

BSF INTCON,GIE ; habilitador global

BSF INTCON,T0IE ;habilitador locar timer0

BSF INTCON,PEIE ;habilitamos perifericos externos

BANKSEL PIE1

BSF PIE1,2 ;habilitados local de ccp1


RETURN

INIC_C

BANKSEL PORTC

CLRF PORTC

BANKSEL TRISC ;Seleccionamos portc

CLRF TRISC ;como salida

RETURN

INIC_E

BANKSEL ADCON1 ;ponemos los pines PORTA

MOVLW B'00000110' ;PORTE como pines

MOVWF ADCON1 ;digitales

BANKSEL TRISE

CLRF TRISE ;seleccionamos el

BANKSEL PORTE ;portE como salida

CLRF PORTE

RETURN ;NUEVO

INIC_T0

BANKSEL OPTION_REG ; cnfigiramos el t0

MOVLW B'00000101' ;como temporizador

MOVWF OPTION_REG ;y preescalador 1:64

RETURN

INIC_T1

BANKSEL TMR1H

CLRF TMR1H

BANKSEL TMR1L

CLRF TMR1L

BANKSEL T1CON

MOVLW B'00010100' ; preescalador 1:2 y

MOVWF T1CON ;timer detenido


BSF T1CON,TMR1ON ;arrancamos el timer1

RETURN

INIC_T2_CCP2

BANKSEL PR2

MOVLW D'234' ;seteamos el periodo

MOVWF PR2

BANKSEL CCPR2L ; seteamos el ciclo

MOVLW D'140' ;de

MOVWF CCPR2L ;NUEVO trabajo

BANKSEL T2CON

MOVLW B'01111101' ;timer2 encendido

MOVWF T2CON ;con preescalador 1:4

BANKSEL CCP2CON

MOVLW B'00111100' ;bits menos significativos del

MOVWF CCP2CON ;ciclo de trabajo y cn modo pwm

RETURN

INIC_CCP1

BANKSEL CCPR1H ;seteamos ccpr1h

MOVLW HIGH(D'45536')

MOVWF CCPR1H

BANKSEL CCPR1L ;seteamos ccpr1l

MOVLW LOW(D'45536')

MOVWF CCPR1L

BANKSEL CCP1CON

MOVLW B'00001011' ;Modo comparacion, disparador

MOVWF CCP1CON ;de evento especial

RETURN

BORRAR_T0IF

BANKSEL INTCON
BCF INTCON,T0IF ;NUEVO

RETURN

BORRAR_CCP1IF

BANKSEL PIR1

BCF PIR1,2

RETURN

INVERTIR_RE2

MOVLW B'00000100'

BANKSEL PORTE

XORWF PORTE ;NUEVO

RETURN

INVERTIR_RE0

MOVLW B'00000001'

BANKSEL PORTE

XORWF PORTE ;NUEVO

RETURN

T0_VI

BANKSEL TMR0 ;seteamos el valor

MOVLW D'57' ;inicial para

MOVWF TMR0 ;el timer cero

RETURN

END

También podría gustarte