Hola, tengo esta programacion que hace:
;Programa que cambia el tiempo de encendido y apagado
;de dos led’s conectados al PORTD según la siguiente tabla:
; Tiempo de Encendido
; RB7 Descripción
; 1 Led encendido por 1 segundo
; 0 Led encendido por 1/2 segundo
;
; Tiempo de Apagado
; RB6 Descripción
; 1 Led apagado por 1 segundo
; 0 Led apagado por 2 segundo
list p=16f877
include <p16f877.inc>
__config (_WDT_OFF & _XT_OSC & _BODEN_OFF)
errorlevel -302 ;ignorar errores al almacenar en banco 1
;*******************************************************
;Definición de Variables
;*******************************************************
TEMPO1 equ 0x21
;*******************************************************
;Vector de Reset
;*******************************************************
org 0x0 ;Indica al ensamblador la dirección de memoria de la sig. instrucción
goto inicio
;*******************************************************
;Configuración de registros
;*******************************************************
org 0x5 ;Salta interrupciones
inicio clrf INTCON ;Borra interrupciones
bcf STATUS,RP1 ;Cambio a Banco 1
bsf STATUS,RP0
movlw b'11000111' ;configura el TMR0 con pre-escaler a 256
movwf OPTION_REG
;---------------------------------------------------------------------------------
;Descripción del registro OPTION_REG
;
;Bit 7: Deshabilita las resistencias de pull-up, ya que estan conectadas a los pulsadores en forma externa
;Bit 6: No se ocupa para el TMR0, no importa el valor
;Bit 5 T0CS: Selecciona la fuente de Reloj para TMR0, 0 = Ciclo de instrucción interno (temporizador)
;Bit 4 T0SE: Flanco de incremento, 0 = Incremento en flanco ascendente
;Bit 3 PSA: Bit de asignación del Prescaler, 0 = Divisor asignado al TMR0
;Bit 2-0 PS2,PS1,PS0: en 1, Selección del prescaler en 256
;---------------------------------------------------------------------------------
clrf TRISE ;Habilita PORTD como I/O digital
clrf TRISD ;PORTD como salida
movlw b'11000000' ;Configura RB7 y RB6 como entradas
movwf TRISB ;y los demás pines como salida
bcf STATUS,RP0 ;vuelve a banco 0
;*******************************************************
;Programa Principal
;*******************************************************
ppal btfss PORTB,7 ;Comprueba RB7
goto RB7_0 ;Salta a rutina para encender 1/2 seg
call TIME_1s
goto LED_ON ;Salta a rutina que enciende el led
RB7_0 movlw d'50' ;Carga TEMPO1 con el valor 50
movwf TEMPO1 ;para temporizar 1/2 segundo
LED_ON movlw b'00000011'
movwf PORTD ;enciende led
call DELAY10 ;Llama a la rutina que ocupa el TMR0
btfss PORTB,6 ;Comprueba RB6
goto RB6_0 ;Salta a rutina para encender 1/2 seg
call TIME_1s
goto LED_OFF ;Salta a rutina que enciende el led
RB6_0 movlw d'200' ;Carga TEMPO1 con el valor 200
movwf TEMPO1 ;para temporizar 2 segundo
LED_OFF clrf PORTD ;Apaga los led's
call DELAY10 ;Llama a la rutina que ocupa el TMR0
goto ppal
;****************************************************************
;Rutina que carga TEMPO1 para temporizar 1 segundo
;****************************************************************
TIME_1s movlw d'100' ;Carga TEMPO1 con el valor 100
movwf TEMPO1 ;para temporizar 1 segundo
return ;Vuelve al programa
;****************************************************************
;Rutina de Temporización , que ocupa el TMR0, sin interrupciones
;****************************************************************
DELAY10 bcf INTCON,2 ;borra el flag de estado del TMRO
movlw d'216'
movwf TMR0 ;Carga TMRO para que cuente 39 (255-216)
DELAY10_1 btfss INTCON,2 ;Espera overflow del TMRO
goto DELAY10_1
decfsz TEMPO1,1 ;Repite TEMPO1 veces, depende del valor dado por RB7 y RB6
goto DELAY10 ;con lo que se logran 1/2, 1 y 2 segundos
return ;Vuelve al programa
end
AHORA NECESITO QUE REALICE ESTO, PERO NO ME RESULTA:
Tiempo de Encendido
RB7 Descripción
1 Led encendido por 2 segundo
0 Led encendido por 1 segundo
Tiempo de Apagado
RB6 Descripción
1 Led apagado por 3 segundo
0 Led apagado por 4 segundo
MUCHAS GRACIAS