Resolución en Ensamblador
Ejercicio 1
; -----------------------------------------------------------
; Descripción:
; Por el puerto B se obtiene el dato de las cinco líneas del
; puerto A al que está conectado un array de interrumptores.
; Por ejemplo, si por el puerto A se introduce "---11001",por
; el puerto B aparecerá "xxx11001" (el valor de las tres
; líneas superiores no importa.
; -----------------------------------------------------------
; -----------------------------------------------------------
; Laboratorio 2
; E.T. N° 28 "República Francesa"
; Grupo: Leibovich, Núñez, Pedre
; 5to 4ta 2012
; -----------------------------------------------------------
; -----------------------------------------------------------
LIST p=PIC16F84A
INCLUDE <P16F84A.inc>
__CONFIG _XT_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF
ERRORLEVEL -302
; -----------------------------------------------------------
; Variables
CBLOCK 0x0c
; Vacío porque no se usan variables
ENDC
; -----------------------------------------------------------
; -----------------------------------------------------------
; Vectores
ORG 0x000
goto Inicio ; Vector de Reset
ORG 0x004
retfie ; Vector de Interrupción
; -----------------------------------------------------------
; Programa Principal
; -----------------------------------------------------------
Inicio
bsf STATUS,RP0
movlw b'00011111
movwf TRISA ; PortA como entrada
clrf TRISB ; PortB como salida
bcf STATUS,RP0
Loop
movf PORTA,W ; Valor de PORTA en W
movwf PORTB ; Enciende LEDS correspondientes
goto Loop
; -----------------------------------------------------------
END
; -----------------------------------------------------------
Ejercicio 2
; -----------------------------------------------------------
; Descripción:
; Por el puerto B se obtiene el dato de las cinco líneas del
; puerto A al que está conectado un array de interrutores,
; sumándole el valor de una constante.
; Es decir: (PORTB)=(PORTA)+Constante
; -----------------------------------------------------------
LIST p=PIC16F84A
INCLUDE <P16F84A.inc>
__CONFIG _XT_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF
ERRORLEVEL -302
; -----------------------------------------------------------
; Variables
CBLOCK 0x0c ; Inicio bloque de variables
; Vacío porque no se usan variables
ENDC ; Fin bloque de variables
; -----------------------------------------------------------
; -----------------------------------------------------------
; Vectores
ORG 0x000
goto Inicio ; Vector de Reset
ORG 0x004
retfie ; Vector de Interrupción
; -----------------------------------------------------------
; Programa Principal
; -----------------------------------------------------------
Inicio
bsf STATUS,RP0
movlw b'00011111'
movwf TRISA ; PortA como entrada
clrf TRISB ; PortB como salida
bcf STATUS,RP0
Loop
movf PORTA,W ; Valor de PORTA en W
addlw .10 ; Suma 10 al valor del PORTA (W)
movwf PORTB ; Muestra la suma en PORTB
goto Loop
; -----------------------------------------------------------
END
; -----------------------------------------------------------
Ejercicio 3
; -----------------------------------------------------------
; Descripción:
; Por el Puerto B se obtiene el dato del Puerto A multiplicado por 2.
; Es decir: (PORTB)=2*(PORTA)=(PORTA)+(PORTA)
; -----------------------------------------------------------
; -----------------------------------------------------------
; Laboratorio 2
; E.T. N° 28 "República Francesa"
; Grupo: Leibovich, Núñez, Pedre
; 5to 4ta 2012
; -----------------------------------------------------------
; -----------------------------------------------------------
LIST p=PIC16F84A
INCLUDE <P16F84A.inc>
__CONFIG _XT_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF
ERRORLEVEL -302
; -----------------------------------------------------------
; Variables
CBLOCK 0x0c
; Vacio porque no se usan variables.
ENDC
; -----------------------------------------------------------
; -----------------------------------------------------------
; Vectores
ORG 0x000
goto Inicio ; Vector de Reset
ORG 0x004
retfie ; Vector de Interrupción
; -----------------------------------------------------------
; Programa Principal
; -----------------------------------------------------------
Inicio
bsf STATUS,RP0
movlw b'00011111'
movwf TRISA ; PortA como entrada
clrf TRISB ; PortB como salida
bcf STATUS,RP0
Loop
; -------------------------------------------------------
; Hecho Por Suma
; -------------------------------------------------------
movf PORTA,W ; Valor de PORTA en W
addwf PORTA,W ; Suma PORTA al valor del PORTA
movwf PORTB ; Muestra la suma en PORTB
goto Loop
; -------------------------------------------------------
; Hecho Por Rotate
; -------------------------------------------------------
movf PORTA,W ; Copio el contenido de PORTA en W
rlf W,W ; Roto a izquierda, ya que de ésta manera se
; multiplica por 2
movwf PORTB ; Muestra el resultado en PORTB
goto Loop
; -----------------------------------------------------------
END
; -----------------------------------------------------------
Ejercicio 4
; -----------------------------------------------------------
; Descripción:
;Por el Puerto B obtiene el dato del Puerto A, pero en la salida los bits pares
;se fijan siempre a "1". El orden de los bits sera "b7 b6 b5 b4 b3 b2 b1 b0",
;siendo los pares b6, b4, b2 y b0.
;Por ejemplo, si por el Puerto A se introduce el dato b'---01100', por el
;Puerto B se visualizan b'01011101'.
;Observar que los bits pares están a "1" (efectivamente:
;Puerto B = b'x1x1x1x1')y los impares permanecen con el dato
;del puerto de entrada (efectivamente: Puerto A = b'---X1x0x y
;Puerto B = b'xxx1x0x').
; -----------------------------------------------------------
; -----------------------------------------------------------
; Laboratorio 2
; E.T. N° 28 "República Francesa"
; Grupo: Leibovich, Núñez, Pedre
; 5to 4ta 2012
; -----------------------------------------------------------
; -----------------------------------------------------------
LIST p=PIC16F84A
INCLUDE <P16F84A.inc>
__CONFIG _XT_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF
ERRORLEVEL -302
; -----------------------------------------------------------
; Variables
CBLOCK 0x0c
var1 ; Contendrá el valor para la máscara
ENDC
; -----------------------------------------------------------
; -----------------------------------------------------------
; Vectores
ORG 0x000
goto Inicio ; Vector de Reset
ORG 0x004
retfie ; Vector de Interrupción
; -----------------------------------------------------------
; Programa Principal
; -----------------------------------------------------------
Inicio
bsf STATUS,RP0
movlw b'00011111'
movwf TRISA ; PortA como entrada
clrf TRISB ; PortB como salida
bcf STATUS,RP0
movlw b'01010101' ; Valor para la máscara
movwf var1 ; Guardo valor de la máscara en var1
Loop
movf PORTA,W ; Valor de PORTA en W
iorwf var1,W ; Función OR (máscara)
movwf PORTB ; Muestra el resultado en PORTB
goto Loop
; -----------------------------------------------------------
END
; -----------------------------------------------------------
Ejercicio 5
; -----------------------------------------------------------
; Descripción:
; Por el Puerto B obtiene el dato del Puerto A, pero en las
; salidas los bits impares se fijan siempre a "0". El orden
; de los bits será "b7 b6 b5 b4 b3 b2 b1 b0", siendo los
; impares el b7, b5, b3 y b1.
; Por ejemplo si por el Puerto A se introduce el dato
; b'---01100', por el Puerto B se visualiza b'00000100'.
; Observar que los bits impares están a "0" (efectivamente:
; Puerto B = b'0x0x0x0x') y los pares permanecen con el dato
; del puerto de entrada (efectivamente:
; Puerto A = b'---0x1x0' y Puerto B = b'---0x1x0').
; -----------------------------------------------------------
; -----------------------------------------------------------
; Laboratorio 2
; E.T. N° 28 "República Francesa"
; Grupo: Leibovich, Núñez, Pedre
; 5to 4ta 2012
; -----------------------------------------------------------
; -----------------------------------------------------------
LIST p=PIC16F84A
INCLUDE <P16F84A.inc>
__CONFIG _XT_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF
ERRORLEVEL -302
; -----------------------------------------------------------
; Variables
CBLOCK 0x0c
var1 ; Contendrá el valor para la máscara
ENDC
; -----------------------------------------------------------
; -----------------------------------------------------------
; Vectores
ORG 0x000
goto Inicio ; Vector de Reset
ORG 0x004
retfie ; Vector de Interrupción
; -----------------------------------------------------------
; Programa Principal
; -----------------------------------------------------------
Inicio
bsf STATUS,RP0
movlw b'00011111'
movwf TRISA ; PortA como entrada
clrf TRISB ; PortB como salida
bcf STATUS,RP0
movlw b'01010101' ; Valor para la máscara
movwf var1 ; Guardo valor de la máscara en var1
Loop
movf PORTA,W ; Valor de PORTA en W
andwf var1,W ; Función AND (máscara)
movwf PORTB ; Muestra el resultado en PORTB
goto Loop
; -----------------------------------------------------------
END
; -----------------------------------------------------------
Ejercicio 6
; -----------------------------------------------------------
; Descripción:
; Por el Puerto B se obtiene el dato del Puerto A invirtiendo
; los bits pares. Los impares se dejan como en la entrada. El
; orden de los bits será "b7 b6 b5 b4 b3 b2 b1 b0", siendo
; los pares el b6, b4, b2 y el b0.
; Por ejemplo, si por el Puerto A se introduce "---11001", por
; el Puerto B aparecerá "xxx01100". Observar que los bits
; pares están invertidos (efectivamente: Puerto A = "---1x0x1"
; y Puerto B = "xxxx0x1x0") y en los impares permanece el dato
; del puerto de entrada (efectivamente: Puerto A = "---x1x0x'
; y Puerto B = b'xxxx1x0x').
; Ayuda: Utiliza la función XOR y la máscara b'01010101'
; -----------------------------------------------------------
; -----------------------------------------------------------
; Laboratorio 2
; E.T. N° 28 "República Francesa"
; Grupo: Leibovich, Núñez, Pedre
; 5to 4ta 2012
; -----------------------------------------------------------
; -----------------------------------------------------------
LIST p=PIC16F84A
INCLUDE <P16F84A.inc>
__CONFIG _XT_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF
ERRORLEVEL -302
; -----------------------------------------------------------
; Variables
CBLOCK 0x0c
var1 ; Contendrá el valor para la máscara
ENDC
; -----------------------------------------------------------
; -----------------------------------------------------------
; Vectores
ORG 0x000
goto Inicio ; Vector de Reset
ORG 0x004
retfie ; Vector de Interrupción
; -----------------------------------------------------------
; Programa Principal
; -----------------------------------------------------------
Inicio
bsf STATUS,RP0
movlw b'00011111'
movwf TRISA ; PortA como entrada
clrf TRISB ; PortB como salida
bcf STATUS,RP0
movlw b'01010101' ; Valor para la máscara
movwf var1 ; Guardo valor de la máscara en var1
Loop
movf PORTA,W ; Valor de PORTA en W
xorwf var1,W ; Función XOR (máscara)
movwf PORTB ; Muestra el resultado en PORTB
goto Loop
; -----------------------------------------------------------
END
; -----------------------------------------------------------
Ejercicio 7
; -----------------------------------------------------------
; Descripción:
; Por el Puerto B se obtiene el dato del Puerto A invertidos
; los unos y ceros. Por ejemplo, si por el Puerto A se
; introduce "---11001", por el Puerto B aparecerá "xxx00110"
; (no importa el estado de los tres bits superiores del
; Puerto B).
; -----------------------------------------------------------
; -----------------------------------------------------------
; Laboratorio 2
; E.T. N° 28 "República Francesa"
; Grupo: Leibovich, Núñez, Pedre
; 5to 4ta 2012
; -----------------------------------------------------------
; -----------------------------------------------------------
LIST p=PIC16F84A
INCLUDE <P16F84A.inc>
__CONFIG _XT_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF
ERRORLEVEL -302
; -----------------------------------------------------------
; Variables
CBLOCK 0x0c
; No se usa variable
ENDC
; -----------------------------------------------------------
; -----------------------------------------------------------
; Vectores
ORG 0x000
goto Inicio ; Vector de Reset
ORG 0x004
retfie ; Vector de Interrupción
; -----------------------------------------------------------
; Programa Principal
; -----------------------------------------------------------
Inicio
bsf STATUS,RP0
movlw b'00011111'
movwf TRISA ; PortA como entrada
clrf TRISB ; PortB como salida
bcf STATUS,RP0
Loop
movf PORTA,W ; Valor de PORTA en W
comf W,W ; Función complemento
movwf PORTB ; Muestra el resultado en PORTB
goto Loop
; -----------------------------------------------------------
END
; -----------------------------------------------------------
Ejercicio 8
; -----------------------------------------------------------
; Descripción:
; Por el Puerto B obtiene el dato del Puerto A intercambiando
; los nibbles alto y bajo. Por ejemplo, si por el Puerto A
; se introduce "---11001" por el Puerto B aparecerá "1001xxx1".
; -----------------------------------------------------------
; -----------------------------------------------------------
; Laboratorio 2
; E.T. N° 28 "República Francesa"
; Grupo: Leibovich, Núñez, Pedre
; 5to 4ta 2012
; -----------------------------------------------------------
; -----------------------------------------------------------
LIST p=PIC16F84A
INCLUDE <P16F84A.inc>
__CONFIG _XT_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF
ERRORLEVEL -302
; -----------------------------------------------------------
; Variables
CBLOCK 0x0c
; No se usa variable
ENDC
; -----------------------------------------------------------
; -----------------------------------------------------------
; Vectores
ORG 0x000
goto Inicio ; Vector de Reset
ORG 0x004
retfie ; Vector de Interrupción
; -----------------------------------------------------------
; Programa Principal
; -----------------------------------------------------------
Inicio
bsf STATUS,RP0
movlw b'00011111'
movwf TRISA ; PortA como entrada
clrf TRISB ; PortB como salida
bcf STATUS,RP0
Loop
movf PORTA,W ; Valor de PORTA en W
swapf W,W ; Cambia nibbles
movwf PORTB ; Muestra el resultado en PORTB
goto Loop
; -----------------------------------------------------------
END
; -----------------------------------------------------------
Ejercicio 9
; -----------------------------------------------------------
; Descripción:
; Por el Puerto B obtiene el dato del Puerto A desplazando
; un bit hacia la izquierda, por la derecha entrará un "1".
; Por ejemplo, si por el Puerto A se introduce "---11001",
; por el Puerto B aparecerá "xx110011" (no importa el
; estado de los dos bits superiores del Puerto B).
; -----------------------------------------------------------
; -----------------------------------------------------------
; Laboratorio 2
; E.T. N° 28 "República Francesa"
; Grupo: Leibovich, Núñez, Pedre
; 5to 4ta 2012
; -----------------------------------------------------------
; -----------------------------------------------------------
LIST p=PIC16F84A
INCLUDE <P16F84A.inc>
__CONFIG _XT_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF
ERRORLEVEL -302
; -----------------------------------------------------------
; Variables
CBLOCK 0x0c
; No se usa variable
ENDC
; -----------------------------------------------------------
; -----------------------------------------------------------
; Vectores
ORG 0x000
goto Inicio ; Vector de Reset
ORG 0x004
retfie ; Vector de Interrupción
; -----------------------------------------------------------
; Programa Principal
; -----------------------------------------------------------
Inicio
bsf STATUS,RP0
movlw b'00011111'
movwf TRISA ; PortA como entrada
clrf TRISB ; PortB como salida
bcf STATUS,RP0
Loop
bsf STATUS,C ; Carry en 1
movf PORTA,W ; Valor de PORTA en W
rlf W,W ; Rota el valor de PORTA a izquierda
movwf PORTB ; Muestra el resultado en PORTB
goto Loop
; -----------------------------------------------------------
END
; -----------------------------------------------------------
Ejercicio 10
; -----------------------------------------------------------
; Descripción:
; Por el Puerto B se obtiene el dato del Puerto A desplazando
; un bit hacia la derecha, por la izquierda entrará un "0".
; Por ejemplo, si por el Puerto A se introduce "---11001",
; por el Puerto B aparecerá "0xxx1100".
; -----------------------------------------------------------
; -----------------------------------------------------------
; Laboratorio 2
; E.T. N° 28 "República Francesa"
; Grupo: Leibovich, Núñez, Pedre
; 5to 4ta 2012
; -----------------------------------------------------------
; -----------------------------------------------------------
LIST p=PIC16F84A
INCLUDE <P16F84A.inc>
__CONFIG _XT_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF
ERRORLEVEL -302
; -----------------------------------------------------------
; Variables
CBLOCK 0x0c
; No se usa variable
ENDC
; -----------------------------------------------------------
; -----------------------------------------------------------
; Vectores
ORG 0x000
goto Inicio ; Vector de Reset
ORG 0x004
retfie ; Vector de Interrupción
; -----------------------------------------------------------
; Programa Principal
; -----------------------------------------------------------
Inicio
bsf STATUS,RP0
movlw b'00011111'
movwf TRISA ; PortA como entrada
clrf TRISB ; PortB como salida
bcf STATUS,RP0
Loop
bcf STATUS,C ; Carry en 1
movf PORTA,W ; Valor de PORTA en W
rrf W,W ; Rota el valor de PORTA a derecha
movwf PORTB ; Muestra el resultado en PORTB
goto Loop
; -----------------------------------------------------------
END
; -----------------------------------------------------------
Ejercicio 11
; -----------------------------------------------------------
; Descripción:
; Por el Puerto B se obtiene el dato de las cinco líneas del
; Puerto A al que está conectado un array de interruptores.
; Por ejemplo, si por el Puerto A se introduce "---110001"
; por el Puerto B aparecerá "xxx11001" (el valor de las tres
; líneas superiores no importa).
; Esta operación la realizará una única vez. Después el
; programa entrará en modo "Standby" o de bajo consumo del
; cual no podrá salir después.
; -----------------------------------------------------------
; Laboratorio 2
; E.T. N° 28 "República Francesa"
; Grupo: Leibovich, Núñez, Pedre
; 5to 4ta 2012
; -----------------------------------------------------------
LIST p=PIC16F84A
INCLUDE
__CONFIG _XT_OSC & _PWRTE_ON & _WDT_OFF & _CP_OFF
ERRORLEVEL -302
; -----------------------------------------------------------
;Variables
CBLOCK 0x0c
; Vacío porque no se usan variables
ENDC
; -----------------------------------------------------------
;Vectores
ORG 0x00
goto Inicio ; Vector de Reset
ORG 0x04
retfie ; Vector de Interrupción
; -----------------------------------------------------------
; Programa Principal
; -----------------------------------------------------------
Inicio
; -------------------------------------------------------
bsf STATUS,RP0 ; Cambio de banco
movlw b'11111'
movwf TRISA ; Puerto A como entrada
clrf TRISB ; Puerto B como salida
bcf STATUS,RP0 ; Cambio de banco
; -------------------------------------------------------
movf PORTA,W ; Entrada a W
movwf PORTB ; W a salida
sleep ; Modo bajo consumo
; -----------------------------------------------------------
END
; -----------------------------------------------------------
Ejercicio 12
; -----------------------------------------------------------
; Descripción:
; 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.
; -----------------------------------------------------------
; Laboratorio 2
; E.T. N° 28 "República Francesa"
; Grupo: Leibovich, Núñez, Pedre
; 5to 4ta 2012
; -----------------------------------------------------------
LIST p=PIC16F84A
INCLUDE
__CONFIG _XT_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF
ERRORLEVEL -302
; -----------------------------------------------------------
; Variables:
CBLOCK 0x0C
numero
ENDC
; -----------------------------------------------------------
; Vectores:
ORG 0x00
goto Inicio
ORG 0x04
retfie
; -----------------------------------------------------------
; Programa principal
; -----------------------------------------------------------
Inicio
bsf STATUS,RP0
movlw b'11111'
movwf TRISA
clrf TRISB
bcf STATUS,RP0
Loop
movlw .2
movwf numero
movf PORTA,W
subwf numero,W
; -------------------------------------------------------
; Comparaciones:
; -------------------------------------------------------
btfss STATUS,C ; Si carry está en cero quiere decir
goto Menor ; que es menor.
btfss STATUS,Z ; Si carry está en uno y Z en cero
goto Mayor ; quiere decir que es mayor.
goto Igual ; Sino, es igual.
Mayor
movlw b'01010101'
movwf PORTB
goto Loop
Menor
movlw b'11110000'
movwf PORTB
goto Loop
Igual
movlw b'11111111'
movwf PORTB
goto Loop
; -----------------------------------------------------------
END
; -----------------------------------------------------------
Ejercicio 13
; -----------------------------------------------------------
; Descripción:
; Un número binario de 8 bits es convertido a BCD. El resul-
; tado se guarda en tres posiciones de memoria llamadas
; Centenas, Decenas y Unidades. Además, al final las unidades
; estarán en el nibble bajo del registro W y las decenas en
; el nibble alto. En los diodos LEDs conectado al puerto de
; salida se visualizarán las decenas y las unidades.
; -----------------------------------------------------------
; Laboratorio 2
; E.T. N° 28 "República Francesa"
; Grupo: Leibovich, Núñez, Pedre
; 5to 4ta 2012
; -----------------------------------------------------------
LIST p=PIC16F84A
INCLUDE
__CONFIG _XT_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF
ERRORLEVEL -302
; -----------------------------------------------------------
; Variables
CBLOCK 0x0c
Centenas
Decenas
Unidades
ENDC
; -----------------------------------------------------------
; Vectores
ORG 0x00
goto Inicio
ORG 0x04
retfie
; -----------------------------------------------------------
; Programa Principal
; -----------------------------------------------------------
Inicio
bsf STATUS,RP0
clrf TRISB ; Puerto A como salida
movlw b'11111111'
movwf TRISA ; Puerto B como entrada
bcf STATUS,RP0
Loop
movf PORTB,W ; Entrada a W
movwf Unidades ; Número listo para operar
Resta
movlw .10 ; 10 en W
subwf Unidades,W ; Resto 10 a Unidades. Va a W
btfss STATUS,C ; Salta si el Carry está en 1
goto Resultado ; Va a resultado, al finalizar la
; conversión
SumaDecenas
movwf Unidades ; El resultado de la resta a Unidades
incf Decenas,F ; Sumo 1 a decenas
movlw .10 ; 10 en W
subwf Decenas,W ; Resto 10 a decenas. Va a W
btfss STATUS,C ; Salta si el Carry está en 1
goto Resta
SumaCentenas
clrf Decenas ; Borro el contenido de decenas
incf Centenas,F ; Sumo 1 a centenas
goto Resta
Resultado
swapf Decenas,W ; Valor de decenas en nibble alto. A W
addwf Unidades,W ; Le sumo las unidades
movwf PORTA ; Lo muestro en la salida
goto Loop ; Vuelve a empezar
; -----------------------------------------------------------
END
; -----------------------------------------------------------
Ejercicio 14
; -----------------------------------------------------------
; Descripción:
; Controla el nivel de un líquido. Utiliza:
; · 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)
; # Llenandose (RB1)
; # Lleno (RB2)
; # Rebose (RB3)
; # Alarma (RB4)
; Funcionamiento:
; · Cuando ninguna de las sondas está mojada se entiende
; que el depósito está vacío y se accionarán las dos bombas
; · Cuando el nivel del líquido toque la sona de vacío "SV"
; seguirá llenándose el depósito con las dos bombas. El
; indicador "Llenandose" se ilumina.
; Cuando el nivel del líquido toca la sonda de llenado"SSL",
; para la bomba B2, quedando B1 activada en modo
; mantenimiento.
; · 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.
; -----------------------------------------------------------
; Laboratorio 2
; E.T. N° 28 "República Francesa"
; Grupo: Leibovich, Núñez, Pedre
; 5to 4ta 2012
; -----------------------------------------------------------
LIST p=PIC16F84A
INCLUDE
__CONFIG _XT_OSC & _PWRTE_ON & _WDT_OFF & _CP_OFF
ERRORLEVEL -302
; -----------------------------------------------------------
; Variables
CBLOCK 0x0c
; Vacío porque no uso variables
ENDC
; -----------------------------------------------------------
;Equivalencias
SV EQU 0 ; A
SLL EQU 1 ; A
SR EQU 2 ; A
B1 EQU 5 ; B
B2 EQU 6 ; B
Vacio EQU 0 ; B
Llenandose EQU 1 ; B
Lleno EQU 2 ; B
Rebose EQU 3 ; B
Alarma EQU 4 ; B
; -----------------------------------------------------------
;Vectores
ORG 0x00
goto Inicio
ORG 0x04
retfie
; -----------------------------------------------------------
; Programa Principal
; -----------------------------------------------------------
Inicio
bsf STATUS,RP0
movlw b'111'
movwf TRISA ; Puerto A como entrada
clrf TRISB ; Puerto B como salida
bcf STATUS,RP0
Loop
btfsc PORTA,SV
goto FuncLlenandose
btfsc PORTA,SLL
goto SonarAlarma
btfsc PORTA,SR
goto Alarma
goto FuncVacio
FuncVacio
bsf PORTB,Vacio
bsf PORTB,B1
bsf PORTB,B2
goto Loop
FuncLlenandose
btfsc PORTA,SLL
goto FuncLleno
bsf PORTB,Llenandose
btfsc PORTA,SR
goto Loop
FuncLleno
btfsc PORTA,SR
goto FuncRebose
bcf PORTB,B2
bsf PORTB,Lleno
goto Loop
FuncRebose
bcf PORTB,B1
bsf PORTB,Rebose
goto Loop
SonarAlarma
bcf PORTB,B1
bcf PORTB,B2
bcf PORTB,Vacio
bcf PORTB,Llenandose
bcf PORTB,Lleno
bcf PORTB,Rebose
bsf PORTB,Alarma
goto Loop
; -----------------------------------------------------------
END
; -----------------------------------------------------------
Ejercicio 15
; -----------------------------------------------------------
; Descripción:
; Por el display de 7 segmentos conectado al Puerto B se
; visualiza una de las 26 letras del alfabeto internacional:
; de la "A" a la "Z". La letra a visualizar lo determina el
; orden leído por el Puerto A. Así por ejemplo:
; Si por el Puerto A se lee "---0000" (cero) la letra
; visualizada será la "A" que es la que está en el orden cero.
; Si por el Puerto A se lee "---1101" (veinticinco) la letra
; visualizada será la "Z" que es la que está en el orden
; veinticinco.
; Por ahora no se contempla la posibilidad que el número de
; entrada sea mayor de 25.
; -----------------------------------------------------------
; Laboratorio 2
; E.T. N° 28 "República Francesa"
; Grupo: Leibovich, Núñez, Pedre
; 5to 4ta 2012
; -----------------------------------------------------------
LIST p=PIC16F84A
INCLUDE
__CONFIG _XT_OSC & _PWRTE_ON & _WDT_OFF & _CP_OFF
ERRORLEVEL -302
; -----------------------------------------------------------
; Variables
CBLOCK 0x0c
; Vacío porque no uso variables
ENDC
; -----------------------------------------------------------
;Vectores
ORG 0x00
goto Inicio
ORG 0x04
retfie
; -----------------------------------------------------------
; Programa Principal
; -----------------------------------------------------------
Inicio
bsf STATUS,RP0
movlw b'11111'
movwf TRISA ; Puerto A como entrada
clrf TRISB ; Puerto B como salida
bcf STATUS,RP0
Loop
btfss PORTA,4
goto MenorIgual15
btfss PORTA,3
goto Mayor15MenorIgual23
btfss PORTA,0
;Código para escribir letra Y
;Código para escribir letra Z
goto Loop
Mayor15MenorIgual23
btfss PORTA,2
goto Mayor15MenorIgual20
btfss PORTA,1
goto Mayor20MenorIgual23
btfss PORTA,0
;Código para escribir letra W
;Código para escribir letra X
goto Loop
Mayor20MenorIgual23
btfss PORTA,0
;Código para escribir letra U
;Código para escribir letra V
goto Loop
Mayor15MenorIgual20
btfss PORTA,1
goto Mayor15MenorIgual19
btfss PORTA,0
;Código para escribir letra S
;Código para escribir letra T
goto Loop
Mayor15MenorIgual19
btfss PORTA,0
;Código para escribir letra Q
;Código para escribir letra R
goto Loop
MenorIgual15
btfss PORTA,3
goto MenorIgual7
btfss PORTA,2
goto Mayor7MenorIgual11
btfss PORTA,1
goto Mayor11MenorIgual15
btfss PORTA,0
;Código para escribir letra O
;Código para escribir letra P
goto Loop
Mayor11MenorIgual15
btfss PORTA,0
;Código para escribir letra M
;Código para escribir letra N
Mayor7MenorIgual11
btfss PORTA,1
goto Mayor7MenorIgual12
btfss PORTA,0
;Código para escribir letra K
;Código para escribir letra L
goto Loop
Mayor7MenorIgual12
btfss PORTA,0
;Código para escribir letra I
;Código para escribir letra J
goto Loop
MenorIgual7
btfss PORTA,2
goto MenorIgual3
btfss PORTA,1
goto Mayor3MenorIgual7
btfss PORTA,0
;Código para escribir letra G
;Código para escribir letra H
goto Loop
Mayor3MenorIgual7
btfss PORTA,0
;Código para escribir letra E
;Código para escribir letra F
goto Loop
MenorIgual3
btfss PORTA,1
goto Mayor1MenorIgual3
btfss PORTA,0
;Código para escribir letra C
;Código para escribir letra D
goto Loop
Mayor1MenorIgual3
btfss PORTA,0
;Código para escribir letra A
;Código para escribir letra B
; -----------------------------------------------------------
END
; -----------------------------------------------------------
Ejercicio 16
; -----------------------------------------------------------
; Descripción:
; Los diodos pares conectados al puerto de salida se encienden
; durante 0,5 segundos y los impares permanecen apagados.
; Después al contrario durante el mismo tiempo.
; -----------------------------------------------------------
; Laboratorio 2
; E.T. N° 28 "República Francesa"
; Grupo: Leibovich, Núñez, Pedre
; 5to 4ta 2012
; -----------------------------------------------------------
LIST p=PIC16F84A
INCLUDE
__CONFIG _XT_OSC & _PWRTE_ON & _WDT_OFF & _CP_OFF
ERRORLEVEL -302
; -----------------------------------------------------------
; Variables
CBLOCK 0x0c
delay1
delay2
delay3
ENDC
; -----------------------------------------------------------
;Equivalencias
pares EQU b'01010101'
impares EQU b'10101010'
; -----------------------------------------------------------
;Vectores
ORG 0x00
goto Inicio
ORG 0x04
retfie
; -----------------------------------------------------------
; Programa Principal
; -----------------------------------------------------------
Inicio
bsf STATUS,RP0
movlw b'11111'
movwf TRISA ; Puerto A como entrada
clrf TRISB ; Puerto B como salida
bcf STATUS,RP0
Loop
movlw pares
movwf PORTB
call Delay_500ms
movlw impares
movwf PORTB
call Delay_500ms
goto Loop
Delay_500ms
movlw d'5'
movwf delay3
Delay_500ms_2
movlw d'100'
movwf delay2
Delay_500ms_1
movlw d'249'
movwf delay1
Delay_500ms_0
nop
decfsz delay1,F
goto Delay_500ms_0
decfsz delay2,F
goto Delay_500ms_1
decfsz delay3,F
goto Delay_500ms_2
return
; ---------------------------------------------------------
END
; ---------------------------------------------------------
Ejercicio 17
; -----------------------------------------------------------
; Descripción:
; Por la barra de diodos leds conectada al puerto de salida,
; un led encendido rota a la izquierda 0,3 s en cada posición.
; Cuando llega al final se apagan todos los leds y repite de
; nuevo la operación.
; -----------------------------------------------------------
; Laboratorio 2
; E.T. N° 28 "República Francesa"
; Grupo: Leibovich, Núñez, Pedre
; 5to 4ta 2012
; -----------------------------------------------------------
LIST p=PIC16F84A
INCLUDE
__CONFIG _XT_OSC & _PWRTE_ON & _WDT_OFF & _CP_OFF
ERRORLEVEL -302
; -----------------------------------------------------------
; Variables
CBLOCK 0x0c
d1
d2
var1
ENDC
; -----------------------------------------------------------
;Equivalencias
; -----------------------------------------------------------
;Vectores
ORG 0x00
goto Inicio
ORG 0x04
retfie
; -----------------------------------------------------------
; Programa Principal
; -----------------------------------------------------------
Inicio
bsf STATUS,RP0
movlw b'11111'
movwf TRISA ; Puerto A como entrada
clrf TRISB ; Puerto B como salida
bcf STATUS,RP0
bsf STATUS,C
movlw 0x00
movwf var1
Loop
rlf var1,F
movf var1,W
movwf PORTB
call Delay_300ms
goto Loop
Delay_300ms
movlw 0x5E
movwf d1
movlw 0xEB
movwf d2
Delay_300ms_0
decfsz d1, f
goto $+2
decfsz d2, f
goto Delay_300ms_0
goto $+1
nop
return
; ---------------------------------------------------------
END
; ---------------------------------------------------------
Ejercicio 18
; -----------------------------------------------------------
; Descripción:
; Por la barra de LEDs conectada al puerto de salida un LED
; encendido rota a la izquierda durante 0.5 s en cada posición
; empezando por la línea RB0. El número de posiciones a
; desplazar lo fija el valor de las tres primeras líneas del
; Puerto A entrada.
; Así por ejemplo, si (PORTA)=b'---00011' (3 decimal), la
; secuencia de salida sería:
; 00000000, 00000001, 00000010, 00000100, 00000000, 00000001,
; 00000010,... ( y repite)
; -----------------------------------------------------------
; Laboratorio 2
; E.T. N° 28 "República Francesa"
; Grupo: Leibovich, Núñez, Pedre
; 5to 4ta 2012
; -----------------------------------------------------------
LIST p=PIC16F84A
INCLUDE
__CONFIG _XT_OSC & _PWRTE_ON & _WDT_OFF & _CP_OFF
ERRORLEVEL -302
; -----------------------------------------------------------
; Variables
CBLOCK 0x0c
delay1
delay2
delay3
veces
ENDC
; -----------------------------------------------------------
;Equivalencias
; -----------------------------------------------------------
;Vectores
ORG 0x00
goto Inicio
ORG 0x04
retfie
; -----------------------------------------------------------
; Programa Principal
; -----------------------------------------------------------
Inicio
bsf STATUS,RP0
movlw b'111'
movwf TRISA ; Puerto A como entrada
clrf TRISB ; Puerto B como salida
bcf STATUS,RP0
Loop
movf PORTA,W
movwf veces
bsf STATUS,C
movlw b'0'
movwf PORTB
btfsc PORTA,2
goto Rotacion
btfsc PORTA,1
goto Rotacion
btfsc PORTA,0
goto Rotacion
goto Loop
Rotacion
rlf W,W
movwf PORTB
call Delay_500ms
decfsz veces,F
goto Rotacion
goto Loop
Delay_500ms
movlw d'5'
movwf delay3
Delay_500ms_2
movlw d'100'
movwf delay2
Delay_500ms_1
movlw d'249'
movwf delay1
Delay_500ms_0
nop
decfsz delay1,F
goto Delay_500ms_0
decfsz delay2,F
goto Delay_500ms_1
decfsz delay3,F
goto Delay_500ms_2
return
; ---------------------------------------------------------
END
; ---------------------------------------------------------
Ejercicio 19
Ejercicio 20
; -----------------------------------------------------------
; Descripción:
; Si la línea RA0 del Puerto A es "0", por el display se
; visualiza un contador descendente (9, 8, 7, 6, 5, 4, 3, 2,
; 1, 0, 9, ..) con una cadencia de 0,5 segundos.
; Si la línea RA0 del Puerto A es "1", por el display se
; visualizará un contador ascendente (0, 1, 2, 3, 5, 6, 7, 8,
; 9, 0, 1, 2, ..) con una cadencia de 0,5 s.
; -----------------------------------------------------------
; Laboratorio 2
; E.T. N° 28 "República Francesa"
; Grupo: Leibovich, Núñez, Pedre
; 5to 4ta 2012
; -----------------------------------------------------------
LIST p=PIC16F84A
INCLUDE
__CONFIG _XT_OSC & _PWRTE_ON & _WDT_OFF & _CP_OFF
ERRORLEVEL -302
; -----------------------------------------------------------
; Variables
CBLOCK 0x0c
delay1
delay2
delay3
veces
ENDC
; -----------------------------------------------------------
;Equivalencias
#DEFINE Mostrar0 movlw b'0111111'
#DEFINE Mostrar1 movlw b'0000110'
#DEFINE Mostrar2 movlw b'1011011'
#DEFINE Mostrar3 movlw b'1001111'
#DEFINE Mostrar4 movlw b'1100110'
#DEFINE Mostrar5 movlw b'1101101'
#DEFINE Mostrar6 movlw b'1111101'
#DEFINE Mostrar7 movlw b'0000111'
#DEFINE Mostrar8 movlw b'1111111'
#DEFINE Mostrar9 movlw b'1101111'
; -----------------------------------------------------------
;Vectores
ORG 0x00
goto Inicio
ORG 0x04
retfie
; -----------------------------------------------------------
; Programa Principal
; -----------------------------------------------------------
Inicio
bsf STATUS,RP0
movlw b'1'
movwf TRISA ; Puerto A como entrada
clrf TRISB ; Puerto B como salida
bcf STATUS,RP0
Loop
btfss PORTA,0
goto ContadorAscendente
goto ContadorDescendente
ContadorAscendente
Mostrar0
movwf PORTB
call Delay_500ms
Mostrar1
movwf PORTB
call Delay_500ms
Mostrar2
movwf PORTB
call Delay_500ms
Mostrar3
movwf PORTB
call Delay_500ms
Mostrar4
movwf PORTB
call Delay_500ms
Mostrar5
movwf PORTB
call Delay_500ms
Mostrar6
movwf PORTB
call Delay_500ms
Mostrar7
movwf PORTB
call Delay_500ms
Mostrar8
movwf PORTB
call Delay_500ms
Mostrar9
movwf PORTB
call Delay_500ms
goto Loop
ContadorDescendente
Mostrar9
movwf PORTB
call Delay_500ms
Mostrar8
movwf PORTB
call Delay_500ms
Mostrar7
movwf PORTB
call Delay_500ms
Mostrar6
movwf PORTB
call Delay_500ms
Mostrar5
movwf PORTB
call Delay_500ms
Mostrar4
movwf PORTB
call Delay_500ms
Mostrar3
movwf PORTB
call Delay_500ms
Mostrar2
movwf PORTB
call Delay_500ms
Mostrar1
movwf PORTB
call Delay_500ms
Mostrar0
movwf PORTB
call Delay_500ms
goto Loop
Delay_500ms
movlw d'5'
movwf delay3
Delay_500ms_2
movlw d'100'
movwf delay2
Delay_500ms_1
movlw d'249'
movwf delay1
Delay_500ms_0
nop
decfsz delay1,F
goto Delay_500ms_0
decfsz delay2,F
goto Delay_500ms_1
decfsz delay3,F
goto Delay_500ms_2
return
; ---------------------------------------------------------
END
; ---------------------------------------------------------
Resolución en C
Ejercicio 1
#include <ej1.h>
void main()
{
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
set_tris_b(0xff); // PuertoB como entrada
set_tris_a(0x00); // PuertoA como salida
while (TRUE)
{
output_b(input_a());
}
}
ej1.h:
#include <16f84a .h=".h">
#FUSES NOWDT //No Watch Dog Timer
#FUSES XT //Crystal osc <= 4mhz for PCM/PCH , 3mhz to 10 mhz for PCD
#FUSES PUT //Power Up Timer
#FUSES NOPROTECT //Code not protected from reading
#use delay(clock=4000000)
Ejercicio 2
#include <ej2.h>
void main()
{
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
set_tris_b(0xff); // PuertoB como entrada
set_tris_a(0x00); // PuertoA como salida
while(TRUE)
{
output_b(input_a()+5);
}
}
ej2.h:
#include <16f84 .h=".h">
#FUSES NOWDT //No Watch Dog Timer
#FUSES XT //Crystal osc <= 4mhz for PCM/PCH , 3mhz to 10 mhz for PCD
#FUSES PUT //Power Up Timer
#FUSES NOPROTECT //Code not protected from reading
#use delay(clock=4000000)
Ejercicio 3
#include <ej3.h>
void main()
{
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
set_tris_a(0xFF)
set_tris_b(0x00)
while (TRUE)
{
output_b(input_a()+input_a());
}
}
ej3.h:
#include <16f84 .h=".h">
#FUSES NOWDT //No Watch Dog Timer
#FUSES XT //Crystal osc <= 4mhz for PCM/PCH , 3mhz to 10 mhz for PCD
#FUSES PUT //Power Up Timer
#FUSES NOPROTECT //Code not protected from reading
#use delay(clock=4000000)
Ejercicio 4
#include <ej4.h>
void main()
{
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
set_tris_a(0xFF);
set_tris_b(0x00);
while(TRUE)
{
output_b(input_a()|0b01010101);
}
}
ej4.h:
#include <16f84 .h=".h">
#FUSES NOWDT //No Watch Dog Timer
#FUSES XT //Crystal osc <= 4mhz for PCM/PCH , 3mhz to 10 mhz for PCD
#FUSES PUT //Power Up Timer
#FUSES NOPROTECT //Code not protected from reading
#use delay(clock=4000000)
Ejercicio 5
#include <ej5.h>
void main()
{
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
set_tris_a(0xFF);
set_tris_b(0x00);
while(TRUE)
{
output_b(input_a()&0b01010101);
}
}
ej5.h:
#include <16f84a .h=".h">
#FUSES NOWDT //No Watch Dog Timer
#FUSES XT //Crystal osc <= 4mhz for PCM/PCH , 3mhz to 10 mhz for PCD
#FUSES PUT //Power Up Timer
#FUSES NOPROTECT //Code not protected from reading
#use delay(clock=4000000)
Ejercicio 6
#include <ej6.h>
void main()
{
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
set_tris_a(0xFF);
set_tris_b(0x00);
while(TRUE)
{
output_b(input_a()^0b01010101);
}
}
ej6.h:
#include <16f84a .h=".h">
#FUSES NOWDT //No Watch Dog Timer
#FUSES XT //Crystal osc <= 4mhz for PCM/PCH , 3mhz to 10 mhz for PCD
#FUSES PUT //Power Up Timer
#FUSES NOPROTECT //Code not protected from reading
#use delay(clock=4000000)
Ejercicio 7
#include <ej7.h>
void main(){
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
output_b(~input_a());
}
ej7.h:
#include <16f84a .h=".h">
#FUSES NOWDT //No Watch Dog Timer
#FUSES XT //Crystal osc <= 4mhz for PCM/PCH , 3mhz to 10 mhz for PCD
#FUSES PUT //Power Up Timer
#FUSES NOPROTECT //Code not protected from reading
#use delay(clock=4000000)
Ejercicio 8
#include <ej8.h>
void main()
{
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
output_b(swap(input_a()));
}
ej8.h:
#include <16f84a .h=".h">
#FUSES NOWDT //No Watch Dog Timer
#FUSES XT //Crystal osc <= 4mhz for PCM/PCH , 3mhz to 10 mhz for PCD
#FUSES PUT //Power Up Timer
#FUSES NOPROTECT //Code not protected from reading
#use delay(clock=4000000)
Ejercicio 9
#include <ej9.h>
void main(){
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
int8 numero;
set_tris_b(0x00);
set_tris_a(0xFF);
while(TRUE){
numero=input_a();
rotate_left(&numero,1);
output_b(numero|0x01);
}
}
ej9.h:
#include <16f84a .h=".h">
#FUSES NOWDT //No Watch Dog Timer
#FUSES XT //Crystal osc <= 4mhz for PCM/PCH , 3mhz to 10 mhz for PCD
#FUSES PUT //Power Up Timer
#FUSES NOPROTECT //Code not protected from reading
#use delay(clock=4000000)
Ejercicio 10
#include <ej10.h>
void main(){
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
int8 numero;
set_tris_b(0xFF);
set_tris_a(0x00);
while(TRUE){
numero=input_a();
rotate_right(&numero,1);
output_b(numero);
}
}
ej10.h:
#include <16f84a .h=".h">
#FUSES NOWDT //No Watch Dog Timer
#FUSES XT //Crystal osc <= 4mhz for PCM/PCH , 3mhz to 10 mhz for PCD
#FUSES PUT //Power Up Timer
#FUSES NOPROTECT //Code not protected from reading
#use delay(clock=4000000)
Ejercicio 11
#include <ej11.h>
void main(){
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
set_tris_a(0xFF);
set_tris_b(0x00);
output_b(input_a());
sleep();
}
ej11.h:
#include <16f84a .h=".h">
#FUSES NOWDT //No Watch Dog Timer
#FUSES XT //Crystal osc <= 4mhz for PCM/PCH , 3mhz to 10 mhz for PCD
#FUSES PUT //Power Up Timer
#FUSES NOPROTECT //Code not protected from reading
#use delay(clock=4000000)
Ejercicio 12
#include <ej12.h>
void main(){
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
set_tris_a(0xFF);
set_tris_b(0x00);
int8 numeroEntrada;
int8 numeroComparar=4;
while(TRUE){
numeroEntrada=input_a();
if(numeroEntrada==numeroComparar){
output_b(0xFF);
}else{
if(numeroEntrada
#FUSES NOWDT //No Watch Dog Timer
#FUSES XT //Crystal osc <= 4mhz for PCM/PCH , 3mhz to 10 mhz for PCD
#FUSES PUT //Power Up Timer
#FUSES NOPROTECT //Code not protected from reading
#use delay(clock=4000000)
Ejercicio 13
#include <ej13.h>
void main(){
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
set_tris_a(0xFF);
set_tris_b(0x00);
int8 numero;
int8 centenas;
int8 decenas;
int8 unidades;
while(TRUE){
numero=input_a();
if(numero>=100){
do{
numero=numero-100;
centenas=centenas+1;
}while(numero>=100);
}
if(numero>=10){
do{
numero=numero-10;
decenas=decenas+1;
}while(numero>=10);
}
unidades=numero;
rotate_left(&decenas,4);
output_b(decenas|unidades);
}
}
ej13.h:
#include <16f84a .h=".h">
#FUSES NOWDT //No Watch Dog Timer
#FUSES XT //Crystal osc <= 4mhz for PCM/PCH , 3mhz to 10 mhz for PCD
#FUSES PUT //Power Up Timer
#FUSES NOPROTECT //Code not protected from reading
#use delay(clock=4000000)
Ejercicio 14
Ejercicio 15
Ejercicio 16
Ejercicio 17
Ejercicio 18
Ejercicio 19
Ejercicio 20