Bajar entrega anterior

Anuncio
TP2 – PROGRAMACIÓN CON SALTOS
LABORATORIO DE ADMINISTRACIÓN DE LOS RECURSOS
PAZ MARCOLLA VALENTIN, TORRES EDEN Y NAHMOD SANTIAGO
Ejercicio 1 (Saltos_05)
Compara el dato del puerto de entrada PORTA con un "Numero". Tres posibilidades:
 Si (PORTA) = Numero se encienden todos los LEDs de salida.
 Si (PORTA) > Numero se activan los LEDs pares de salida.
 Si (PORTA) < Numero se encienden los LEDs del nibble alto y se apagan los del bajo.
Solución:
;------------------------------------------------------------------------------------------------;
Ejercicio 1 (Saltos_05)
;
Descripción:
;
Si PORTA = NUM -> PORTB = 0XFF
;
Si PORTA > NUM -> PORTB = 0X55
;
Si PORTA < NUM -> PORTB = 0XF0
;
Clock Rate: 4MHz
;------------------------------------------------------------------------------------------------LIST p=PIC16F84A
INCLUDE <p16F84A.inc>
__CONFIG _XT_OSC & _PWRTE_ON & _WDT_OFF & _CP_OFF
ERRORLEVEL -302
;------------------------------------------------------------------------------------------------NUMERO EQU 0x0A ; 10 en decimal
;------------------------------------------------------------------------------------------------ORG 0x000
goto Main
ORG 0x004
retfie
;------------------------------------------------------------------------------------------------Main
bsf STATUS, RP0
clrf TRISB
movlw 0xFF
movwf TRISA
bcf STATUS, RP0
;hasta acá es el set de puertos
Loop
movf PORTA, W
sublw NUMERO
; NUMERO - W
btfsc STATUS, Z
; NUMERO == W
goto Igual
btfss STATUS, C
; NUMERO < W
goto Mayor
; NUMERO > W
goto Menor
; si =
Igual
movlw 0xFF
goto Setear
; si >
Mayor
movlw 0x55
goto Setear
; si <
Menor
movlw 0xF0
Setear
movwf PORTB
goto Loop
;------------------------------------------------------------------------------------------------END
Ejercicio 2 (BCD)
Ingreso de por PORTA un número, del 0 al 30, y sale por el PORTB en BCD. Si el número
ingresado es 31, se apagarán todos los bits de salida.
Solución:
;------------------------------------------------------------------------------------------------;
Ejercicio2 (BCD_01)
;
Descripción: mostrar lo ingresado por el PORTA en bcd, salvo que sea 31
;
ClockRate 4Mhz
;------------------------------------------------------------------------------------------------LIST p=PIC16F84A
INCLUDE <p16F84A.inc>
__CONFIG _XT_OSC & _PWRTE_ON & _WDT_OFF & _CP_OFF
ERRORLEVEL -302
;------------------------------------------------------------------------------------------------CBLOCK 0x0C
Dec
PuertoA
ENDC
;------------------------------------------------------------------------------------------------ORG 0x000
goto Main
ORG 0x004
retfie
;------------------------------------------------------------------------------------------------Main
bsf STATUS, RP0
clrf TRISB
movlw 0xFF
movwf TRISA
bcf STATUS, RP0
; set de puertos
Loop
movlw .0
movwf Dec
; reset de dec
movf PORTA, W
movwf PuertoA
; lo guardo para que no cambie en el medio
sublw .31
btfsc STATUS, Z
; si es 31
goto Cero
Cmp
incf Dec
; Voy guardando la cantidad de decenas que hay
movlw .10
subwf PuertoA
btfsc STATUS, C
; Si puertoA es menor a 10 muestro ya el resultado
goto Cmp
Cout
movlw .10
; Le sumo los 10 que le reste a puertoA
addwf PuertoA
decf Dec
;siempre mostramos dec - 1
swapf Dec, W
; lo guardo en el nibble alto
iorwf PuertoA, W
; lo 'concateno' en el nibble bajo
goto Mostrar
Cero
movlw 0x00
Mostrar
movwf PORTB
; copio lo movido al portB
goto Loop
;-------------------------------------------------------------------------------------------------
END
Ejercicio 3 (Indexado_02)
Controla el nivel de un depósito de líquido. Utiliza (entre paréntesis las líneas del microcontrolador a la que se han conectado):
-
Tres sondas detectoras: SV, Sonda de Vacío (RA0); SLL, Sonda de Llenado (RA1); SR,
Sonda de Rebose (RA2).
Dos bombas de agua: B1 (RB5), B2 (RB6).
Cinco indicadores: Vacío (RB0), Llenándose (RB1), Lleno (RB2), Rebose (RB3),
Alarma (RB4).
Su funcionamiento:
-
Cuando ninguna de las sondas está mojada se entiende que el depósito está vacío
y se accionarán las dos bombas. El indicador "Vacío" se iluminará.
Cuando el nivel del líquido toque la sonda de vacío "SV" seguirá llenándose el
depósito con las dos bombas. El indicador "Llenándose" se ilumina.
Cuando el nivel del líquido toca la sonda de llenado "SLL", para la bomba B2,
quedando B1 activada en modo mantenimiento. El indicador "Lleno" se ilumina.
Si el nivel del líquido moja la sonda de rebose "SR" se apaga también la bomba B1,
quedando las dos bombas fuera de servicio. El indicador "Rebose" se enciende.
Cuando se produce un fallo o mal funcionamiento en las sondas de entrada (por
ejemplo que se active la sonda de rebose y no active la de vacío) se paran las dos
bombas. El indicador "Alarma" se ilumina.
Solución:
;------------------------------------------------------------------------------------------------;
Ejercicio 3 (Indexado_02)
;
Descripción: Ejercicio del depósito liquido
;
Clock Rate: 4MHz (XT)
;------------------------------------------------------------------------------------------------LIST p=PIC16F84A
INCLUDE <P16F84A.inc>
__CONFIG _XT_OSC & _PWRTE_ON & _WDT_OFF & _CP_OFF
ERRORLEVEL -302
;------------------------------------------------------------------------------------------------ORG 0x00
goto Main
ORG 0x004
retfie
Main
bsf STATUS,RP0
clrf TRISB
movlw 0xff
movwf TRISA
bcf STATUS,RP0
Loop
movf PORTA,W
andlw b'00000111'
;Me quedo solo con los primeros 3 bits de PORTA
addwf PCL,F
;Según corresponda a las sondas, activo los indicadores y bombas
goto Vacio
;PORTA en 0 (Ninguna sonda)
goto Filling
;PORTA en 1 (SV)
goto Alarm
;PORTA en 2 (se activo SLL sin SV)
goto Done
;PORTA en 3 (SLL)
Index
goto Alarm
goto Alarm
;En cualquiera de estos casos, sucede que se prendió
goto Alarm
;alguna sonda sin que se prenda su anterior
goto Over
;PORTA en 7 (SR)
movlw b'01100001'
;Se van a prender las dos bombas y el indicador de vacío (RB6,5,0)
Vacio
goto Activate
Filling
movlw b'01100010'
Llenándose (RB6,5,1)
goto Activate
;Siguen prendidas las bombas, se va a prender el indicador
Done
movlw b'00100100'
lleno(RB5, 2)
;Se va a apagar la segunda bomba y se va a prender el indicador de
goto Activate
Over
movlw b'00001000'
rebose (RB3)
;Se van a apagar las dos bombas y se va a prender el indicador de
goto Activate
Alarm
movlw b'00010000'
;Se va a prender el indicador de alarma, todo lo demás se apaga
(RB4)
goto Activate
Activate
movwf PORTB
;Se pasa lo preparado en W a PORTB
goto Loop
;Vuelvo al inicio
;------------------------------------------------------------------------------------------------END
Conclusiones:
Para estos ejercicios utilizamos todo lo relacionado a saltos, como indexado y
btsss. Hay que tener cuidado con que instrucción saltas y cual no.
Por ejemplo, en el ejercicio 3, había 4 posibles inputs usando las 8
combinaciones posibles de los primeros 3 bits de PORTA, cada input tiene su
output mediante salto indexado, cualquier otra combinación de bits que no
sea uno de los 4 posibles inputs, activa la alarma.
Descargar