Download - Guía de ejercicios resueltos tema 2
Prof. Luis Zurita 1 Microcontroladores I
GUÍA DE EJERCICIOS RESUELTOS
TEMA 3:
HERRAMIENTAS DE PROGRAMACIÓN
Prof. Luis Zurita 2 Microcontroladores I
PROCEDIMIENTO DE RESOLUCIÓN
El procedimiento estándar para la resolución de un proyecto en general
recomendado por el autor, consiste en segmentar el proyecto en tres pasos:
Paso 1. Enunciado y delimitación del Hardware: El enunciado es la
razón de ser de cualquier proyecto. Es el problema que debe ser solucionado.
Si el enunciado es proporcionado junto con el hardware, este paso nos
los ahorraremos. En caso contrario, se deben delimitar y definir todas las
variables de entradas y de salida. Debemos asignar los pines que van a actuar
como entrada de datos (Sensores) y los que van a actuar como salida de datos
(Actuadores o elementos finales de control).
Se debe tratar de develar todo lo que se espera que haga el
funcionamiento del diseño que se está proponiendo. Se debe establecer un
resumen de cómo se debe comportar el circuito de control en base a lo que
queremos diseñar.
Sirve para:
• Ponerle límites a nuestro proyecto
• Determinar las funciones que se espera que haga.
• Y fundamentalmente para especificar el hardware que va a ser
controlado y gobernado por el microcontrolador
Paso 2. Diagrama de Flujo: Este nos proporcionará el funcionamiento lógico
del problema, proyecto o sistema que queremos diseñar.
Si un proyecto es de mediana o gran complejidad, se recomienda
seccionar el diagrama de flujo en partes para analizar su funcionamiento y
posteriormente unirlo, bajo el lema de segmentar un proyecto grande en partes
pequeñas para su entendimiento y luego se agrupan, obteniendo la solución total
del proyecto.
Prof. Luis Zurita 3 Microcontroladores I
Generalmente se parte del enunciado que se ha delimitado en el paso
anterior.
Como recomendación general, antes de pasar a la elaboración del lenguaje
ensamblador, hágase las siguientes preguntas:
¿El diagrama de flujo tiene continuidad y lógica?
¿Cumplo con las normas de elaboración de un diagrama de flujo, vistas en
clases?
¿El diagrama de flujo cumple con el enunciado?
Si estas preguntas son afirmativas, bien, vayamos al paso 3. En caso
contrario debemos corregirlo, hasta lograr que funcione como se exige o como
lo deseamos.
Paso 3. Elaboración del Lenguaje Ensamblador: Si usted ha elaborado
correctamente el diagrama de flujo, este paso será sencillo de llevar a cabo,
recordando que a cada bloque que se haya colocado en el diagrama le
corresponderá un conjunto de instrucciones que salen exclusivamente de las 35
disponibles que traen los microcontroladores de la familia 16F con la que se
trabaja en este curso. Su documentación previa, experiencia, inventiva e
ingenio le permitirán combinarlas para que realicen la misma función expresada
en el diagrama de flujo.
Se deben tener presente las diferentes rutinas ya estudiadas y vistas a
lo largo del curso, así como otras rutinas estándares que existen para el uso en
diferentes procedimientos, tales como: Rutinas matemáticas, manejo de LCD,
comunicaciones, conversiones entre códigos, etc.
Veamos un diagrama de flujo de la metodología de resolución de
problemas:
Prof. Luis Zurita 4 Microcontroladores I
Prof. Luis Zurita 5 Microcontroladores I
1. Dado el siguiente circuito:
Realice un programa que permita explorar el estado del bit RA3. Si RA3 es uno,
se debe mostrar en el display el número 5. Caso contrario se debe mostrar el
número3. (8 ptos)
SOLUCIÓN:
Paso 1. Enunciado y delimitación del Hardware: si el enunciado y el hardware
ya se nos ha proporcionado, saltaremos este paso.
Paso 2. Diagrama de Flujo:
Prof. Luis Zurita 6 Microcontroladores I
Paso 3. Del Diagrama de Flujo al Lenguaje Ensamblador:
Si tenemos el Diagrama de Flujo bien diseñado, lo demás es “Carpintería”,
veamos:
List P=16F84A
Include P16F84A.inc ; Encabezado
org 00H
goto INICIO
; Bloque 1:
INICIO bsf STATUS,5 ;Ir a banco 1
bsf TRISA,3 ;RA3 se configura como entrada
clrf TRISB ;RB7 a RB4 como salida
bcf STATUS,5 ;Regresar al banco 0
; Bloque 2:
EXPLORA btfss PORTA,3 ;RA3= 1?
goto TRES ;RA3 =0. Mostrar 3 en display
goto CINCO ;Este paso podemos obviarlo.
; Bloque 3:
CINCO movlw B’10100000’ ;RA3=1. Mostrar 5 en display
movwf PORTB ;5→Display
goto EXPLORA ;Seguimos explorando el Bit RA3
; Bloque 4:
TRES movlw B’11000000’ ;RA3=0. Mostrar 3 en display
movwf PORTB ;3→Display
goto EXPLORA ;Seguimos explorando el Bit RA3
end
Nota: Otra forma de hacer los bloques 3 y 4 sería la siguiente:
Bloque 3: Bloque 4:
bsf PORTB,7 bsf PORTB,7
bcf PORTB,6 bsf PORTB,6
bsf PORTB,5 bcf PORTB,5
bcf PORTB,4 bcf PORTB,4
Observe la conexión del puerto B con el display.
Prof. Luis Zurita 7 Microcontroladores I
2. Dado el siguiente circuito:
Realice un programa que permita mostrar en el display la letra “C”, si la entrada
está en nivel bajo ó la letra “U” si la entrada está en nivel alto. (8 ptos)
SOLUCIÓN:
Paso 1. Enunciado y delimitación del Hardware: Tenemos el enunciado pero
el hardware no está del todo claro.
Como no se especifica que bit del microcontrolador controla a cuál
segmento del display, debemos especificarlo. Además no se especifica que
display vamos a utilizar, no sabemos si es ánodo común o cátodo común. Por lo
tanto lo asignaremos a nuestro criterio. Eligiendo un cátodo común tendremos:
Bits de microcontrolador
RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0
Segmentos del Display
dp g f e d c b a LETRA Valor Hex
0 0 1 1 1 0 0 1 C 39H
0 0 1 1 1 1 1 0 U 3EH
La identificación de los segmentos de un display a nivel internacional es la
siguiente:
Prof. Luis Zurita 8 Microcontroladores I
Paso 2. Diagrama de Flujo:
Paso 3. Del Diagrama de Flujo al Lenguaje Ensamblador:
El lenguaje ensamblador es similar al ejercicio 1:
List P=16F84A
Include P16F84A.inc ; Encabezado
org 00H
goto INICIO
; Bloque 1:
INICIO bsf STATUS,5 ;Ir a banco 1
bsf TRISA,1 ;RA1 se configura como entrada
clrf TRISB ;Todo el Puerto B como salida
bcf STATUS,5 ;Regresar al banco 0
; Bloque 2:
EXPLORA btfss PORTA,1 ;RA1= 1?
goto CCC ;RA1 =0. Mostrar C en display
Prof. Luis Zurita 9 Microcontroladores I
goto UUU ;Este paso podemos obviarlo.
; Bloque 3:
UUU movlw 3EH ;RA1=1. Mostrar U en display
movwf PORTB ;3EH→Display
goto EXPLORA ;Seguimos explorando el Bit RA1
; Bloque 4:
CCC movlw 39H ;RA1=0. Mostrar C en display
movwf PORTB ;39H→Display
goto EXPLORA ;Seguimos explorando el Bit RA1
end
3. Diseñe un contador de 8 bits, que se incrementa cada vez que se pulsa
“P” (RA3). Visualice el resultado por el puerto B. Activar un led (RA0),
cuando el contador llegue a D’125’ y apagarlo cuando llegue a D’221’.
Repetir el ciclo.
SOLUCIÓN:
Paso 1. Enunciado y delimitación del Hardware: Tenemos el enunciado y
parte del hardware definido.
Se ha asignado a RA3 como un sensor de entrada (Pulsador)
Se ha asignado a RA0 como un elemento de salida (Led)
Se pide al puerto B que muestre el valor de un contador (Son ocho bits),
por lo que es un elemento de salida (8 leds)
¿Cómo quedaría delimitado el hardware?
Asignaremos la lógica del Pulsador (Lógica negativa):
Si P es presionado, RA3=0
Si P no es presionado, RA3=1.
Si usted desea trabajar con lógica positiva, no hay problema, debe
reconfigurar el circuito del pulsador.
Prof. Luis Zurita 10 Microcontroladores I
OSC1/CLKIN16
RB0/INT6
RB17
RB28
RB39
RB410
RB511
RB612
RB713
RA017
RA118
RA21
RA32
RA4/T0CKI3
OSC2/CLKOUT15
MCLR4
U1
PIC16F84A
C1
22p
C2
22p
X1CRYSTAL
R11k
VDD
VSS
VSS
VSS
VSS
PULSADOR
Todas las Resistencias= 330 Ohmios
Listo, tenemos el cascarón vacío del proyecto. Ahora vamos a darle
inteligencia.
Paso 2. Diagrama de Flujo:
Debemos usar un registro que lleve la cuenta (Contador de 8 bits) por lo
que debemos declararlo en el paso 3.
Veamos el diagrama de flujo:
Todas las Resistencias= 330 Ω
Pulsador
Prof. Luis Zurita 11 Microcontroladores I
INICIO
DeclararRegistro Contador
¿Se hapulsado P?
1
SI
NO
Bloque 5
Bloque 1
ConfigurarPuerto A y B
InicializamosRegistro Contador
Contador→PORTB
Contador=Contador+1
¿Contador=125?
Led=ON
Contador→PORTB
1
SI
¿Contador=221?
Led=OFF
1
SI
NO NO1
Bloque 2
Bloque 3
Bloque 4
RA3=0?
Bloque 6
Bloque 7
Bloque 8Bloque 9
Prof. Luis Zurita 12 Microcontroladores I
Paso 3. Del Diagrama de Flujo al Lenguaje Ensamblador:
Recuerde la declaración el registro CONTADOR:
List P=16F84A
Include P16F84A.inc ; Encabezado
;Bloque 1: (Declaraciones)
CONTADOR equ 20H ;Declaramos el Registro
org 00H
goto INICIO
; Bloque 2:
INICIO bsf STATUS,5 ;Ir a banco 1
bsf TRISA,3 ;RA1 se configura como entrada
bcf TRISA,0 ;RA0 como salida
clrf TRISB ;Todo el Puerto B como salida
bcf STATUS,5 ;Regresar al banco 0
; Bloque 3:
clrf CONTADOR ;Inicializamos el contador
clrf PORTB ;Limpiamos el Puerto B
; Bloque 4:
movf CONTADOR,0 ;CONTADOR→W
movwf PORTB ; W→PORTB
; Bloque 5:
CUENTA btfsc PORTA,3 ;RA3= 1? ¿Se ha pulsado P?
NO goto CUENTA ;No. Seguimos explorando
goto SI ;Si. Vamos al bloque 6
; Bloque 6:
SI incf CONTADOR,1 ;Si. Contador= Contador + 1
; Bloque 7:
movf CONTADOR,0 ;CONTADOR→W
movwf PORTB ; W→PORTB
; Bloque 8:
sublw .125 ;¿Contador=125? W =Contador.
Prof. Luis Zurita 13 Microcontroladores I
btfss STATUS,2 ;Z=1?
goto VALOR2 ;Ir a preguntar si Contador=221
bsf PORTA,0 ;Contador=125, Led=ON
goto EXPLORA ;Volvemos a explorar el Pulsador
; Bloque 9:
VALOR2 movf CONTADOR ; CONTADOR→W
;Aquí pasamos contador a W porque no sabemos si W tenía su valor
sublw .221 ;¿Contador=221?
btfss STATUS,2 ;Z=1?
goto EXPLORA ; Volvemos a explorar el Pulsador
bcf PORTA,0 ;Contador=221, Led=OFF
goto EXPLORA ;Volvemos a explorar el Pulsador
end
4. Diseñe un control de nivel para un tanque. Al pulsar “INICIO”, se
activa la bomba B1. La bomba permanece encendida hasta alcanzar el
nivel máximo, mediante el cual se apagará. Se debe abrir la válvula de
vaciado. La bomba (B1) se volverá a activar de forma automática
cuando se alcance el nivel mínimo procediendo a cerrar la válvula de
vaciado, hasta que alcance el nivel máximo, repitiendo el ciclo de forma
automática sin necesidad de volver a pulsar “INICIO”.
Prof. Luis Zurita 14 Microcontroladores I
Paso 1. Enunciado y delimitación del Hardware: Tenemos el enunciado pero
el hardware debemos delimitarlo.
Para lograr esta tarea debemos asignar los pines de control de Entrada y
de salida, con la finalidad de saber qué vamos a controlar y quién nos dará la
información.
Debemos identificar cuales elementos son entrada y cuales salida:
ENTRADA ¿Qué pin
Asignamos?
SALIDA ¿Qué pin
Asignamos?
Sensor Máximo RA0 Bomba B1 RB0
Sensor Mínimo RA1 Válvula Vaciado RB1
Pulsador “INICIO” RA2
¿Y si quiero asignar otros pines? Perfecto, queda a libre elección.
Paso 2. Diagrama de Flujo:
Veamos el diagrama de flujo:
Prof. Luis Zurita 15 Microcontroladores I
INICIO
¿Se pulsóInicio?
1SI
NO
Bloque 4
ConfigurarPuerto A y B
Bomba=ON
¿Nivel Máximo?
Válvula Vaciado=OFF
1
SI
NO
Bloque 1
Bloque 2
RA2=0?
Bloque 5
Bloque 6
Bloque 7
Bloque 3
Bomba=OFF
Válvula Vaciado=ON
¿Nivel Mínimo?
SI
NOBloque 10
Bomba=OFF
Válvula Vaciado=OFF
Bloque 8
Bloque 9
Prof. Luis Zurita 16 Microcontroladores I
Paso 3. Del Diagrama de Flujo al Lenguaje Ensamblador:
List P=16F84A
Include P16F84A.inc ; Encabezado
org 00H
goto INICIO
; Bloque 1:
INICIO bsf STATUS,5 ;Ir a banco 1
bsf TRISA,0 ;RA0 entrada. Sensor máximo.
bsf TRISA,1 ;RA1 entrada. Sensor mínimo.
bsf TRISA,2 ;RA2 entrada. Pulsador.
bcf TRISB,0 ;RB0 salida. Bomba B1
bcf TRISB,1 ;RB1 salida. Válvula Vaciado.
bcf STATUS,5 ;Regresar al banco 0
; Bloque 2:
bcf PORTB,0 ;Bomba=OFF
; Bloque 3:
bcf PORTB,1 ; Válvula Vaciado=OFF
; Bloque 4:
EXPLORA btfsc PORTA,2 ;¿Se ha pulsado INICIO?
goto EXPLORA ;No. Seguimos explorando
; Bloque 5:
REPITE bsf PORTB,0 ;Se pulsó INICIO. Bomba=ON
; Bloque 6:
bcf PORTB,1 ;Válvula=OFF
; Bloque 7:
MAXIMO btfsc PORTA,0 ;¿Se ha llegado al máximo?
goto MAXIMO ;No. Seguimos explorando
; Bloque 8:
SIMAX bcf PORTB,0 ;Nivel Máximo. Bomba=OFF.
; Bloque 9:
bsf PORTB,1 ;Válvula=ON
MINIMO btfsc PORTA,1 ;¿Se ha llegado al mínimo?
goto MINIMO ;No. Seguimos explorando
goto REPITE ;Nivel mínimo, repetimos ciclo.
end
Prof. Luis Zurita 17 Microcontroladores I
5. Se desea diseñar un sistema de protección para una línea de
ensamblaje que contiene 4 máquinas soldadoras.
M1 (RA0) M2 (RA1) M3 (RA2) M4 (RA3)
Máquina activa= 1 Máquina inactiva= 0
* Cada máquina tiene dos leds que indican si están funcionando:
(Led Verde=ON) o si están apagadas (Led Rojo=ON).
* Si ninguna máquina está activa, debe activarse adicionalmente una señal
sonora (RA4).
SOLUCIÓN:
Paso 1. Enunciado y delimitación del Hardware: si el enunciado y el hardware
ya se nos ha proporcionado, saltaremos este paso.
Prof. Luis Zurita 18 Microcontroladores I
Paso 2. Diagrama de Flujo:
INICIO
¿Motor 1=OK?
SI
NO
ConfigurarPuerto A y B
LVM1=OFF
LRM1=ON
1
Declarar RegistroIndicador
Todos los Leds=OFF
Sirena=OFF
Registro Indicador=0
Indicador=0
LVM1=OFF
LRM1=ON
Indicador=1
¿Motor 2=OK?
SI
NO
LVM2=OFF
LRM2=ON
LVM2=OFF
LRM2=ON
Indicador=1
¿Motor 3=OK?
SI
NO
LVM3=OFF
LRM3=ON
LVM3=OFF
LRM3=ON
Indicador=1
1
¿Motor 4=OK?
SI
NO
LVM4=OFF
LRM4=ON
LVM4=OFF
LRM4=ON
Indicador=1
¿Indicador=0?
SI
NO
Sirena=ON
CICLOCICLO
CICLO
¿Qué función tiene el registro Indicador?
El ciclo de exploración de las máquinasempieza por la primera. Si esta no funciona,
Indicador vale 0. Si funciona, Indicador vale 1.
Si alguna de las restantes máquinasfunciona, Indicador pasará a valer 1, lo que
nos informa que al menos hay una máquina
trabajando, por lo que no debería activarse laalarma.
Ahora. Si la máquina 1 no funciona, y no
funciona ninguna de las restantes, Indicadorseguirá valiendo 0, por lo que al preguntar
por su valor, se debe activar la alarma, tal
como se exige en el enunciado.Existen otras formas de hacerlo, como por
ejemplo, preguntar al final si cada máquina es
cero para activar o no la alarma, pero eldiagrama de flujo quedaría más extenso, así
como su programa.
Sirena=OFF
Prof. Luis Zurita 19 Microcontroladores I
Paso 3. Del Diagrama de Flujo al Lenguaje Ensamblador:
Existe una forma más resumida de hacer este problema, pero
necesitamos el uso de las tablas, tema que veremos en otra unidad. Veamos la
forma extendida:
List P=16F84A
Include P16F84A.inc ;Encabezado
INDICADOR equ 20H ;Declaramos el registro Indicador
org 00H
goto INICIO
INICIO bsf STATUS,5 ;Ir a banco 1
movlw B’00001111’
movwf TRISA ;Configuramos el Puerto A
clrf TRISB ;Configuramos el Puerto B
bcf STATUS,5 ;Regresar al banco 0
clrf PORTB ;Todos los Leds=OFF
bcf PORTA,4 ;Sirena=OFF
clrf INDICADOR ;Registro Indicador=0
MAQ1 btfsc PORTA,0 ;Máquina 1 inactiva?
goto M1OK ;Vamos a Máquina 1 bien.
M1MAL bcf PORTB,0 ;LVM1=OFF
bsf PORTB,1 ;LRM1=ON
clrf INDICADOR ;Indicador a cero
goto MAQ2 ;Vamos a explorar Máquina 2
M1OK bsf PORTB,0 ;LVM1=ON
bcf PORTB,1 ;LRM1=OFF
movlw .1
movwf INDICADOR ;Indicador=1
goto MAQ2 ;Vamos a explorar Máquina 2
MAQ2 btfsc PORTA,1 ;Máquina 2 inactiva?
goto M2OK ;Vamos a Máquina 2 bien.
M2MAL bcf PORTB,2 ;LVM2=OFF
bsf PORTB,3 ;LRM2=ON
clrf INDICADOR ;Indicador a cero
goto MAQ3 ;Vamos a explorar Máquina 2
Prof. Luis Zurita 20 Microcontroladores I
M2OK bsf PORTB,2 ;LVM2=ON
bcf PORTB,3 ;LRM2=OFF
movlw .1
movwf INDICADOR ;Indicador=1
goto MAQ3 ;Vamos a explorar Máquina 3
MAQ3 btfsc PORTA,2 ;Máquina 3 inactiva?
goto M3OK ;Vamos a Máquina 3 bien.
M3MAL bcf PORTB,4 ;LVM3=OFF
bsf PORTB,5 ;LRM3=ON
clrf INDICADOR ;Indicador a cero
goto MAQ4 ;Vamos a explorar Máquina 4
M3OK bsf PORTB,4 ;LVM3=ON
bcf PORTB,5 ;LRM3=OFF
movlw .1
movwf INDICADOR ;Indicador=1
goto MAQ4 ;Vamos a explorar Máquina 4
MAQ4 btfsc PORTA,3 ;Máquina 4 inactiva?
goto M4OK ;Vamos a Máquina 4 bien.
M4MAL bcf PORTB,6 ;LVM4=OFF
bsf PORTB,7 ;LRM4=ON
clrf INDICADOR ;Indicador a cero
goto ALARMA ;Vamos a explorar la Alarma
M4OK bsf PORTB,6 ;LVM4=ON
bcf PORTB,7 ;LRM4=OFF
movlw .1
movwf INDICADOR ;Indicador=1
goto ALARMA ;Vamos a explorar la Alarma
ALARMA movf INDICADOR,0 ;INDICADOR→W
sublw 00H
btfss STATUS,2 ;Z=1? INDICADOR=0?
goto ALAOFF ; Hay al menos una máquina=ON.
goto ALAON ; Todas las máquinas= OFF
ALAON bsf PORTA,4 ; ALARMA=ON
goto MAQ1 ;Repetimos el ciclo de exploración.
ALAOFF bcf PORTA,4 ; ALARMA=OFF
goto MAQ1 ;Repetimos el ciclo de exploración.
end ;Fin del Programa
Prof. Luis Zurita 21 Microcontroladores I
6. Diseñe un control de nivel para un tanque.
Se tiene un interruptor selector de “MODO”
Si “MODO” es manual, las bombas se activan sin importar el nivel
del tanque subterráneo.
Si “MODO” es automático, la activación de las bombas dependerá
de:
Si el nivel del agua está por debajo del nivel mínimo, se activará la
bomba 1 hasta que se alcance el nivel Máximo, y procederá a apagarse.
Si el nivel del agua está por encima del nivel mínimo, pero por
debajo del nivel máximo, se activará la bomba 2 hasta que se alcance
el nivel Máximo y procederá a apagarse.
Se debe monitorear si ha cambiado el “MODO”.
SOLUCIÓN:
Paso 1. Enunciado y delimitación del Hardware: Tenemos el enunciado, sin
embargo debemos delimitar el hardware.
Para lograr esta tarea debemos asignar los pines de control de Entrada y
de salida, con la finalidad de saber qué vamos a controlar y quién nos dará la
información.
Debemos identificar cuales elementos son entrada y cuales salida:
ENTRADA ¿Qué pin
Asignamos?
SALIDA ¿Qué pin
Asignamos?
Interruptor “INICIO” RA0 Bomba B1 RB0
Sensor Máximo RA1 Bomba B2 RB1
Sensor Mínimo RA2
¿Y si quiero asignar otros pines? Perfecto, queda a libre elección.
Prof. Luis Zurita 22 Microcontroladores I
Paso 2. Diagrama de Flujo:
INICIO
ConfigurarPuerto A y B
InicializarPuerto B
¿Manual?Bomba 1= ONBomba 2= ON
¿SMáximo? ¿SMínimo?Bomba 1= ON
Bomba 2= OFF
¿Smáximo?
Bomba 1= OFFBomba 2= OFF
Bomba 1= OFFBomba 2= ON
2
M
1
M
1
2
SI
NO
SI
NO
SI
NO
SI
NO
Prof. Luis Zurita 23 Microcontroladores I
Paso 3. Del Diagrama de Flujo al Lenguaje Ensamblador:
list P=16F84A
include P16F84A.INC
org 00H
goto INICIO
INICIO bsf STATUS,5
clrf TRISB
movlw 1FH
movwf TRISA
bcf STATUS,5
clrf PORTB
MODO btfsc PORTA,0 ;MODO AUTO?
goto AUTO
MANUAL bsf PORTB,0 ;No. Modo manual. Bomba 1= ON
bsf PORTB,1 ;Bomba 2=ON
goto MODO
AUTO btfsc PORTA,1 ;MÁXIMO?
goto DOS
btfsc PORTA,2 ;MÍNIMO
goto MODO1
MODO2 bsf PORTB,0 ;Bomba 1=ON
bcf PORTB,1 ;Bomba 2=OFF
UNO btfss PORTA,1 ;MÁXIMO ALCANZADO
goto UNO
DOS bcf PORTB,0 ;Bomba 1=OFF
bcf PORTB,1 ;Bomba 2=OFF
goto MODO
MODO1 bcf PORTB,0 ;Bomba 1=OFF
bsf PORTB,1 ;Bomba 2=ON
goto UNO
end