Está en la página 1de 21

INSTITUTO TECNOLÓGICO DE TIJUANA

COMITÉ DE ING. ELECTRÓNICA Y BIOMÉDICA

INVESTIGACIÓN

PRÁCTICA 3

MATERIA:

Microcontroladores

EQUIPO:
-Guerrero Alberto Lizeth #20210789
-Hidalgo Escobar Sabina Monserrat #20210793
-Sotero Sanchez German #19212437
-Verduzco Acosta Kimberly Janeth #20210838

DOCENTE:
M.C Angel Humberto Corral Dominguez
14-10-2022
ÍNDICE

I. OBJETIVO 2

II. MARCO TEÓRICO 3


2.1 Programación en el PIC16F877A 6
Editar 6
Compilar 6
Quemar el PIC 6
Probar el programa 7

III. DESARROLLO 8
3. 1 Código en MPLAB 8

IV. RESULTADOS 11

V. CONCLUSIONES 17
Guerrero Alberto Lizeth 17
Hidalgo Escobar Sabina Monserrat 17
Sotero Sanchez German 18
Verduzco Acosta Kimberly Janeth 18

REFERENCIAS 20

1
I. OBJETIVO

Realizar un programa en lenguaje ensamblador para el microcontrolador


PIC16F877A, donde se activen los puertos de E/S de este mismo. Así mismo por medio
de un dip switch proponer valores binarios y al ser registrados, se haga una suma de 1 y
pueda mostrar en la salida el resultado de la entrada más el sumador.

2
II. MARCO TEÓRICO

El PIC16F877A es uno de los microcontroladores PIC más populares de la empresa


Microchip. Tiene un poco más de memoria y pines de entrada / salida que los
microcontroladores de gama básica (como el PIC16F84A). Posee un CPU del tipo RISC
(Conjunto Reducido de Instrucciones) que cuenta únicamente con 35 instrucciones
distintas, lo que lo hace muy fácil de programar tanto en lenguaje ensamblador como en
C y es por lo tanto ideal para la enseñanza.

Figura 2.1 PIC16F877A

CPU RISC de alto rendimiento


● Solo 35 instrucciones de una sola palabra para aprender
● Todas las instrucciones son de un solo ciclo (1 µs) excepto las bifurcaciones
del programa
● Velocidad de funcionamiento: DC - Entrada de reloj de 20 MHz
● Memoria de programa flash de 8 kBytes
● Memoria de datos RAM de 368 bytes
● Memoria de datos EEPROM de 256 bytes
● Programación en serie en circuito
● Capacidad de interrupción (hasta 10 fuentes)
Funciones periféricas
● Dos temporizadores/contadores de 8 bits (TMR0, TMR2) con preescalar
programable de 8 bits
● Un temporizador/contador de 16 bits (TMR1)
● Fuente/sumidero de alta corriente para accionamiento LED directo
● Temporizador de vigilancia (WDT) con oscilador RC separado
● Dos módulos de captura, comparación y PWM

3
● Puerto Serial Síncrono con SPI e I²C
● Convertidor analógico a digital de ocho canales y 10 bits
● Transmisor receptor universal síncrono asíncrono (USART)
Características especiales del microcontrolador
● Restablecimiento de encendido
● Temporizador de encendido (PWRT) y temporizador de arranque del
oscilador (OST)
● 1000 ciclos de borrado/escritura Memoria de programa flash mejorada
● 1.000.000 ciclos típicos de borrado/escritura Memoria de datos EEPROM
● Opciones de oscilador seleccionables

Figura 2.2 Diseño de pines.

Tecnología CMOS
● Tecnología CMOS FLASH de baja potencia y alta velocidad
● Diseño completamente estático

4
● Bajo consumo de energía
E/S y paquetes
● 33 pines de E/S con control de dirección individual
● DIP de 40 pines

Número de pin Descripción

1 MCLR/VPP - Entrada de borrado maestro


2 RA0/AN0 - Puerto A
3 RA1/AN1 - Puerto A
4 RA2/AN2/VREF-/CVREF - Puerto A
5 RA3/AN3/VREF+ - Puerto A
6 RA4/T0CKI/C1OUT - Puerto A
7 RA5/AN4/SS/C2OUT - Puerto A
8 RE0/RD/AN5 - Puerto E
9 RE1/WR/AN6 - Puerto E
10 RE2/CS/AN7 - Puerto E
11 Vdd - Fuente de alimentación positiva
12 Vss - Tierra
13 OSC1/CLKI - Entrada de oscilador
14 OSC2/CLKO - Salida del oscilador
15 RC0/T1OSO/T1CKI - Puerto C
16 RC1/T1OSI/CCP2 - Puerto C
17 RC2/CCP1 - Puerto C
18 RC3/SCK/SCL - Puerto C
19 RD0/PSP0 - Puerto D
20 RD1/PSP1 - Puerto D
21 RD2/PSP2 - Puerto D
22 RD3/PSP3 - Puerto D
23 RC4/SDI/SDA - Puerto C
24 RC5/SDO - Puerto C
25 RC6/TX/CK - Puerto C
26 RC7/RX/DT - Puerto C
27 RD4/PSP4 - Puerto D
28 RD5/PSP5 - Puerto D
29 RD6/PSP6 - Puerto D
30 RD7/PSP7 - Puerto D

5
31 Vss - Tierra
32 Vdd - Fuente de alimentación positiva
33 RB0/INT - Puerto B
34 RB1 - Puerto B
35 RB2 - Puerto B
36 RB3/PGM - Puerto B
37 RB4 - Puerto B
38 RB5 - Puerto B
39 RB6/PGC - Puerto B
40 RB7/PGD - Puerto B
Tabla 2.1 Descripción de pines.

2.1 Programación en el PIC16F877A

La programación de un PIC, se puede dividir en cuatro pasos:


1. Editar
Editar es escribir el programa, es hacer una lista de instrucciones en un lenguaje
que nos permite indicarle al PIC lo que deseamos que haga. Existen varios
lenguajes como: Ensamblador, Basic, C, etc. Todos ellos pretenden acercarse a
nuestra manera de pensar y de hablar. Sin embargo los PIC no conocen más que
unos y ceros. Por eso es necesario el siguiente paso.

2. Compilar
Compilar es traducir el programa al lenguaje de máquina que sí “entiende” el
PIC. Para realizar esta traducción hacemos uso de un software que transforma el
“Programa Fuente”, aquel que editamos en el paso 1 en otro que sí podemos
comunicarle al PIC.

3. Quemar el PIC
En este paso se graba el programa en el PIC. Mediante una tarjeta electrónica y
un poco de software se pasa el programa compilado de la PC al PIC. Son
solamente unos cuantos Clicks y listo. Es necesario hacer una aclaración en este
momento. Frecuentemente le llamamos Programador de PIC a la tarjeta
electrónica que transfiere el programa compilado de la PC al PIC. Está bien

6
mientras entendamos que este aparato no va a pensar por nosotros y que es
incapaz de programar instrucciones por sí mismo.

4. Probar el programa
Bueno en este paso se trata de verificar el funcionamiento del programa. Se trata
de comprobar que el PIC se comporta como lo programamos. Si todo salió bien,
ya no es necesario volver a editar el PIC, podemos hacer uso de un Protoboard,
alambrar los LED o botones, instalar la fuente, poner el reloj , etc. etc. Pero como
no se trata de aprender a armar circuitos en Proteus sino de aprender a
programar Pics es mejor hacer uso de una tarjeta “Proyecto” que ya tenga todo
esto y esté lista para ser usada.

Figura 2.1.1 Diagrama para programar un PIC.

7
III. DESARROLLO

El objetivo principal de está práctica es utilizar herramientas para ensamblar y


ejecutar el primer programa en lenguaje ensamblador para el microcontrolador
PIC16F877A para hacer uso de los E/S.

Para poder crear está práctica en físico, se necesitaron los siguientes materiales y
programas:

★ 2 protoboards.
★ 2 capacitores de 33 pF.
★ 2 resistencias de 330 Ω.
★ 16 resistencias de 220Ω.
★ 1 cristal de cuarzo 4Mhz.
★ 1 PIC16F877A.
★ 1 push button.
★ 8 LEDs.
★ Alambre calibre 22 AWG.
★ Programas: MPLAB y Master Prog.

3. 1 Código en MPLAB

La primera parte es compilar el siguiente código:

Figura 3.1 Configuración para el programa.

Aquí se configura las opciones con las que cuenta el PIC como se muestra en la
primera línea de código de la figura 3.1, para este programa solo utilizamos una variable
con nombre “V” en la dirección 0X00.

8
Figura 3.2 Sección principal del programa.

En la figura 3.2 podemos observar que el programa se divide en 2 etiquetas, la


etiqueta “Inicio” e “Incremento”, en la sección de Inicio se accede y modifica a los
diferentes bancos del PIC, se configuran los puertos de entrada y salida, en este caso
nuestros puertos de entrada son el puerto C, mientras la salida son el puerto B.

En la sección de Incremento vemos que lo que entra por el puerto C se carga en el


registro W para después cargar a nuestra variable V y hace un incremento en 1 a ese
valor para después este resultado cargarlo de nuevo a W y al final a nuestras salidas en
el puerto B, por último tenemos la instrucciones SLEEP y GOTO que se encargan de solo
mostrar el resultado cuando se presiona el botón y hacer el programa un ciclo
respectivamente.
Después de tener todo el código comprobamos que compila correctamente para
poder proceder a la prueba del programa.

9
Figura 3.3 Circuito simulado.

En el circuito de la figura 3.3 tenemos la simulación en la que comprobamos si


realmente funcionaba nuestro programa, cargamos el código al PIC de la simulación y
vimos que funcionaba correctamente el incremento, ya que al estar poniendo 0 en el
Dip-Switch el resultado de los led es 1. Como último al ver que todo estuviera bien,
quemamos el PIC para ya empezar con el armado del circuito en el protoboard y pasar a
el resultado final en este mismo.

10
IV. RESULTADOS

Utilizando de referencia la figura 3.3 se ensambló en protoboard dicho circuito, tal


como se observa en la figura 4.1. Este mismo está conformado por el PIC16F877A, 2
capacitores, 17 resistencias, 8 LEDs, 1 cristal de cuarzo y un sensor (switch). El diseño
de guía para hacer el circuito, fue implementado por nosotros.
Los valores menos significativos de la entrada del dip switch empiezan del lado
izquierdo(en donde está el valor de 1) y en la salida de los LEDs los menos significativos
empiezan en el primer led azul del lado derecho.

Figura 4.1 Circuito completo en el protoboard.

Ya teniendo el circuito listo, este mismo se conecta a la fuente de voltaje (con


voltaje suministrado de 5V y 0.01A), ya con fuente suministrada el circuito empieza a
funcionar correctamente y sin errores de conexión (no muestra cortocircuito en los
cables), esto se muestra en la figura 4.2.

11
Figura 4.2 Circuito conectado a la fuente de voltaje.

A continuación, se tomaron fotos del funcionamiento del circuito cuando está


conectado a la fuente y como llega hacer la salida de los LEDs cuando se va configurando
la entrada del dip switch. Al ser una entrada de 8 bits, tiende a tener 256 combinaciones,
por lo tanto se van a mostrar las más significativas.
En la figura 4.3 se puede observar como el primer LED de color azul se enciende
aun cuando la entrada marca valor de 0; esto ocurre porque en el banco de registro se
tiene el valor de 1 (el numero que se ira sumando a los valores agregados) y en este caso
se ingresa 0, por lo tanto 0+1=1, es por eso que se muestra el LED de la posición 1.

12
Figura 4.3 LED de la posición 1 encendido, con una entrada en valor de 0.

En la figura 4.4 se observa como el 2do LED se enciende cuando la entrada marca
valor de 1, en este caso se ingresa 1 en el dip switch y se hace la acción del sumador,
1+1=2, por lo tanto el LED de la 2da posición se enciende.

Figura 4.4 LED de la 2da posición encendido, con una entrada en valor de 1.

13
Por consiguiente, en la figura 4.5 se observa como el 4to LED de color rojo se
enciende cuando la entrada marca valor de 7, por lo tanto se hace la acción del sumador,
7+1=8, por lo tanto el LED de la posición 4to se enciende.

Figura 4.5 LED de la 4ta posición encendido, con una entrada en valor de 7.

Otro caso en donde se muestra el funcionamiento es en la figura 4.6, se ingresa en


la entrada del dip switch el valor de 252, por lo tanto se hace la acción del sumador,
252+1=253, por lo tanto todos los LEDs se encienden menos el 2do.

Figura 4.6 LEDs encendidos menos el de la posición 2, con una entrada en valor de 252.

14
Otro ejemplo se puede observar en la figura 4.7, se ingresa en la entrada del dip
switch el valor de 5, por lo tanto se hace la acción del sumador, 5+1=6, por lo tanto los
LEDs de la posición 2 y 3 se encienden.

Figura 4.7 LEDs de la posición 2 y 3 encendidos, con una entrada en valor de 5.

Por último, en la figura 4.8 se ingresa en la entrada del dip switch el valor de 4, por
lo tanto se hace la acción del sumador, 4+1=5, por lo tanto los LEDs de la posición 1 y 3
se encienden.

Figura 4.8 LEDs de la posición 2 y 3 encendidos, con una entrada en valor de 5.

15
Estos son algunos de ejemplos del funcionamiento del circuito, ya que este llega
hacer de una entrada de 8 bits tiende hacer muchas combinaciones, máximo 256 (la
última combinación contiene un carry, por lo que si toda el dip switch se marca con
puros 1, este no se llega a encender ningún leds). Para verificar que la práctica esté con
el funcionamiento correcto, se hicieron 15 pruebas en donde el docente estaba
supervisando el funcionamiento de cada número que se podría ingresar.

Para finalizar, se puede concluir que el funcionamiento del código(figura 4.9) en el


PIC es correcto ya que al ensamblar el circuito y conectarlo a una fuente de voltaje, está
llega a funcionar correctamente. Al ingresar en el dip switch cualquier número (1, 2, 5,
10, etc) este logra sumarle 1 a cualquier valor, por lo tanto si cumple con el objetivo de
la práctica, hacer un sumador consecutivo y manejar correctamente las E/S para que
funcionen correctamente.

Figura 4.9 Funcionamiento correcto del circuito.

16
V. CONCLUSIONES

★ Guerrero Alberto Lizeth


A través de la presente práctica fue posible conocer, entender y estudiar
acerca del lenguaje ensamblador para hacer posible la realización de la misma.

Lo que más puede comprender en esta práctica fue el uso de registros; donde
defino al registro como un espacio en la memoria de datos del microcontrolador
en el que podemos guardar información (propósito general) y donde existen
también unos registros en los cuales podemos configurar el microcontrolador o
saber del estado de este, así como de algunos de sus periféricos (específicos). A
través de una observación proporcionada por el docente comprendimos un poco
más acerca de los mismos y el porqué es importante conocer y diferenciar la
función de los RFS (registros de funciones especiales) y RGP (registros de
propósito general), donde la mala implementación de los mismos puede afectar
al PIC.

Se aprendió también a manejar los puertos de entrada y salida del PIC para
llevar a cabo la sumatoria en 1 cada que se active una palanca de nuestros dip
switch de 8 bits, mostrando de esta manera el resultado de la entrada más el
sumador. Las salidas y entradas pueden programarse de acuerdo a la manera en
que nosotros indiquemos, siempre y cuando se respeten los RFS y RGP.

★ Hidalgo Escobar Sabina Monserrat


Para la elaboración de esta práctica fue necesario usar el lenguaje
ensamblador (MPLAB) para la creación del circuito el cual permite generar un
registro de terminos (valores) primarios para que cuando sea necesario se
genere el aumento en 1, para ello también fue necesario aprender los diferentes
puertos del PIC a utilizar (PIC16F877A), puesto que estos con ayuda del código y
una simulación (Proteus), se pudo realizar de manera correcta el ensamble en
físico.

Donde la función de dicho código se basa en realizar la lectura de un valor


binario de 8 bits por uno de los puertos de E/S del PIC, esta parte es decidida por

17
el equipo, mientras que se debe ser proporcionado por dip switch en este caso de
8 entradas puesto que es el valor de bits a ingresar . El valor ingresado se
incrementará en 1, el dato resultante saldrá por otro puerto donde será mostrado
en 8 LEDs conectados a 8 resistencias cada uno y de la misma forma se conecta al
dip switch.

★ Sotero Sanchez German


El objetivo de está práctica es aprender a manejar los puertos de entrada y
salida en el PIC16F877A, en específico en esta práctica manejamos con un dip
switch los puertos de entradas y las salidas con varios led.

Aquí pude aprender el cómo se hace la conexión de un dip switch ya que


antes de esta práctica no sabia como era la conexión de este.

En la parte de la programación aprendí sobre el uso de variables como


valores o registros ya que en el momento de hacer la programación se usó la
variable como registro cuando tenía que usarse como valor.

Aunque el programa funcionaba igualmente no se recomendaba usar la


variable como registro ya que se utilizó una dirección particular y podría llegar a
causar problemas en el programa.

★ Verduzco Acosta Kimberly Janeth


El objetivo de está es aprender a manejar en PIC16F877A, sus puertos de
E/S y saber que programas, editores de código y programadores usar para
aplicar su funcionamiento en circuitos en protoboard.

Para poder hacer la práctica, lo primero que se realizó fue hacer el código en
el programa MPLAB que pueda hacer capaz de registrar valores binarios y por
cada valor, sumar 1. Ya ejecutado el programa y rectificando que no tiene errores,
este se manda a otro programa que es capaz de transformarlo en un tipo de

18
archivo que se pueda traspasar al programador y este mismo al PIC. Está parte
puede llegar a ser un poco compleja, ya que se tiene que ir mandando el código
entre programas y ya al final guardarlo. Ya teniendo el código guardado en el PIC,
se empieza a ensamblar el circuito en el protoboard (el circuito está compuesto
por el PIC16F877A, cristal de cuarzo, capacitores, resistencias, switch y LEDs)
recordando que el propósito del circuito es hacer un sumador conforme a los
valores ingresados, se puede confirmar que dependiendo del valor de dip switch
se va a ver reflejado en los led’s el valor de salida; en este caso si se ingresa el
valor de 1 en el dip switch se observa en la salida que prende el led en la posición
2, demostrando que en la salida es igual a 2.

19
REFERENCIAS

[1] Valdez.L.J. (2014). Cómo programar un PIC. México. UNIDAP Recuperado de


https://www.estudioelectronica.com/wp-content/uploads/2018/10/02_program
ar.pdf
[2] Microcontrolador pic16f877a. (s. f.). MV Electrónica. Recuperado 5 de octubre de
2022, de https://mvelectronica.com/producto/microcontrolador-pic16f877a
[3] Geek Factory. (2022, 21 septiembre). PIC16F877A Microcontrolador PIC 8 bits
Microchip. Recuperado 5 de octubre de 2022, de
https://www.geekfactory.mx/tienda/componentes/microcontroladores/pic16f87
7a-microcontrolador-pic-8-bits-microchip/
[4] PIC16F877A Datasheet. (s. f.). Recuperado 5 de octubre de 2022, de
https://www.futurlec.com/Microchip/PIC16F877A.shtml?fbclid=IwAR1uLXuqk0
TE2zkErDvHWG4fc1UytRaqM8l0nErFPLENrQpEIjdXi6_--xc

20

También podría gustarte