Vous êtes sur la page 1sur 9

UNIVERSIDAD NACIONAL AUTNOMA DE

MXICO

FACULTAD DE INGENIERA
INGENIERA DE SOFTWARE
PRACTICA 3
PUERTOS PARALELOS II
SEMESTRE 2015-2

GRUPO 1
ALUMNO:
Prez Montiel Ivn
Santilln Pulido Ral Daniel
Urea Castillo Alejandro
PROFESOR:
Melndez Reyes Moiss
FECHA DE INICIO: 9/02/15
FECHA DE ENTREGA 23/03/15
Programa 1: Empleando dos puertos paralelos del microcontrolador PIC, uno de
ellos configurado como entrada y el otro como salida; realizar un programa que de
acuerdo al valor del bit menos significativo del puerto A, se genere la accin
indicada en el puerto B.
Valor PA0

Accin puerto B

00000000

11111111

Pseudocdigo :
1.- inicio
2.- poner en ceros todo el portA
3.-poner en ceros todo el portB
4.-poner un uno en RP0
5.-poner un cero en RP1
6.-mover a W el numero 06
7.-mover W a ADCON1 para entradas digitales
8.-mover ff a W para que sea entrada
9.-mover a w en 00
10.-mover el 00 a TRISB para que sea salida
11.-poner un cero en RP0
12.-subrutina ciclo
13.-verificar si en el bit 0 de PORTA hay un 1
14.-si hay 1 entonces PORTA se va a etiqueta de encendido
15.-si hay 0 entonces poner en ceros en PORTB
16.-ir a la etiqueta ciclo
17.-subrutina enciende
18.-mover w el numero ff
19.-mover lo que hay en w a PORB
20.-subritina focos
21.-ir a la etiqueta ciclo
22.-terminar el programa
Cdigo:
processor 16f877 ; Indica el procesador que se utilizara
include <p16f877.inc> ;Incluye la biblioteca del pic
org 0
;Sirve para el estado inicial del pic o sea el estado del reset
goto inicio
;Salta a la etiqueta inicio
org 5
;Indica en que bloque de memoria se debe empezar es decir el
estado reset
inicio:;Etiqueta inicio
clrf PORTA
;Pone en ceros todo el PORTA
clrf PORTB
;Pone en ceros todo el PORTB
bsf STATUS,RP0 ;Pone un uno en RP0 para moverse a el banco 1
bcf STATUS,RP1 ;Pone un cero en RP1 para moverse al banco 1
movlw 06h
;Mueve a W el numero 06
movwf ADCON1
; Mueve el 06 a ADCON1 para que las entradas y
salidas sean digitales
movlw h'ff'
;Mueve ff a W
movwf TRISA
;Mueve el ff a TRISA para que el PORTA sea de entrada
movlw 00h
;Mueve a W 00
movwf TRISB
;Mueve el 00 a TRISB para que PORTB sea de salida

bcf STATUS,RP0 ;Pone un cero a RP0 para moverse al bamco 0


ciclo:;Etiqueta ciclo
btfsc PORTA,0
;Verifica si en el bit 0 del PORTA hay un 1
goto enciende
;Si hay un uno en PORTA se va a la etiqueta enciende
clrf PORTB
;Si hay un cero en PORTA pone ceros en PORTB
goto ciclo
;Se va a la etiqueta ciclo
enciende:
;Etiqueta enciende
movlw h'ff'
;Mueve a W el numero ff
movwf PORTB
;Mueve lo que hay en W a PORTB, en este caso
enciende los focos
goto ciclo
;Se va a la etiqueta ciclo
end
;Termina el pograma
Anlisis de resultado.
Importante el uso de ADCON1 para asi poder manejar seales analgicas ya que
este registro controla el convertidos analgico/digital del pic, sin el no podramos
realizar este ejercicio para poder manejar la entrada y la salida desde el dip
switch.

Programa 2.-Realizar un programa, el cul realice las siguientes acciones de


control, para lo cul requiere trabajar un puerto de entrada y otro puerto de salida,
usar los sugeridos en el ejercicio anterior; generar retardos de 12 seg., en las
secuencias que lo requieran.

Pseudocdigo :
Etiqueta puertoa
Evalua si en el bit 2 del PORTA hay un uno
Si hay un uno en PORTA va a la etiqueta a0xx
Si hay un cero se va a la etiqueta a1xx
Etiqueta a0xx
Evalua si en el bit 1 del PORTA hay un uno
Si hay un uno en PORTA va a la etiqueta a00x
Si hay un cero se va a la etiqueta a01x
Etiqueta a00x
Evalua si en el bit 1 del PORTA hay un uno
Si hay un uno en PORTA va a la etiqueta a00x
Si hay un cero se va a la etiqueta a01x
Evalua si en el bit 0 del PORTA hay un uno
Si hay un uno en PORTA va a la etiqueta apagar
Si hay un cero se va a la etiqueta encender
Etiqueta a01x
Evalua si en el bit 0 del PORTA hay un uno
Si hay un uno en PORTA va a la etiqueta izquierda
Si hay un cero se va a la etiqueta derecha
Etiqueta a1xx
Evalua si en el bit 0 del PORTA hay un uno
Si hay un uno en PORTA va a la etiqueta ambos
Si hay un cero se va a la etiqueta apagarencender
Etiqueta encender
Mueve a W el nuemro ff
Mueve a PORTB el numero ff, en este caso prende leds
Va a la etiqueta puertoa
Etiqueta apagar
Pone en ceros todo el PORTB

Va a la etiqueta puertoa
Etiqueta ambos
w=80
PORTB =w
llamar retardo
Etiqueta derecha0:
corrimiento a la derecha
llamar retardo
bit 0 de portb es 1?
no derecha0
si w=1
PORTB=w
llamar retardo
Etiqueta izq0:
corrimiento a la izquierda
llamar retardo
bit 7 de portb es 1?
no derecha0
si regresa a pouertoa
Etiqueta izquierda
Hace un corrimiento de uno en uno a la izquierda en el PORTB
Evalua si en el bit 7 del PORTB hay un uno
Va a la etiqueta izquierda si en el bit 7 del PORTB hay un uno
Va a la etiqueta puertoa si en el bit 7 del PORTB hay un cero
Etiqueta derecha
Hace un corrimiento de uno en uno a la derecha en el PORTB
Evalua si en el bit 0 del PORTB hay un uno
Va a la etiqueta derecha si en el bit 0 del PORTB hay un uno
Etiqueta apagarencender
Mueve a W el valor ff
Mueve a PORTB lo que hay en W
Llama a retardo
Mueve a W el valor 00
Mueve a PORTB lo que hay en W
Salta a la etiqueta puertoa
Etiqueta retardo.

Cdigo:
processor 16f877; Indica el procesador que se utilizara
include<p16f877.inc>;Incluye la biblioteca del pic
contador equ h'20';Reserva la localidad 20 de la memoria para almacenar la
variable contador

valor1 equ h'21';Reserva la localidad 21 de la memoria para almacenar la variable


valor1
valor2 equ h'22';Reserva la localidad 22 de la memoria para almacenar la variable
valor2
valor3 equ h'23';Reserva la localidad 23 de la memoria para almacenar la variable
valor3
cte1 equ 20h;Asigna a cte1 el valor constante 20h
cte2 equ 50h;Asigna a cte2 el valor constante 50h
cte3 equ 60h;Asigna a cte3 el valor constante 30h
org 0;Sirve para el estado inicial del pic o sea el estado del reset
goto inicio;Salta a la etiqueta inicio
org 5;Indica en que bloque de memoria se debe empezar es decir el estado
reset
inicio: clrf PORTA;Pone en ceros todo el PORTA
clrf PORTB;Pone en ceros todo el PORTB
bsf STATUS,RP0;Pone un uno en RP0 para ir al baco 1
bcf STATUS,RP1;Pone un cero en RP1 para ir al banco 1
movlw 06h;Mueve a W el nuemro 06
movwf ADCON1;Mueve el 06 a ADCON1 para que las entradas y salidas
sean digitales
movlw h'ff';Mueve a W el numero ff
movwf TRISA;Mueve a TRISA el numero ff
movlw 00h;Mueve a W el numero 00
movwf TRISB;Mueve el 00 a TRISB
bcf STATUS,RP0;Pone un cero en RP0 para regresar al banco 0
puertoa:;Etiqueta puertoa
btfss PORTA,2;Evalua si en el bit 2 del PORTA hay un uno
goto a0xx;Si hay un uno en PORTA va a la etiqueta a0xx
goto a1xx;Si hay un cero se va a la etiqueta a1xx
a0xx:;Etiqueta a0xx
btfss PORTA,1;Evalua si en el bit 1 del PORTA hay un uno
goto a00x;Si hay un uno en PORTA va a la etiqueta a00x
goto a01x;Si hay un cero se va a la etiqueta a01x
a00x:;Etiqueta a00x
btfss PORTA,0;Evalua si en el bit 0 del PORTA hay un uno
goto apagar;Si hay un uno en PORTA va a la etiqueta apagar
goto encender;Si hay un cero se va a la etiqueta encender
a01x:;Etiqueta a01x
btfss PORTA,0;Evalua si en el bit 0 del PORTA hay un uno
goto izquierda;Si hay un uno en PORTA va a la etiqueta izquierda
goto derecha;Si hay un cero se va a la etiqueta derecha
a1xx:;Etiqueta a1xx
btfss PORTA,0;Evalua si en el bit 0 del PORTA hay un uno
goto ambos;Si hay un uno en PORTA va a la etiqueta ambos
goto apagarencender;Si hay un cero se va a la etiqueta apagarencender
encender:;Etiqueta encender
movlw h'ff';Mueve a W el nuemro ff

movwf PORTB;Mueve a PORTB el numero ff, en este caso prende los focos
goto puertoa;Va a la etiqueta puertoa
apagar:;Etiqueta apagar
clrf PORTB;Pone en ceros todo el PORTB
goto puertoa;Va a la etiqueta puertoa
ambos:; movlw h'80' ;w=80
movwf PORTB ;portb=w
call retardo
derecha0:
rrf PORTB,1 ;corrimiento derecha
call retardo ;llamar retardo
btfss PORTB,0;pregunta bit0 de portb encendio
goto derecha0 no regresar a derecha0
movlw h'01';si w=1
movwf PORTB ;portb=w
call retardo
izq0:
rlf PORTB,1 ;corrimiento a la izquierda
call retardo
btfss PORTB,7 ; pregunta bit7 de portb encendio
goto izq0 ;no regresa a izq0
goto puertoa ; si regresa a puertoa
izquierda:;Etiqueta izquierda
rlf PORTB,1;Hace un corrimiento de uno en uno a la izquierda en el PORTB
call retardo;Llama a la etiqueta retardo
btfss PORTB,7;Evalua si en el bit 7 del PORTB hay un uno
goto izquierda;Va a la etiqueta izquierda si en el bit 7 del PORTB hay un
uno
goto puertoa;Va a la etiqueta puertoa si en el bit 7 del PORTB hay un cero
derecha:;Etiqueta derecha
rrf PORTB,1;Hace un corrimiento de uno en uno a la derecha en el PORTB
call retardo;Llama a la etiqueta retardo
btfss PORTB,0;Evalua si en el bit 0 del PORTB hay un uno
goto derecha;Va a la etiqueta derecha si en el bit 0 del PORTB hay un uno
goto puertoa;Va a la etiqueta puertoa si en el bit 0 del PORTB hay un cero
apagarencender:;Etiqueta apagarencender
movlw h'ff';Mueve a W el valor ff
movwf PORTB;Mueve a PORTB lo que hay en W
call retardo;Llama a retardo
movlw h'00';Mueve a W el valor 00
movwf PORTB;Mueve a PORTB lo que hay en W
call retardo;Llama a retardo
goto puertoa;Salta a la etiqueta loop2
retardo: movlw cte1;Mueve cte1 a W
movwf valor1;Mueve lo que hay en W a valor1
tres: movlw cte2;Mueve cte2 a W
movwf valor2;Mueve lo que hay en W a valor2

dos:

movlw cte3;Mueve cte3 a W


movwf valor3;Mueve lo que hay en W a valor3
uno: decfsz valor3;decrementa valor3 y si se pone un 1 en la bandera Z se salta
una instruccion si no contina con la siguiente instruccion
goto uno;Salta a la etiqueta uno
decfsz valor2;decrementa valor2 y si se pone un 1 en la bandera Z se salta
una instruccion si no contina con la siguiente instruccion
goto dos;Salta a la etiqueta dos
decfsz valor1;decrementa valor1 y si se pone un 1 en la bandera Z se salta
una instruccion si no contina con la siguiente instruccion
goto tres;salta a la etiqueta tres
return;regresa a la instruccion siguiente de la que fue llamada
end;
Termina el programa
Anlisis de resultados:
Este programa fue ms complejo que los que se han hecho hasta el momento,
tuvimos xito al desarrollarlo, ya que utilizando las etiquetas controlamos el flujo
del programa dependiendo de las entradas que reciba a travs del DIP Switch.
Para todos los casos siempre se regresaba a la parte inicial del programa para
poder cambiar su comportamiento si es que haban cambiado los bits de entrada.
Se utiliz el DIP switch para leer las entradas y los LEDs para representar las
salidas.

Conclusiones:
Prez Montiel Ivn
En esta prctica aprendimos a configurar el registro ADCON1 que es
indispensable cuando se quiere manejar seales analgicas ya que este registro
controla el convertidor analgico/digital del pic.
Para esta prctica tuvimos que utilizarlos para establecer como entrada digital el
PORTA que utilizamos manejandolo con un dip switch. En esta prctica solo lo
utilizamos para eso, pero estoy seguro que en las siguientes prcticas las
utilizaremos para seales analgicas.
El cdigo est muy largo porque estuvimos evaluando cada caso de entrada, la
profesora nos dijo que con el operador lgico xor salia mas rpido, en la prxima

prctica lo utilizaremos con la sentencia xorlw.


Santillan Pulido Ral Daniel
En esta prctica se utilizaron diversos conceptos vistos en prcticas anteriores con
la diferencia de que realizara una accin diferente dependiendo del valor en el
que estuviera el DIP Switch, por lo que se realizo algo parecido a un CASE.
Tambin vimos la instruccin MOVWF ADCON1 la cual nos o indica que los
puertos A y B los utilizaremos como entradas o salidas digitales. Posteriormente
vimos la instruccin MOVWF TRISA la cual nos va a configurar el puerto como una
entrada. Me gust la prctica.
Urea Castillo Alejandro
En esta prctica se hizo uso de los micro switch y de los leds para hacer una serie
de secuencias que involucraban el uso de leds como puerto de salida, el primer
ejercicio no tuvo complicaciones, pero en el segundo al momento de realizar el
ejercicio del ping-pong nos cost trabajo porque una rutina se estaba perdiendo y
no regresaba a donde tena que regresar. En general se cumplieron los objetivos
de la prctica ya que se utilizaron los puertos de entrada y salida para realizar
funciones especificas.