Es en assenbler
Amigo gracias por el dato Aqui tengo algo que hise pero e problema es que no me sale como deberia ser cunado lo similo en proteus
LIST P=16F877A
#INCLUDE <P16F877A.INC>
__CONFIG _CP_OFF & _CPD_OFF & _PWRTE_ON & _LVP_OFF & _BODEN_OFF & _XT_OSC & _WDT_OFF
ERRORLEVEL -302
CBLOCK 0X20
S_STATUS_TMR0
S_STATUS_TMR1
REG
ENDC
ORG 0X00
GOTO INICIO
ORG 0X04
GOTO ISR
ORG 0X05
INICIO
BANKSEL INTCON ;CONFIGURACION TMR0 CON PRESCALER A 1:32
MOVLW B'11000000'
; --0----- DESACTIVA LA INTRRUPCON DEL TMR0
MOVWF INTCON
BANKSEL OPTION_REG
MOVLW B'00110100'
; --1----- DESACTIVA EN TIMER0 EL MODO TEMPORIZADOR
MOVWF OPTION_REG
BANKSEL PIR1 ;CONFIGURACI[ON TMR1 y TMR2 INTERRUPT ENABLE
CLRF PIR1 ;LIMPIA EL FLAG DEL TMR1, Y TMR2
BANKSEL PIE1 ;ACTIVA LA INTERRUPCION DEL TMR1 Y TMR2
MOVLW 0X03
MOVWF PIE1
BANKSEL TRISE
MOVLW 0X00
MOVWF TRISE
BANKSEL PORTE
CLRF PORTE ;CONFIGURA EL PUERTOA
BCF REG,0
INICIO_DE_PULSO
MOVLW 0XE8
MOVWF TMR1H
MOVLW 0XDB
MOVWF TMR1L
BCF PORTE,0
CALL ACTIVA_TMR1
MAIN
GOTO MAIN
ISR
BTFSC INTCON,TMR0IF
GOTO ISR_TMR0_ON ;INTERRUPCI[ON POR TIMER0
BTFSC PIR1,TMR1IF
GOTO ISR_TMR1_ON ;INTERRUPCION POR TIMER1
RETFIE
ISR_TMR0_ON
BTFSS REG,0
GOTO CASO_1
GOTO CASO_3
ISR_TMR1_ON
BTFSS REG,0
GOTO CASO_2
GOTO CASO_4
CASO_1 ;TIEMPO DE 6mS
CALL DESACTIVA_TMR0
MOVLW 0XE8 ;CARGAMOS EL VALOR E8DB EN EL TIMER1
MOVWF TMR1H
MOVLW 0XC1
MOVWF TMR1L
BCF PORTE,0
CALL ACTIVA_TMR1
BCF INTCON,TMR0IF
RETFIE
CASO_2 ;TIEMPO DE 2.5mS
INCF REG,F
CALL DESACTIVA_TMR1
MOVLW 0XB3 ;CARGAMOS EL VALOR B1 EN EL TIMER0
MOVWF TMR0
NOP
BSF PORTE,0 ; NOP COMPLETA EL TIEMPO FALTANTE(1uS)
CALL ACTIVA_TMR0
BCF PIR1,TMR1IF
RETFIE
CASO_3 ;TIEMPO DE 3.5mS
CALL DESACTIVA_TMR0
BCF PORTE,0
MOVLW 0XF2 ;CARGAMOS EL VALOR F253 EN EL TIMER1
MOVWF TMR1H
MOVLW 0X86
MOVWF TMR1L
CALL ACTIVA_TMR1
BCF INTCON,TMR0IF
RETFIE
CASO_4 ;TIEMPO DE 4mS
DECF REG,F
CALL DESACTIVA_TMR1
NOP ; LOS NOP, COMPENSAN EL TIEMPO FALTANTE (6uS)
NOP
NOP
NOP
NOP
NOP
BSF PORTE,0
MOVLW 0X84 ;CARGAMOS EL VALOR 82 EN EL TIMER0
MOVWF TMR0
CALL ACTIVA_TMR0
BCF PIR1,TMR1IF
RETFIE
ACTIVA_TMR0
MOVF STATUS,W
MOVWF S_STATUS_TMR0
BANKSEL OPTION_REG
MOVLW B'00010100'
; --0----- ACTIVA EN TIMER0 EL MODO TEMPORIZADOR
MOVWF OPTION_REG
BANKSEL INTCON ;CONFIGURACION TMR0 CON PRESCALER A 1:32
MOVLW B'11100000' ; LIMPIA EL FLAGDE INTERRUPCION
; --1----- ACTIVA LA INTRRUPCON DEL TMR0
MOVWF INTCON
MOVF S_STATUS_TMR0,W
MOVWF STATUS
RETURN
DESACTIVA_TMR0
MOVF STATUS,W
MOVWF S_STATUS_TMR0
BANKSEL INTCON ;CONFIGURACION TMR0 CON PRESCALER A 1:32
MOVLW B'11000000' ; LIMPIA EL FLAGDE INTERRUPCION
; --0----- DESACTIVA LA INTRRUPCON DEL TMR0
MOVWF INTCON
MOVF S_STATUS_TMR0,W
MOVWF STATUS
RETURN
ACTIVA_TMR1
MOVF STATUS,W
MOVWF S_STATUS_TMR1
BANKSEL PIR1
CLRF PIR1 ;LIMPIA EL FLAG DE INTERRUPCION
BANKSEL PIE1
MOVLW 0X01
MOVWF PIE1 ;ACTIVA LA INTERRUPCION
BANKSEL T1CON
MOVLW B'00000001' ;INICIA CONTEO EN TMR_1
MOVWF T1CON
MOVF S_STATUS_TMR1,W
MOVWF STATUS
RETURN
DESACTIVA_TMR1
MOVF STATUS,W
MOVWF S_STATUS_TMR1
BANKSEL PIE1
CLRF PIE1 ;DESACTIVA LA INTERRUPCION
BANKSEL T1CON
MOVLW B'00000000' ;APAGA EL CONTEO DEL TMR_1
MOVWF T1CON
MOVF S_STATUS_TMR1,W
MOVWF STATUS
RETURN
END
Ver el archivo adjunto PRACTICA_4_MARTES.rar
Gracias de antemano.