;****************************************************************************************
;semaforo
;****************************************************************************************
LIST p=16f84A ;Uso el pic 16f84a
RADIX hex ;Programo en hexadecimal
#INCLUDE "p16f84a.inc"
;****************************************************************************************
;ASIGNACIONES
;****************************************************************************************
LEDR EQU 04H
LEDV EQU 05H
LEDA EQU 06H
REG0 EQU 0CH
REG1 EQU 0DH
REG2 EQU 0EH
REG3 EQU 0FH
REG4 EQU 10H
REG5 EQU 11H
REG6 EQU 12H
REG7 EQU 13H
REG8 EQU 14H
REG9 EQU 15H
REG10 EQU 16H
REG11 EQU 17H
;****************************************************************************************
;origen
;****************************************************************************************
ORG 0000H
GOTO Inicio
ORG 0005H
;****************************************************************************************
;SUB RUTINAS DE RETARDO
;****************************************************************************************
;********************************
;ROJO 20S
;********************************
RET20S movlw .71 ; 1 set numero de repeticion (C)
movwf REG0 ; 1 |
PLoop0 movlw .254 ; 1 set numero de repeticion (B)
movwf REG1 ; 1 |
PLoop1 movlw .221 ; 1 set numero de repeticion (A)
movwf REG2 ; 1 |
PLoop2 clrwdt ; 1 clear watchdog
clrwdt ; 1 ciclo delay
decfsz REG2, 1 ; 1 + (1) es el tiempo 0 ? (A)
goto PLoop2 ; 2 no, loop
decfsz REG1, 1 ; 1 + (1) es el tiempo 0 ? (B)
goto PLoop1 ; 2 no, loop
decfsz REG0, 1 ; 1 + (1) es el tiempo 0 ? (C)
goto PLoop0 ; 2 no, loop
PDelL1 goto PDelL2 ; 2 ciclos delay
PDelL2 goto PDelL3 ; 2 ciclos delay
PDelL3 clrwdt ; 1 ciclo delay
return ; 2+2 Fin.
;*****************************************************
;VERDE 14S
;*****************************************************
RET14S movlw .177 ; 1 set numero de repeticion (C)
movwf REG3 ; 1 |
MU0 movlw .117 ; 1 set numero de repeticion (B)
movwf REG4 ; 1 |
MU1 movlw .168 ; 1 set numero de repeticion (A)
movwf REG5 ; 1 |
MU2 clrwdt ; 1 clear watchdog
decfsz REG5, 1 ; 1 + (1) es el tiempo 0 ? (A)
goto MU2 ; 2 no, loop
decfsz REG4, 1 ; 1 + (1) es el tiempo 0 ? (B)
goto MU1 ; 2 no, loop
decfsz REG3, 1 ; 1 + (1) es el tiempo 0 ? (C)
goto MU0 ; 2 no, loop
PDelL1 goto MU4 ; 2 ciclos delay
MU4 clrwdt ; 1 ciclo delay
return ; 2+2 Fin.
;************************************************************
;INTEMITENTE VERDE 6S
;************************************************************
RET06S movlw .91 ; 1 set numero de repeticion (C)
movwf REG6 ; 1 |
M0 movlw .95 ; 1 set numero de repeticion (B)
movwf REG7 ; 1 |
M1 movlw .138 ; 1 set numero de repeticion (A)
movwf REG8 ; 1 |
M2 clrwdt ; 1 clear watchdog
clrwdt ; 1 ciclo delay
decfsz REG8, 1 ; 1 + (1) es el tiempo 0 ? (A)
goto M2 ; 2 no, loop
decfsz REG7, 1 ; 1 + (1) es el tiempo 0 ? (B)
goto M1 ; 2 no, loop
decfsz REG6, 1 ; 1 + (1) es el tiempo 0 ? (C)
goto M0 ; 2 no, loop
clrwdt ; 1 ciclo delay
return ; 2+2 Fin.
;************************************
;AM 3S
;************************************
RET03S movlw .67 ; 1 set numero de repeticion (C)
movwf REG9 ; 1 |
MUI0 movlw .91 ; 1 set numero de repeticion (B)
movwf REG10 ; 1 |
MUI1 movlw .122 ; 1 set numero de repeticion (A)
movwf REG11 ; 1 |
MUI2 clrwdt ; 1 clear watchdog
decfsz REG11, 1 ; 1 + (1) es el tiempo 0 ? (A)
goto MUI2 ; 2 no, loop
decfsz REG10, 1 ; 1 + (1) es el tiempo 0 ? (B)
goto MUI1 ; 2 no, loop
decfsz REG9, 1 ; 1 + (1) es el tiempo 0 ? (C)
goto MUI0 ; 2 no, loop
PDelL1 goto MUI3 ; 2 ciclos delay
MUI3 clrwdt ; 1 ciclo delay
return ; 2+2 Fin.
;***********************************************************************************
; RUTINAS
;***********************************************************************************
CLRF PORTA ;
CLRF PORTB ;BORRO EL PUERTO A Y B
BSF STATUS,RP0 ;SALTO AL BANCO 1
CLRF PORTB ;PONGO TODO EL PUERTO B COMO SALIDA
BCF STATUS,RP0 ;SALTO AL BANCO 0PARA PROGRAMAR
SALTO1 BSF PORTB,LEDR ;PRENDO LED ROJO
CALL RET20S ;LLAMO AL RETARDO DE 20 SEG
BCF PORTB,LEDR ;APAGO LED ROJO
BSF PORTB,LEDV ;PRENDO LED VERDE
CALL RET14S ;LLAMO AL RETARDO DE 14 SEG
BCF PORTB,LEDV ;APAGO EL LED VERDE
BSF PORTB,LEDV ;PRENDO EL LED VERDE PARA QUE TITILE
CALL RET06S ;TITILA 06 S
BCF PORTB,LEDV ;APAGO EL LED VERDE
BSF PORTB,LEDA ;PRENDO LED A
CALL RET03S ;RETARDO DE 3SEG
BCF PORTB,LEDA ;APAGO LED A
GOTO SALTO1
END