UNIVERSIDAD DE LA COSTA
DEPARTAMENTO DE INGENIERIA
FACULTAD DE INGENIERÍA
ENTRADAS Y SALIDAS DIGITALES DEL PIC16F84A.
Andrés Calderin, Jair Rios, Willian Sarmiento.
Ingeniería Electrónica.
Sistemas embebidos I. Grupo: AN
Resumen
Esta experiencia tiene como objetivo principal la familiarización de las entradas y salidas digitales por medio del
lenguaje Assembly implementado en un PIC16F84A. Para la programación de este se utilizó el IDE MPLAB y de
la herramienta PROTEUS para realizar la simulación del circuito. Inicialmente se configuró el PIC16F84A para
que fácilmente se represente como un contador binario con una entrada digital ya sea, para incrementar o
decrementar un registrador. Luego, se modificó dicho código y configuración del circuito en proteus para realizar
la secuencia anterior, pero hallando el cálculo para realizar un atraso de 20ms. Por último, se implementó un
comparador digital en donde se toma dos señales como entrada y se determina cuando las entradas son diferentes
o iguales.
Palabras claves
Assembly, código, contador, microcontrolador, comparador.
Abstract
The main objective of this experience is to familiarize digital inputs and outputs through the Assembly language
implemented in a PIC16F84A. To program this, the IDE MPLAB and the PROTEUS tool are programmed to
simulate the circuit. PIC16F84A was initially configured to easily represent itself as a binary counter with either
a digital input, to increase or decrease a recorder. Then, he modified said code and protection circuit
configuration to perform the above sequence, but found the calculation to perform a delay of 20 ms. Finally, a
digital comparator is implemented where two signals are taken as input and it is determined when the inputs are
different or the same.
Keywords
Assembly, code, counter, microcontroller, comparator.
1. Introducción.
Un PIC es un circuito integrado programable (Programmable Integrated Circuited), el cual contiene todos los
componentes para poder realizar y controlar una tarea, por lo que se denomina un microcontrolador. Está
compuesto por una unidad central de proceso (CPU), memorias (ROM y RAM) y líneas de entrada y salida
(periféricos). Los PIC´s son una familia de microcontroladores tipo RISC fabricados por Microchip y derivados
del PIC1650, originalmente desarrollado por la división de microelectrónica de General Instrument.
[CITATION She19 \l 9226 ]
En otras palabras, los microcontroladores son dispositivos que pueden ser utilizados en distintas aplicaciones,
como lo son: los manejos de sensores, controladores, calculadoras, control de motores, entre otras aplicaciones
que este dispositivo puede tener.
2. Objetivos.
2.1 Objetivo general.
1
UNIVERSIDAD DE LA COSTA
DEPARTAMENTO DE INGENIERIA
FACULTAD DE INGENIERÍA
Familiarizarse con las entradas y salidas digitales de los microcontroladores.
2.2 Objetivos específicos.
Calcular la rutina para realizar atrasos en los microcontroladores.
Ejecutar un código para el PIC para la implementación de un contador binario.
Implementar un comparador digital mediante el lenguaje Assembly.
3. Fundamentos Teóricos.
El PIC16F84A que se puede ver en la figura 1 es un dispositivo de 8 bits, lo que implica que la mayoría de sus
registros cuentan con 8 bits de ancho.[CITATION Wan19 \l 9226 ]
Figura 1. Microchip PIC16F84A.
El tamaño de la memoria del programa nos deja saber cuánto código puede ser grabado dentro del
microcontrolador; 1750 bytes de memoria de programa bastan para aplicaciones sencillas, que es donde se utiliza
principalmente el PIC16F84A.[CITATION Wan19 \l 9226 ]
Especificaciones:
-Ancho de bus: 8 bits
-Total de pines - 18 (PDIP, SOIC) / 20 (SSOP).
-Memoria total:1750 bytes.
-Velocidad de CPU: 5 millones de instrucciones por segundo.
-Tamaño de RAM :68 bytes
-Tamaño de EEPROM: 64 bytes.
A continuación, en la figura 2 se presenta el diagrama esquemático del PIC16F84A.
2
UNIVERSIDAD DE LA COSTA
DEPARTAMENTO DE INGENIERIA
FACULTAD DE INGENIERÍA
Figura 2. Diagrama esquemático.
El tamaño de la RAM es aproximadamente la cantidad de registros que puede usar de manera libre, como
variables en la programación de lenguaje de alto nivel (C ++, Java, etc.).
El tamaño de EEPROM indica la cantidad de datos que se puede almacenar y que retendrá la información
almacenada incluso si se apaga la alimentación. Por ejemplo, si desea que el PIC16F84A almacene una
contraseña, puede almacenar hasta 64 caracteres (ASCII). [CITATION Wan19 \l 9226 ]
Una notable desventaja del PIC16F84A es su falta de periféricos o microcontroladores esenciales, como la
conversión analógica a digital y las comunicaciones serie. [CITATION Wan19 \l 9226 ]
Memoria de programa:
La memoria de programa se encuentra organizada con palabras de 14 bits con un total de 1 K, del tipo
EEPROM, que durante el funcionamiento es de solo lectura. Sólo se ejecutará el código contenido en esta
memoria, pudiendo almacenar en ella una cantidad limitada de datos como parte de la instrucción RETLW. En
una sola palabra se agrupa el código de la instrucción y el operando o su dirección. [CITATION Wan19 \l
9226 ]
A continuación, en la figura 3 se describen los pines del PIC16F84A.
3
UNIVERSIDAD DE LA COSTA
DEPARTAMENTO DE INGENIERIA
FACULTAD DE INGENIERÍA
Figura 3. Descripción de los pines del PIC16F84A.
Memoria de datos:
Está organizada en dos páginas o bancos de registro. Cada banco se divide a su vez en dos áreas. La primera
es la de RFS (Registros de Funciones Especiales) que controlan el funcionamiento del dispositivo. Estos se
emplean para el control del funcionamiento de la CPU y de los periféricos. [CITATION Wan19 \l 9226 ]
Para direccionar la memoria de datos se emplean dos modos de direccionamiento, el directo y el indirecto: En
el direccionamiento directo, los 7 bits de menos peso del código OP de la instrucción proporcionan la dirección
en la posición de la página, mientras que los bits RP1 y RP0 de STATUS seleccionan la página o el banco. En el
direccionamiento indirecto el operando de la instrucción hace referencia al registro IDNF, que ocupa la posición
00h del área de datos. Se accede a la posición que apunta el registro FSR 04h del banco 0. Los 7 bits de menos
peso de FSR seleccionan la posición y su bit de más peso, junto con el bit IRP del registro de estado, seleccionan
la página.[CITATION Wan19 \l 9226 ]
A continuación, en la figura 4 se presenta el diagrama de los bancos de memoria del PIC16F84A.
4
UNIVERSIDAD DE LA COSTA
DEPARTAMENTO DE INGENIERIA
FACULTAD DE INGENIERÍA
Figura 4. Diagrama de los bancos de memoria del PIC16F84A.
*COMPARADORES
Los comparadores son circuitos digitales como el que se puede ver en la figura 5 que realizan la comparación
de dos palabras A y B de N bits tomadas como un número entero, para saber si son iguales o si una es mayor que
otra en tres salidas que son las siguientes: A=B, A>B y A<B. [3]
Figura 5. Circuito lógico de un comparador.
Un circuito comparador combinatorio compara dos entradas binarias (A y B de n bits) para indicar la relación
de igualdad o desigualdad entre ellas por medio de "tres banderas lógicas" que corresponden a las relaciones A
igual B, A mayor que B y A menor que B. Cada una de estas banderas se activará solo cuando la relación a la que
corresponde sea verdadera, es decir, su salida será 1 y las otras dos producirán una salida igual a cero. [3]
Dentro de la familia de circuitos TTL se les denomina a estos circuitos con el número 7485 y manejan
entradas de 4 bits, además de que también se les puede conectar en cascada para manejar entradas más grandes.
[3]
5
UNIVERSIDAD DE LA COSTA
DEPARTAMENTO DE INGENIERIA
FACULTAD DE INGENIERÍA
*COMPARADORES DE 1 BIT
Para unos operandos A y B de un bit se puede desarrollar un comparador de la siguiente tabla que se ve en la
figura 6:
Figura 6. Tabla de la verdad de un comparador de un bit. [4]
4. Desarrollo experimental.
Para el desarrollo de esta experiencia se hicieron necesarios los siguientes materiales y software:
Data Sheet PIC16F84A.
IDE PROTEUS
IDE MPLAB X
*Procedimiento:
1. En un nuevo proyecto de MPLAB, se realizó y compiló el código de un programa, el cual consistía en
configurar el PIC16F84A para que este funcionara como un contador binario con una entrada que permitiera
decrementarlo o incrementarlo, en nuestro caso optamos por hacerlo de tal forma que este incrementara el
contador y mediante 8 leds conectados al puerto B se indicaba el estado del contador. Se verificaron los mensajes
y posibles errores y se analizó el programa antes de ser cargado:
LIST P=16F84A; se indicó que microcontrolador se usaría.
INCLUDE <[Link]> ; Se incluyó la librería del PIC.
;----- Reset Vector process ---------
RES_VECT CODE 0x0000 ; Reinicia el vector del procesador
GOTO START ; Se dirige al programa de inicio
__CONFIG _FOSC_XT & _WDTE_OFF & _PWRTE_ON & _CP_OFF
MAIN_PROG CODE ; Permite enlazar para colocar el programa principal.
;----- Begining of the Program ---------
START
BCF STATUS, RP0 ; Selecciona el banco 0 con el bit de registro del banco de registro (RP0).
CLRF PORTB ; Borra todos los datos almacenados en los puertos PORTB.
BSF STATUS, RP0 ; Selecciona el banco 1 con el bit de registro del banco de registro (RP0) para el puerto de
configuración.
MOVLW 0x1F ; Mueve el valor hexadecimal 0x1F a W.
MOVWF TRISA; Mueve los datos W al registro TRISA.
MOVLW 0x00; Mueve el valor hexadecimal 0x00 a W.
6
UNIVERSIDAD DE LA COSTA
DEPARTAMENTO DE INGENIERIA
FACULTAD DE INGENIERÍA
MOVWF TRISB; Mueve los datos W al registro TRISB.
BCF STATUS, RP0 ; Selecciona el Banco 0 para la manipulación del puerto que sigue.
MAIN
BTFSS PORTA,0 ; Saltamos una instrucción si el bit a evaluar está en 1, si no, ejecutamos la instrucción
siguiente.
GOTO MAIN; Retorna al ciclo MAIN.
BTFSC PORTA, 0 ; Saltamos una instrucción si el bit a evaluar está en 0, si no, ejecutamos la instrucción
siguiente.
GOTO $-1 ; Regresamos una posición
MOVLW 0x01 ; Mueve el valor hexadecimal 0x01 a W.
ADDWF PORTB, 1 ; Adicionamos el valor de W al valor almacenado en el puerto B.
GOTO MAIN; Retorna al ciclo MAIN.
END ; Finalizamos el programa
2. Una vez compilado y analizado el programa, se procedió a diseñar el circuito en el IDE proteus como se puede
ver en la figura 7.
Figura 7. Circuito diseñado en Proteus para simulación.
3. Posteriormente, se simuló el código, una vez el código hexadecimal fue exportado de MPLAB y cargado en
PROTEUS como se puede ver en la figura 8.
Figura 8. Simulación en proteus de incremento de contador binario.
4. Luego, se fueron incrementando de a uno el contador binario hasta a llegar a ciertos valores (7) y (31) como se
puede ver en la figura 9 y 10 respectivamente.
7
UNIVERSIDAD DE LA COSTA
DEPARTAMENTO DE INGENIERIA
FACULTAD DE INGENIERÍA
Figura 9. Simulación en proteus de incremento de contador binario en el valor de 7.
Figura 10. Simulación en proteus de incremento de contador binario en el valor de 31.
5. Luego de haber realizado el primer paso, se modificó el circuito y el código con el fin de realizar un contador
binario en que su valor por defecto iba a ser cero como se puede ver en la figura 11, pero en esta ocasión se
utilizaría una rutina antirrebote con un atraso de 20ms.
Figura 11. Circuito diseñado en Proteus para simulación con antirrebote y valor inicial de 0.
A su vez, el código se compiló y se analizó antes de ser cargado:
LIST P=16F84A; se indicó que microcontrolador se usaría.
INCLUDE <[Link]> ; Se incluyó la librería del PIC.
;----- Reset Vector process ---------
RES_VECT CODE 0x0000 ; Reinicia el vector del procesador
GOTO START ; Se dirige al programa de inicio
__CONFIG _FOSC_XT & _WDTE_OFF & _PWRTE_ON & _CP_OFF
;----- CBLOCK Directive ---------
; CBLOCK ; es una directiva de ensamblaje, asigna valores secuenciales a cada símbolo declarado en su interior.
CBLOCK 0x0C ; Selecciona el primer valor (registro) a asignar.
COUNT1
COUNT2
8
UNIVERSIDAD DE LA COSTA
DEPARTAMENTO DE INGENIERIA
FACULTAD DE INGENIERÍA
ENDC; Indica cuando el ensamblador debe detenerse.
MAIN_PROG CODE ; Permite enlazar para colocar el programa principal.
;----- Begining of the Program ---------
START
BCF STATUS, RP0 ; Selecciona el banco 0 con el bit de registro del banco de registro (RP0).
CLRF PORTB ; Borra todos los datos almacenados en los puertos PORTB.
BSF STATUS, RP0 ; Selecciona el banco 1 con el bit de registro del banco de registro (RP0) para el puerto de
configuración.
MOVLW 0x1F ; Mueve el valor hexadecimal 0x1F a W.
MOVWF TRISA; Mueve los datos W al registro TRISA.
MOVLW 0x00; Mueve el valor hexadecimal 0x00 a W.
MOVWF TRISB; Mueve los datos W al registro TRISB.
BCF STATUS, RP0 ; Selecciona el Banco 0 para la manipulación del puerto que sigue
MAIN
BTFSS PORTA,0 ; Saltamos una instrucción si el bit a evaluar está en 1, si no, ejecutamos la instrucción
siguiente.
GOTO MAIN; Retorna al ciclo MAIN.
BTFSC PORTA, 0 ; Saltamos una instrucción si el bit a evaluar está en 0, si no, ejecutamos la instrucción
siguiente.
GOTO $-1 ; Regresamos una posición
MOVLW 0x01 ; Mueve el valor hexadecimal 0x01 a W.
ADDWF PORTB, 1 ; Adicionamos el valor de W al valor almacenado en el puerto B.
GOTO MAIN; Retorna al ciclo MAIN.
DELAY Le asignamos el nombre a la rutina.
MOVLW d'255' ; Mueve el valor decimal 255 a W.
MOVWF COUNT1; Mueve los datos W al registro COUNT1.
MOVLW d'13' ; Mueve el valor decimal 13a W.
MOVWF COUNT2; Mueve los datos W al registro COUNT1.
LOOP1 Le asignamos el nombre a la rutina.
DECFSZ COUNT1,1; Decrementamos el valor del COUNT 1 hasta que sea 0.
GOTO LOOP1; Retorna al ciclo LOOP1.
DECFSZ COUNT2,1; Decrementamos el valor del COUNT 2 hasta que sea 0.
GOTO LOOP1 ; Retorna al ciclo LOOP1.
RETURN
END ; Finalizamos el programa.
*Cálculo rutina antirrebote:
Para la realización del retardo de 20ms para la rutina antirrebote fue necesario realizar los siguientes cálculos
para hallar los valores que se le iba a dar al contador con la siguiente formula:
Valor deseado= X1*X2*número de instrucciones
El valor deseado es 20ms el cual pasamos a segundos, dándonos un valor de 0.02s y en la rutina creada
anteriormente en nuestro código el número de instrucciones requeridas para hacer la rutina son 6, y como cada
una tiene un tiempo de 1us, entonces:
0.02s=X1*X2*6us
Como tenemos 2 incógnitas le damos un valor aleatorio a una de ellas menor a 256, que en nuestro caso
escogimos 255 y tenemos que:
9
UNIVERSIDAD DE LA COSTA
DEPARTAMENTO DE INGENIERIA
FACULTAD DE INGENIERÍA
0.02s=255*X2*6us
Despejamos el valor de X2 y tenemos que:
0.02 s
X 2=
255∗6 x 10−6 s
Realizando el cálculo tenemos que:
0.02 s
X 2= ≈13
255∗6 x 10−6 s
Luego de realizar los cálculos, se concluyó que los valores que se le deben dar a los contadores 1 y 2 para
conseguir un retardo de 20ms son de 255 y 13 respectivamente.
*Nota: Para realizar el cálculo es necesario saber cuanto es el tiempo que dura nuestro código en
realizar una instrucción, que en nuestro caso es 1us debido a que se usa un oscilador de 4MHz.
6. Seguidamente del paso anterior, se simuló el circuito pulsando e incrementando el valor del contador como se
puede ver en la figura 12.
Figura 12. Simulación en proteus de incremento de contador binario con antirrebote en el valor de 1.
7. Luego, se fueron incrementando de a uno el contador binario hasta a llegar a ciertos valores (93), (166) y (255)
como se puede ver en la figura 13, 14 y 15 respectivamente.
Figura 13. Simulación en proteus de incremento de contador binario con antirrebote en el valor de 93.
10
UNIVERSIDAD DE LA COSTA
DEPARTAMENTO DE INGENIERIA
FACULTAD DE INGENIERÍA
Figura 14. Simulación en proteus de incremento de contador binario con antirrebote en el valor de 166.
Figura 15. Simulación en proteus de incremento de contador binario con antirrebote en el valor de 255.
8. Una vez el culminado el paso 2, se modificó el circuito y el código con el fin de realizar un contador binario en
que su valor por defecto iba a ser ‘255’ como se puede ver en la figura 16, pero en esta ocasión el contador se
decrementaría de uno su valor.
Figura 16. Circuito diseñado en Proteus de contador con decremento y valor inicial de 255.
A su vez, el código se compiló y se analizó antes de ser cargado:
LIST P=16F84A; se indicó que microcontrolador se usaría.
INCLUDE <[Link]> ; Se incluyó la librería del PIC.
;----- Reset Vector process ---------
RES_VECT CODE 0x0000 ; Reinicia el vector del procesador
GOTO START ; Se dirige al programa de inicio
__CONFIG _FOSC_XT & _WDTE_OFF & _PWRTE_ON & _CP_OFF
MAIN_PROG CODE ; Permite enlazar para colocar el programa principal.
;----- Begining of the Program ---------
START
BCF STATUS, RP0 ; Selecciona el banco 0 con el bit de registro del banco de registro (RP0).
11
UNIVERSIDAD DE LA COSTA
DEPARTAMENTO DE INGENIERIA
FACULTAD DE INGENIERÍA
CLRF PORTB ; Borra todos los datos almacenados en los puertos PORTB.
BSF STATUS, RP0 ; Selecciona el banco 1 con el bit de registro del banco de registro (RP0) para el puerto de
configuración.
MOVLW 0x1F ; Mueve el valor hexadecimal 0x1F a W.
MOVWF TRISA; Mueve los datos W al registro TRISA.
MOVLW 0x00; Mueve el valor hexadecimal 0x00 a W.
MOVWF TRISB; Mueve los datos W al registro TRISB.
BCF STATUS, RP0 ; Selecciona el Banco 0 para la manipulación del puerto que sigue.
MAIN
MOVLW 0xFF ; Mueve el valor hexadecimal 0xFF a W.
MOVWF TRISB; Mueve los datos W al registro TRISB.
DEC Le asignamos el nombre a la rutina.
BTFSS PORTA,0 ; Saltamos una instrucción si el bit a evaluar está en 1, si no, ejecutamos la instrucción
siguiente.
GOTO DEC; Retorna al ciclo DEC.
BTFSC PORTA, 0 ; Saltamos una instrucción si el bit a evaluar está en 0, si no, ejecutamos la instrucción
siguiente.
GOTO $-1 ; Regresamos una posición
MOVLW 0x0-1 ; Mueve el valor hexadecimal 0x0-1 a W.
ADDWF PORTB, 1 ; Adicionamos el valor de W al valor almacenado en el puerto B.
GOTO DEC; Retorna al ciclo DEC.
END ; Finalizamos el programa
9. Seguidamente del paso anterior, se simuló el circuito pulsando y decrementando el valor del contador como se
puede ver en la figura 17.
Figura 17. Simulación en proteus de decremento de contador binario con el valor de 254.
10. Luego, se fueron incrementando de a uno el contador binario hasta a llegar a ciertos valores (210), (159) y
(100) como se puede ver en la figura 18, 19 y 20 respectivamente.
12
UNIVERSIDAD DE LA COSTA
DEPARTAMENTO DE INGENIERIA
FACULTAD DE INGENIERÍA
Figura 18. Simulación en proteus de decremento de contador binario con el valor de 210.
Figura 19. Simulación en proteus de decremento de contador binario con el valor de 159.
Figura 20. Simulación en proteus de decremento de contador binario con el valor de 100.
11. Una vez culminado el paso 3, se requería implementar un comparador digital de un bit con dos entradas
binarias y dos salidas digitales para la cual se diseñó el circuito que se puede ver en la figura 21.
Figura 21. Circuito diseñado en Proteus para simulación de comparador digital de un bit.
Para la ejecución de este comparador binario, las salidas iban a indicar que cuando ambas entradas eran
iguales encendían ambos led’s y cuando eran diferentes se podían identificar mediante los led’s que entrada
estaba en alto y cual en bajo.
Del mismo modo se realizó el respectivo código para cumplir con los requisitos nombrados anteriormente.
De tal forma, el código se compiló y se analizó antes de ser cargado:
LIST P=16F84A ;se indicó que microcontrolador se usaría.
INCLUDE <[Link]> ; Se incluyó la librería del PIC.
;----- Reset Vector process ---------
RES_VECT CODE 0x0000 ; Reinicia el vector del procesador
GOTO START ; Se dirige al programa de inicio
__CONFIG _FOSC_XT & _WDTE_OFF & _PWRTE_ON & _CP_OFF
;----- CBLOCK Directive ---------
13
UNIVERSIDAD DE LA COSTA
DEPARTAMENTO DE INGENIERIA
FACULTAD DE INGENIERÍA
; CBLOCK ; es una directiva de ensamblaje, asigna valores secuenciales a cada símbolo declarado en su interior.
CBLOCK 0x0C ; Selecciona el primer valor (registro) a asignar.
AUX
ENDC; Indica cuando el ensamblador debe detenerse.
MAIN_PROG CODE ; Permite enlazar para colocar el programa principal.
;----- Begining of the Program ---------
START
BCF STATUS, RP0 ; Selecciona el banco 0 con el bit de registro del banco de registro (RP0).
CLRF PORTB ; Borra todos los datos almacenados en los puertos PORTB.
BSF STATUS, RP0; Selecciona el banco 1 con el bit de registro del banco de registro (RP0) para el puerto de
configuración.
MOVLW 0x1F ; Mueve el valor hexadecimal 0x1F a W.
MOVWF TRISA ; Mueve los datos W al registro TRISA.
MOVLW 0xFC ; Mueve el valor hexadecimal 0xFC a W.
MOVWF TRISB ; Mueve los datos W al registro TRISB.
BCF STATUS, RP0 ; Selecciona el Banco 0 para la manipulación del puerto que sigue.
MAIN
BTFSC PORTA, 0 ; Saltamos una instrucción si el bit a evaluar está en 0, si no, ejecutamos la instrucción
siguiente.
GOTO TEST_RA1
BTFSC PORTA, 1 ; Saltamos una instrucción si el bit a evaluar está en 0, si no, ejecutamos la instrucción
siguiente.
GOTO TEST_RA0
BSF PORTB, 0; Encendemos el pin 0 del puerto B.
BSF PORTB, 1; Encendemos el pin 1 del puerto B.
GOTO MAIN ; Retorna al ciclo MAIN.
TEST_RA0 ; Le asignamos el nombre a la rutina.
BTFSS PORTA,0 ; Saltamos una instrucción si el bit a evaluar está en 1, si no, ejecutamos la instrucción
siguiente.
GOTO LED_A ; Retorna al ciclo LED_A.
BSF PORTB, 0; Encendemos el pin 0 del puerto B.
BSF PORTB, 1; Encendemos el pin 1 del puerto B.
GOTO MAIN ; Retorna al ciclo MAIN.
TEST_RA1 ; Le asignamos el nombre a la rutina.
BTFSS PORTA,1; Saltamos una instrucción si el bit a evaluar está en 1, si no, ejecutamos la instrucción
siguiente.
GOTO LED_B ; Retorna al ciclo LED_A.
BSF PORTB, 0
BSF PORTB, 1
GOTO MAIN ; Retorna al ciclo MAIN.
LED_A; Le asignamos el nombre a la rutina.
BSF PORTB, 1; Encendemos el pin 1 del puerto B.
BCF PORTB, 0 ; Apagamos el pin 0 del puerto B.
GOTO MAIN ; Retorna al ciclo MAIN.
LED_B; Le asignamos el nombre a la rutina.
BSF PORTB, 0; Encendemos el pin 0 del puerto B.
14
UNIVERSIDAD DE LA COSTA
DEPARTAMENTO DE INGENIERIA
FACULTAD DE INGENIERÍA
BCF PORTB, 1; Apagamos el pin 1 del puerto B.
GOTO MAIN; Retorna al ciclo MAIN.
END; Finalizamos el programa.
12. Una vez compilado y analizado el programa se simuló el código, una vez el código hexadecimal fue
exportado de MPLAB y cargado en PROTEUS para cada uno de los casos que son presentados a continuación:
-Cuando A=B con ambas entradas en 0 se puede ver en la figura 22.
- Cuando A>B con ambas entradas en 0 se puede ver en la figura 23.
- Cuando A<B con ambas entradas en 0 se puede ver en la figura 24.
- Cuando A=B con ambas entradas en 1 se puede ver en la figura 25.
Figura 22. Simulación en proteus de comparador digital de un bit en el caso en el que ambas entras son iguales y
0 lógicos.
Figura 23. Simulación en proteus de comparador digital de un bit en el caso en el que son diferentes las entradas
y A>B.
Figura 24. Simulación en proteus de comparador digital de un bit en el caso en el que son diferentes las entradas
y A<B.
15
UNIVERSIDAD DE LA COSTA
DEPARTAMENTO DE INGENIERIA
FACULTAD DE INGENIERÍA
Figura 25. Simulación en proteus de comparador digital de un bit en el caso en el que ambas entras son iguales y
1 lógicos.
5. Conclusiones
Al finalizar con el laboratorio, se logró el objetivo principal de la práctica, ya que, se familiarizó de buena
forma con las entradas y salidas digitales de los microcontroladores y de cómo podían programarse estas en el
lenguaje Assembly.
En esta experiencia se pudo implementar distintas instrucciones del lenguaje Assembly con el cual pudimos
diseñar y simular distintos circuitos en el que el PIC16F84A podía realizar distintas tareas.
Además, se logró completar de manera satisfactoria cada uno de los objetivos propuestos en la guía a pesar de
que, se nos presentó cierto grado de complejidad al iniciar la práctica debido a que no se tenía cierta claridad con
algunas de las instrucciones del PIC, las cuales con el transcurrir de la práctica y lectura del datasheet del
PIC16F84A se fueron aclarando y, asimismo, lograr los objetivos satisfactoriamente.
Por último, se diseñó de la manera correcta un comparador digital de un bit, teniendo en cuenta su tabla de
verdad y logrando así, una simulación muy satisfactoria de este mismo.
Referencias
[1] «Sherlin,» [En línea]. Available: [Link]
microcontroladores/que-es-un-microcontrolador. [Último acceso: 05 03 2020].
[2] «Wanadoo,» [En línea]. Available: [Link] [Último acceso: 05
03 2020].
[3] N.A, «Circuito Logico,» [En línea]. Available:
[Link] [Último acceso: 26 03 2020].
[4] N.A, «[Link],» [En línea]. Available:
[Link] [Último acceso: 2020 03
26].
16