Está en la página 1de 8

INFORME LAB #4

Luis Felipe Trigos Delgado

Introducción
En el siguiente informe se realizará una investigación más a fondo sobre los
distintos comandos para configurar los puertos y trabajar con más características de
los microcontroladores, además de esta investigación se comprobará el
funcionamientos de algunos códigos ya creados y facilitados por la docente.

Objetivos
-Aprender a configurar Puertos.
- Realizar programas con las instrucciones aritméticas y lógicas, obteniendo y
visualizando los datos a través de los puertos y registros.

Procedimiento

Con sus palabras indique qué operación está realizando cada una de las
instrucciones siguientes:

- addlw k: se suma el literal contenido en k al contenido del registro w.

- addwf f,d: añade el contenido del registro W al contenido del registro “f”, y
almacena el resultado en W si d = 0, y en el registro “f” si d = 1.

- sublw k: se resta el literal contenido en k al contenido del registro w.

- subwf f,d: se resta el contenido del registro W al contenido del registro “f” y
almacena el resultado en W si d=0, y en el registro “f” si d=1.

- decf f,d: se decrementa en una unidad el contenido de “f”, y almacena el resultado


en W si d = 0 o en el registro “f” si d= 1.

- incf f,d: se incrementa el contenido del registro “f” en una unidad y almacena el
resultado en W si d = 0 y en el registro “f” si d = 1.

- andlw k: efectúa la operación AND lógica entre el contenido del registro W y el


literal k, y almacena el resultado en W.

- andwf f,d: Efectúa la operación AND lógica entre el contenido del registro W y el
contenido del registro “f”, y almacena el resultado en W si d = 0, y en “f” si d=1.
- comf f,d: realiza el complemento del contenido del registro “f” bit a bit. El resultado
se almacena en el registro “f” si d=1 y o en el registro W si d = 0, en este caso “f” no
varía.
- iorlw k: realiza la operación lógica OR entre el contenido del registro W y el literal k.
El resultado se almacena en W.

- iorwf f,d: realiza la operación lógica OR entre el contenido del registro W y el


contenido del registro “f”, y almacena el resultado en W si d = 0 y en el registro “f” si
d = 1.

- rlf f,d: rotación de un bit hacia la izquierda del contenido del registro “f”, pasando
por el bit de acarreo C, y almacena el resultado en W si d = 0 y en “f” si d=1.

- rrf f,d: rotación de un bit hacia la derecha del contenido del registro “f”, pasando por
el bit de acarreo C, y almacena el resultado en W si d = 0 y en el registro “f” si d = 1.

- swapf f,d: intercambio de los cuatro bits de mayor peso por los cuatro bits de
menor peso del mismo registro. El registro destino será W si d = 0 i será “f” si d=1.

- xorlw k: realiza la operación lógica OR – EXCLUSIVA bit a bit, entre el contenido


del registro W y el literal k, y almacena el resultado en W.

- xorwf f,d: realiza la operación lógica OR – EXCLUSIVA bit a bit entre el contenido
del registro W y el contenido del registro “f”, y almacena el resultado en W si d=0, o
en el registro “f” si d = 1.

2. Copie el código de el primer programa encontrado dentro de la guía en MPLAB,


verifique si la sintaxis es correcta, realice las correcciones para depurar en MPLAB.
Si hay correcciones, incluya dichas correcciones en el informe.

Código original

#include
<xc.inc>;Se llaman las librerias
CONFIG FOSC = XT ;Se configura el cristal XT y las demas opciones de
configuración se dejan en OFF
CONFIG WDTE = OFF
CONFIG PWRTE = OFF
CONFIG BOREN = OFF
CONFIG LVP = OFF
CONFIG CPD = OFF
CONFIG WRT = OFF
CONFIG CP = OFF
RESULTADO EQU 0x20 ;Le da el valor númerico 20 a cada aparición de
RESULTADO dentro del codigo
ORG 0x05 ;Indica en donde inicia el codigo del programa
goto Inicio ;Va a la etiqueta Inicio

Inicio:
bsf STATUS,5 ;Se coloca en 1 en bit 5 de STATUS
movlw 11111111B ;Se mueve al registro de trabajo el literal 11111111 en binario
movwf TRISC ;Se mueve el contenido del registro de trabajo W al registro TRISC
clrf TRISD ;Se colocan en 0 todos los bits del registro TRISD
bcf STATUS,5 ;Se coloca en 0 el bit 5 de STATUS

Ciclo: ;Se codifica el ciclo


movf PORTC,0 ;Se mueve el contenido del registro PORTC al registro de trabajo W
addlw 10B ;Se suma el literal 10 en binario al registro de trabajo W movwf PORTD
;Se mueve el contenido del registro de trabajo W al registro PORTD movwf
RESULTADO ;Se mueve el contenido del registro de trabajo W al literal
RESULTADO
goto Ciclo ;Se reinicia el ciclo
END

Correcciones en el código

Se cambiaron las primeras dos líneas de código del programa por su versión más
actualizada de inclusión de librerías, es decir los códigos:

LIST P = 16F877
INCLUDE <P16F877.INC>

Y se usó:

#include <xc.inc>
CONFIG FOSC = XT
CONFIG WDTE = OFF
CONFIG PWRTE = OFF
CONFIG BOREN = OFF
CONFIG LVP = OFF
CONFIG CPD = OFF
CONFIG WRT = OFF
CONFIG CP = OFF

Posteriormente se cambió el comando ORG 0x00, el cual indica donde arranca el


código después de un reset a ORG 0x05, el cual indica donde inicia el código del
programa.
Luego se añadió la acción “goto Inicio” y se corrigieron los renglones en donde se
encontraba la acción de Inicio y Ciclo, agregando al final de estos los :, para que su
indicación fuera correcta.
Como cuarto y último aspecto a corregir del código inicial se modificó el formato que
seguía los comandos movlw y addlw, dado que el formato que indica que es binario
ya no se indica con la b,y las comillas sino con una B mayúscula al final del número,
y el formato decimal ya no se indica con una d y sino escribiendo el número normal..

Funcionamiento del código

Como se observa en la memoria del programa y en los bits de los registros, el


programa funciona correctamente posterior a las correcciones realizadas.
Prueba de escritorio

Segundo código

#include <xc.inc>;Se llaman las librerias


CONFIG FOSC = XT ;Se configura el cristal XT y las demas opciones de
configuración se dejan en OFF
CONFIG WDTE = OFF
CONFIG PWRTE = OFF
CONFIG BOREN = OFF
CONFIG LVP = OFF
CONFIG CPD = OFF
CONFIG WRT = OFF
CONFIG CP = OFF

;ID= U00123570

DECRE EQU 0x20


INCRE EQU 0x21
DATOA EQU 25 ;Se establece el valor del literal DATOA (1111111)
RESULTADO EQU 255 ;Se establece el valor del literal RESULTADO como el valor
del DATOB (1111111)

ORG 0x05;Indica en donde inicia el codigo del programa


goto Inicio ;Va a la etiqueta Inicio

Inicio
movlw DATOA ;Se mueve el literal DATOA al registro de trabajo
subwf RESULTADO,0 ;Se resta el DATOA con el DATOB (DATOB=RESULTADO)
bcf STATUS,5;Se coloca en 0 el bit 5
;Se comprueba si el Dato A y el Dato B es igual a 0.
;Si Dato A = Dato B, Salta
btfss STATUS,2;Se verifica el estado de la bandera Z, para determinar si la resta da
0
goto Mayor ;Va a la etiqueta Mayor para comprobar si es mayor o menor el Dato A
al Dato B
goto Igual ;Va a la etiqueta igual ya que la resta dio igual a 0

Mayor:
;Si Dato A > Dato B, Salta
btfsc STATUS,0 ;Se comprueba el estado de la bandera C para determinar si
DATOA > o <= que DATOB
goto Menor ;Va a la etiqueta menor ya que la resta da negativa, indicando que el
Dato A < Dato B
;Mayor
movlw DATOA ;Se mueve el literal DATOA al registro de trabajo
movwf PORTC ;Se mueve al registro PORTC el contenido del registro de trabajo
movwf PORTD ;Se mueve al registro PORTD el contenido del registro de trabajo
movwf PORTB ;Se mueve al registro PORTB el contenido del registro de trabajo
movlw RESULTADO ;Se mueve el literal RESULTADO al registro de trabajo
andwf PORTC ;Se realiza la operación AND entre el DATOA y el DATOB, se guarda
el resultado en PORTC
iorwf PORTD ;Se realiza la operación OR entre el DATOA y el DATOB, se guarda el
resultado en PORTD
xorwf PORTB ;Se realiza la operación XOR entre el DATOA y el DATOB, se guarda
el resultado en PORTB
comf RESULTADO ;Se realiza el complememto al DATOB, se guarda el resultado en
RESULTADO
goto Inicio

Menor:
movlw RESULTADO ;Se mueve el literal RESULTADO al registro de trabajo
movwf PORTD ;Se mueve al registro PORTD el contenido del registro de trabajo
movlw DATOA ;Se mueve el literal DATOA al registro de trabajo
subwf PORTD ;Se resta al DATOA (Registro de Trabajo) el DATOB (PORTD), y se
guarda el resultado en PORTD
goto Inicio

Igual:
movlw DATOA ;Se mueve el literal DATOA al registro de trabajo
addwf RESULTADO ;Se suma el Dato A
goto Inicio
END

También podría gustarte