Hola señores.
He estado aprendiendo sobre los pic desde hace como 3 días y estoy armando un semaforo con un PIC16F84A compilado en MPLAB y en lenguaje ENSAMBLADOR para una tarea de la U, para la cual se ha puesto unas condiciones, las cuales son:
CONDICIONES:
Luz en Rojo: La luz roja debe estar encendida durante 20 segundos.
Luz en Rojo-Amarillo: Las luces roja y amarilla deben estar encendidas durante 5 segundo.
Luz en Verde: La luz verde debe estar encendida durante 20 segundos.
Luz en Amarillo: La luz amarilla debe estar encendida durante 10 segundos.
Y este es el código(planteado por mi) con los retardos.
Todo iba bn, la LUZVERDE se mantiene prendida durante 20s, y luego se prende la LUZAMARILLA junto con la LUZVERDE (he simulado en PROTEUS), pero el problema se presenta con el RETARDO1 (Retardo de 5 segundos), ya que al pasar los 5 segundos deberían apagarse las dos luces, y no lo hacen por ninguna razón, he estado cacharreando pero aún no encuentro la solución. Las salidas del semaforo son RA1,RA2 Y RA3 para respectivas luces.
¿Como elaboro la rutina para que se me apaguen la LUZVERDE Y LUZAMARILLA después del RETARDO1?
He estado aprendiendo sobre los pic desde hace como 3 días y estoy armando un semaforo con un PIC16F84A compilado en MPLAB y en lenguaje ENSAMBLADOR para una tarea de la U, para la cual se ha puesto unas condiciones, las cuales son:
CONDICIONES:
Luz en Rojo: La luz roja debe estar encendida durante 20 segundos.
Luz en Rojo-Amarillo: Las luces roja y amarilla deben estar encendidas durante 5 segundo.
Luz en Verde: La luz verde debe estar encendida durante 20 segundos.
Luz en Amarillo: La luz amarilla debe estar encendida durante 10 segundos.
Y este es el código(planteado por mi) con los retardos.
Código:
#include <p16f84A.inc>
__CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC
; Asignacion de variables utilizadas en demora
CONT equ 0Ch
CONT2 equ 0Dh
CONT3 equ 0Eh
CONT4 equ 0Fh
ORG 0000h
bsf STATUS,5 ; Cambiamos al banco 1Switch to Bank 1
movlw 0000h ; Ponemos los pines del puerto A ...
movwf TRISA ; ...como salidas.
bcf STATUS,5 ; Volvemos al Banco 0.
LUZROJA movlw b'00000010' ; Encendemos el LUZROJA poniendo primero el Valor, por 20 segundos.
movwf PORTA
call RETARDO
LUZAMARILLA movlw b'00000110' ; Encendemos LUZROJA Y LUZ AMARILLA.
movwf PORTA
call RETARDO1
movlw b'00000000'
RETARDO ; Retardo de 20s
movlw d'10'
movwf CONT4;
CICLO4 movlw d'100'
movwf CONT3
CICLO3 movlw d'98'
movwf CONT2
CICLO2 movlw d'67'
movwf CONT
CICLO decfsz CONT,1
goto CICLO
decfsz CONT2,1
goto CICLO2
decfsz CONT3,1
goto CICLO3
decfsz CONT4,1
goto CICLO4
Return
RETARDO1; Reatardo de 5s
movlw d'100'
movwf CONT3
CICLO6 movlw d'100'
movwf CONT2
CICLO5 movlw d'166'
movwf CONT
CICL4 decfsz CONT,1
goto CICLO4
decfsz CONT2,1
goto CICLO5
decfsz CONT3,1
goto CICLO6
Return
END
Todo iba bn, la LUZVERDE se mantiene prendida durante 20s, y luego se prende la LUZAMARILLA junto con la LUZVERDE (he simulado en PROTEUS), pero el problema se presenta con el RETARDO1 (Retardo de 5 segundos), ya que al pasar los 5 segundos deberían apagarse las dos luces, y no lo hacen por ninguna razón, he estado cacharreando pero aún no encuentro la solución. Las salidas del semaforo son RA1,RA2 Y RA3 para respectivas luces.
¿Como elaboro la rutina para que se me apaguen la LUZVERDE Y LUZAMARILLA después del RETARDO1?
Adjuntos
Última edición por un moderador: