Fecha actual Jue Dic 14, 2017 9:23 am

Programa de PIC 16F84A para Controlar el Llenado de un Tanque

Para un programador, el nivel más bajo posible en una computadora es alguna variedad de lenguaje ensamblador. Después de esto, es necesario aprender Electrónica para manejar y entender la parte física de cualquier sistema de computadoras o electrónico en general.


Usuarios leyendo este tema: Google [Bot] y 1 invitado (United States54.164.136.133)

Programa de PIC 16F84A para Controlar el Llenado de un Tanque

Notapor ~~ » Sab Jul 08, 2017 1:10 pm

Código: Seleccionar todo
        LIST    P=16F84 ;Se utlizara un PIC 16F84
        RADIX   HEX     ;Se usara sistema hexadecimal
        OPTION  EQU     0X01    ;Direccion      OPTION
        STATUS  EQU     0X03    ;Direccion      STATUS
        PORTA   EQU     0X05    ;Direccion      PORTA
        PORTB   EQU     0X06    ;Direccion      PORTB
        SELECTO EQU     0X0C    ;Direccion      SELECTO
        DETECTA EQU     0X0D    ;Direccion      DETECTA
        goto    INICIO          ;Ir a INICIO
INICIO  bsf     STATUS,5        ;Se selecciona banco 1
        movlw   b'11111111'     ;Mover a w el binario
        movwf   PORTA           ;Configurar PORTA como entradas
        movlw   b'11000001'     ;Mover a w el binario
        movwf   PORTB           ;Configurar PORTB como entradas y salidas
        bcf     STATUS,5        ;Seleccionar banco 0
        movlw   b'00000011'     ;Mover a w el binario
        movwf   SELECTO         ;Mover el binario a SELECTO
        movf    PORTA,0         ;Mover a w estados PORTA
        andwf   SELECTO,0       ;Realizar AND entre PORTA y SELECTO y guardar en w
        addlw   b'00000001'     ;Sumar 1 a w y guardar en w
        movwf   DETECTA         ;Guardar resultado ADD en DETECTA
CICLO   btfss   PORTB,6         ;Salto si estado de 6 es 1 Temporizador
        goto    CICLO           ;Ir a CICLO
        btfsc   PORTB,7         ;Salto si estado de 7 es 0 Sensor humedad
        goto    CICLO           ;Ir a CICLO
        btfsc   PORTA,2         ;Salto si estado de 2 es 0 Nivel bajo
        goto    LLENADO         ;Ir a LLENADO
        btfsc   PORTA,3         ;Salto si estado de 3 es 0 Nivel alto
        goto    VACIADO         ;Ir a VACIADO
        goto    LLENADO         ;Ir a LLENADO
LLENADO bcf     PORTB,5         ;Pasar 5 a estado 0 Valvula vaciado
        bsf     PORTB,3         ;Pasar 3 a estado 1 Valvula 1 abierta
        bsf     PORTB,1         ;Pasar 1 a estado 1 Bomba 1 ON
        bsf     PORTB,4         ;Pasar 4 a estado 1 Valvula 2 abierta
        bsf     PORTB,2         ;Pasar 2 a estado 1 Bomba 2 ON
        btfss   PORTA,3         ;Salto si estado de 3 es 1 Nivel alto
        goto    LLENADO         ;Ir a LLENADO
        goto    VACIADO         ;Ir a VACIADO
VACIADO bsf     PORTB,5         ;Pasar 5 a estado 1 Valvula vaciado
        bcf     PORTB,3         ;Pasar 3 a estado 0 Valvula 1 cerrada
        bcf     PORTB,1         ;Pasar 1 a estado 0 Bomba 1 OFF
        bcf     PORTB,4         ;Pasar 4 a estado 0 Valvula 2 cerrada
        bcf     PORTB,2         ;Pasar 2 a estado 0 Bomba 2 OFF
        btfsc   PORTA,2         ;Salto si estado de 2 es 0 Nivel bajo
        goto    VACIADO         ;Ir a VACIADO
CUENTA  decfsz  DETECTA         ;Decrementa en 1 a DETECTA
        goto    CICLO           ;Ir a CICLO
        sleep                   ;Poner a dormir al PIC
        end                     ;Fin de programa

~~
 

Re: Programa de PIC 16F84A para Controlar el Llenado de un Tanque

Notapor ~~ » Sab Jul 08, 2017 4:30 pm

Agregado código para evitar iniciar el llenado hasta que el tanque esté totalmente vacío.

Código: Seleccionar todo
        LIST    P=16F84 ;Se utlizara un PIC 16F84
        RADIX   HEX     ;Se usara sistema hexadecimal
        OPTION  EQU     0X01    ;Direccion      OPTION
        STATUS  EQU     0X03    ;Direccion      STATUS
        PORTA   EQU     0X05    ;Direccion      PORTA
        PORTB   EQU     0X06    ;Direccion      PORTB
        SELECTO EQU     0X0C    ;Direccion      SELECTO
        DETECTA EQU     0X0D    ;Direccion      DETECTA
        goto    INICIO          ;Ir a INICIO
INICIO  bsf     STATUS,5        ;Se selecciona banco 1
        movlw   b'11111111'     ;Mover a w el binario
        movwf   PORTA           ;Configurar PORTA como entradas
        movlw   b'11000001'     ;Mover a w el binario
        movwf   PORTB           ;Configurar PORTB como entradas y salidas
        bcf     STATUS,5        ;Seleccionar banco 0
        movlw   b'00000011'     ;Mover a w el binario
        movwf   SELECTO         ;Mover el binario a SELECTO
        movf    PORTA,0         ;Mover a w estados PORTA
        andwf   SELECTO,0       ;Realizar AND entre PORTA y SELECTO y guardar en w
        addlw   b'00000001'     ;Sumar 1 a w y guardar en w
        movwf   DETECTA         ;Guardar resultado ADD en DETECTA
CICLO   btfss   PORTB,6         ;Salto si estado de 6 es 1 Temporizador
        goto    CICLO           ;Ir a CICLO
        btfsc   PORTB,7         ;Salto si estado de 7 es 0 Sensor humedad
        goto    CICLO           ;Ir a CICLO
        btfsc   PORTA,2         ;Salto si estado de 2 es 0 Nivel bajo
        goto    LLENADO         ;Ir a LLENADO
        btfsc   PORTA,3         ;Salto si estado de 3 es 0 Nivel alto
        goto    VACIADO         ;Ir a VACIADO
        goto    LLENADO         ;Ir a LLENADO
LLENADO bcf     PORTB,5         ;Pasar 5 a estado 0 Valvula vaciado
        bsf     PORTB,3         ;Pasar 3 a estado 1 Valvula 1 abierta
        bsf     PORTB,1         ;Pasar 1 a estado 1 Bomba 1 ON
        bsf     PORTB,4         ;Pasar 4 a estado 1 Valvula 2 abierta
        bsf     PORTB,2         ;Pasar 2 a estado 1 Bomba 2 ON
        btfss   PORTA,3         ;Salto si estado de 3 es 1 Nivel alto
        goto    LLENADO         ;Ir a LLENADO
        goto    VACIADO         ;Ir a VACIADO
VACIADO bsf     PORTB,5         ;Pasar 5 a estado 1 Valvula vaciado
        bcf     PORTB,3         ;Pasar 3 a estado 0 Valvula 1 cerrada
        bcf     PORTB,1         ;Pasar 1 a estado 0 Bomba 1 OFF
        bcf     PORTB,4         ;Pasar 4 a estado 0 Valvula 2 cerrada
        bcf     PORTB,2         ;Pasar 2 a estado 0 Bomba 2 OFF
        btfsc   PORTA,2         ;Salto si estado de 2 es 0 Nivel bajo
        goto    VACIADO         ;Ir a VACIADO
CUENTA  decfsz  DETECTA         ;Decrementa en 1 a DETECTA
FIN
        movlw   b'00001100'     ;w=Máscara de bits
        movwf   255             ;Cargar la máscara en la posición temporal 255

        movf    PORTA,1         ;Mover a f estados PORTA
        andwf   255,0           ;Realizar AND entre 255 y PORTA, y guardar en w

        movwf   255             ;Guardar resultado AND en 255

        tstfsz  255,0           ;Ver si l resultado de AND es 0 para iniciar el ciclo
        goto    FIN             ;Descansar mientras haya agua
        goto    CICLO           ;Ir a CICLO
        sleep                   ;Poner a dormir al PIC
        end                     ;Fin de programa

~~
 

Re: Programa de PIC 16F84A para Controlar el Llenado de un Tanque

Notapor ~~ » Lun Jul 10, 2017 11:29 pm

Código: Seleccionar todo
        LIST    P=16F84         ;Se utlizara un PIC 16F84
        RADIX   HEX             ;Se usara sistema hexadecimal
        OPTION  EQU     0X01    ;Direccion      OPTION
        STATUS  EQU     0X03    ;Direccion      STATUS
        PORTA   EQU     0X05    ;Direccion      PORTA
        PORTB   EQU     0X06    ;Direccion      PORTB
        SELECTO EQU     0X0C    ;Direccion      SELECTO
        DETECTA EQU     0X0D    ;Direccion      DETECTA
        DIRECTO EQU     0X0E    ;Direccion      DIRECTO
        goto    INICIO          ;Ir a INICIO
INICIO  bsf     STATUS,5        ;Se selecciona banco 1
        movlw   b'11111111'     ;Mover a w el binario
        movwf   PORTA           ;Configurar PORTA como entradas
        movlw   b'11000001'     ;Mover a w el binario
        movwf   PORTB           ;Configurar PORTB como entradas y salidas
        bcf     STATUS,5        ;Seleccionar banco 0
        movlw   b'00000011'     ;Mover a w el binario
        movwf   SELECTO         ;Mover el binario a SELECTO
        movf    PORTA,0         ;Mover a w estados PORTA
        andwf   SELECTO,0       ;Realizar AND entre PORTA y SELECTO y guardar en w
        addlw   b'00000001'     ;Sumar 1 a w y guardar en w
        movwf   DETECTA         ;Guardar resultado ADD en DETECTA
CICLO   btfss   PORTB,6         ;Salto si estado de 6 es 1 Temporizador
        goto    CICLO           ;Ir a CICLO
        btfsc   PORTB,7         ;Salto si estado de 7 es 0 Sensor humedad
        goto    CICLO           ;Ir a CICLO
LLENADO bcf     PORTB,5         ;Pasar 5 a estado 0 Valvula vaciado
        bsf     PORTB,3         ;Pasar 3 a estado 1 Valvula 1 abierta
        bsf     PORTB,1         ;Pasar 1 a estado 1 Bomba 1 ON
        bsf     PORTB,4         ;Pasar 4 a estado 1 Valvula 2 abierta
        bsf     PORTB,2         ;Pasar 2 a estado 1 Bomba 2 ON
        btfss   PORTA,3         ;Salto si estado de A3 es 1 Nivel alto
        goto    LLENADO         ;Ir a LLENADO
        bsf     DIRECTO,0       ;Poner a 1 el bit 0 de DIRECTO
VACIADO bsf     PORTB,5         ;Pasar 5 a estado 1 Valvula vaciado
        bcf     PORTB,3         ;Pasar 3 a estado 0 Valvula 1 cerrada
        bcf     PORTB,1         ;Pasar 1 a estado 0 Bomba 1 OFF
        bcf     PORTB,4         ;Pasar 4 a estado 0 Valvula 2 cerrada
        bcf     PORTB,2         ;Pasar 2 a estado 0 Bomba 2 OFF
        btfss   DIRECTO,0       ;Salto si DIRECTO,0 ES 1
        goto    VACIADO         ;Ir a VACIADO
        btfsc   PORTA,2         ;Salto si estado de 2 es 0 Nivel bajo
        goto    VACIADO         ;Ir a VACIADO
        bcf     DIRECTO,0       ;Poner a 0 el bit 0 de DIRECTO
CUENTA  decfsz  DETECTA         ;Decrementa en 1 a DETECTA
        goto    CICLO           ;Ir a CICLO
        sleep                   ;Poner a dormir al PIC
        end                     ;Fin de programa

~~
 


Volver a Electrónica

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado


cron