Control de semaforos en una vialidad usando un pic16f887 y ensamblador

Control de semaforos en una vialidad usando un pic16f887 y ensamblador

Escrito Por: admin Publicado En: Proyectos de microcontroladores PIC Fecha de Creación: 2014-08-20 visitas: 12295

Control de semaforos en una vialidad usando un pic16f887 y ensamblador

Control de semaforos en una vialidad usando un pic16f887 y ensamblador

Objetivos:

  • Interruptor de on/off
  • Interruptor de modo ( día o noche)

 

Diagrama Proteus:

 

Programa ASM:

 

__CONFIG    _CONFIG1, _LVP_OFF & _FCMEN_OFF & _IESO_OFF & _BOREN_OFF & _CPD_OFF & _CP_OFF & _MCLRE_OFF & _PWRTE_ON & _WDTE_OFF & _FOSC_INTRC_NOCLKOUT
__CONFIG    _CONFIG2, _WRT_OFF;

LIST    P=16F887
INCLUDE "P16F887.INC"

;ASIGNACION DE VARIABLES---------------------------

CONTADOR1    EQU    0X0C            ; Registro auxiliar
CONTADOR2    EQU    0X0D
CONTADOR3    EQU    0X0F

;INICIO DEL PROGRAMA ---------------------------

        ORG        0x00
        GOTO    INICIO


;SETEO DE PUERTOS ------------------------------------

INICIO
        CLRF CONTADOR1
        CLRF CONTADOR2
        CLRF CONTADOR3

        BANKSEL PORTA        ;
        CLRF     PORTA        ;


        BANKSEL ANSEL        ;
        CLRF    ANSEL        ; DIGITAL I/O


        BANKSEL TRISA        ;
        MOVLW    b'11111111'    ;  PORT A ENTRAD
        MOVWF    TRISA        ;

        BANKSEL PORTC
        CLRF    PORTC         ; Puerta C como salida


        BANKSEL TRISC        ;
        MOVLW    b'00000000'    ;
        MOVWF    TRISC        ;  CLRF    TRISC


        BANKSEL PORTD
        CLRF    PORTD        ; Puerta D como salida


        BANKSEL TRISD        ;  Configuro el Puerto D como salida
        MOVLW    b'00000000'    ;
        MOVWF    TRISD        ;

 

 

;PARTE PRINCIPAL DEL PROGRAMA ------------------------
ONOFF
    BANKSEL PORTA
    BTFSC PORTA,5    ;PREGUNTO POR BOTON PREGUNTO SI RA5 ==0  ES CERO
    GOTO ONOFF        ; FALSO NO ES CERO RA3==1

SWITCH
    BANKSEL PORTA
    BTFSS PORTA,3 ;  RA3==1  PREGUNTO POR ON/OFF
    GOTO MODO_NOCHE  ; FALSO   RA3==0
    GOTO MODO_DIA    ;  VERDAD  RA3==1

 

 

MODO_DIA
    BSF PORTC,1    ;    ROJO PRINCIPAL
    BSF    PORTC,5        ;PASO PEATON PRINCIPAL
    BSF PORTD,2        ;VERDE  SECUNDARIA
    BSF PORTD,3        ;ALTO PEATON SECUNDARIA
    CALL RETARDO_400MS
    CALL RETARDO_400MS
    CALL RETARDO_400MS
    CALL RETARDO_400MS

    BCF PORTC,1
    CLRF PORTC        ;PRINCIPAL
    CLRF PORTD        ;SECUNDARIA
    BSF PORTC,1        ;ROJO
    BSF    PORTC,5        ;PASO PEATON PRINCIPAL
    BSF PORTC,2        ;AMARILLO
    BSF    PORTC,5        ;PASO PEATON PRINCIPAL
    BSF    PORTD,3        ;ALTO PEATON SECUNDARIA
    BSF PORTD,1        ;AMARILLO SECUNDARIA
    BSF    PORTD,3        ;ALTO PEATON SECUNDARIA
    CALL RETARDO_400MS
    CALL RETARDO_400MS
    CALL RETARDO_400MS
    CALL RETARDO_400MS

    BCF PORTC,1
    CLRF PORTC
    CLRF PORTD
    BSF PORTC,3 ;VERDE
    BSF    PORTC,4    ;ALTO PEATON PRINCIPAL
    BSF PORTD,0    ;ROJO
    BSF    PORTD,4 ;PASO PEATON SECUNDARIA
    BSF    PORTC,4    ;ALTO PEATON PRINCIPAL
    CALL RETARDO_400MS
    CALL RETARDO_400MS
    CALL RETARDO_400MS
    CALL RETARDO_400MS

    BCF PORTC,1
    CLRF PORTC
    CLRF PORTD
    BSF PORTC,2    ;AMARILLO PRINCIPAL
    BSF    PORTC,4    ;ALTO PEATON PRINCIPAL
    BSF    PORTD,4    ;PASO PEATON SECUNDARIA
    BSF PORTD,0    ;ROJO SECUNDARIA
    BSF PORTD,1    ;AMARILLO SECUNDARIA
    BSF    PORTD,4    ;PASO PEATON SECUNDARIA
    BSF    PORTC,4    ;ALTO PEATON PRINCIPAL
    CALL RETARDO_400MS
    CALL RETARDO_400MS
    CALL RETARDO_400MS
    CALL RETARDO_400MS

    BCF PORTC,1
    CLRF PORTC
    CLRF PORTD
    GOTO SWITCH

MODO_NOCHE
    BSF PORTC,1    ; ROJO PRINCIPAL
    BSF    PORTC,5    ; PASO PEATON PRINCIPAL
    BSF PORTD,1    ; AMARILLO SECUNDARIA
    BSF    PORTD,3    ; ALTO PEATON SECUNDARIA
    CALL RETARDO_400MS
    CALL RETARDO_400MS
    CALL RETARDO_400MS
    CALL RETARDO_400MS

    BCF PORTC,1        ;PRINCIPAL
    CLRF PORTC
    CLRF PORTD

    CALL RETARDO_400MS
    CALL RETARDO_400MS
    CALL RETARDO_400MS
    CALL RETARDO_400MS

    GOTO SWITCH

RETARDO_400MS
    MOVLW     0X0
    MOVWF    CONTADOR1
    MOVLW     0X08
    MOVWF    CONTADOR2
    MOVLW    0X08
    MOVWF    CONTADOR3

RETARDO1
    DECFSZ    CONTADOR1,F
    GOTO    RETARDO1
    DECFSZ    CONTADOR2,F
    GOTO    RETARDO1
    DECFSZ    CONTADOR3,F
    GOTO    RETARDO1
    RETURN

END