Beruflich Dokumente
Kultur Dokumente
Presentado por:
Código: 1010015427.
Código: 80829122.
Código: 80057822.
Curso:
309696_6.
Presentado a:
Ingeniería Electrónica.
Microprocesadores y Microcontroladores.
02/11/2019.
i
Tabla de contenido.
ii
Introducción.
programación y uso de lenguaje de bajo nivel Assembler para la solución de problemas aplicados
a proyectos.
Esta actividad es realizada con el fin de comprender la arquitectura, registros y periféricos que
componen un Microprocesador por medio del lenguaje de programación de bajo nivel con el
Para el desarrollo de esta actividad se realizó un estudio previo del del software MPLAB que es
adicional se hizo la revisión del software de simulación y diseño de circuitos electrónicos Proteus
con este se realizara la solución al paso 3 planteado anexando todos los elementos electrónicos
necesarios para el funcionamiento. Por último, se hizo revisión de las características principales
de los elementos que componen el diseño de los circuitos como: fotorresistencia, motores,
displays, etc
iii
Resumen.
unidades funcionales, sistemas numéricos, para llegar a tomar como puntos de referencia algunos
dispositivos particulares categorizados en su arquitectura desde los 8 bits hasta los 64 bits.
Las temáticas a desarrollar en este paso son introducción a los microcontroladores, arquitectura de
o PIC16F877.
lenguaje de programación de bajo nivel para dar solución al problema del paso 3 planteado y
diseñando el circuito con estos elementos para realizar la simulación en el software de Proteus.
iv
Objetivos.
v
1. Marco Metodológico.
Proyecto:
Se plantea como proyecto desarrollar el diseño de un sistema de control de un laboratorio
biológico: en el cual se desea controlar la apertura y cierre de las puertas de laboratorio utilizando
motores DC, como también el control de la luminiscencia de las bacterias que se encuentran en el
laboratorio, por lo que el grupo de trabajo colaborativo diseña el sistema de control utilizando
1. Para el laboratorio se debe diseñar un reloj utilizando 3 displays de 7 segmentos (El grupo
escoge si es de ánodo o cátodo común), para presentar la hora desde 0:00 hasta 9:59 cada número
del reloj es un display de 7 segmentos, cada LED será la salida del Microcontrolador PIC16F84A.
Desarrollo de ejercicios:
Link Videos:
Ejercicio 1: https://youtu.be/n33IL3Wg1XM
6
PIC16F84A:
El PIC16F84A está fabricado en tecnología CMOS, posee memoria FLASH, y consumo bajo de
potencia. Está compuesto básicamente de una memoria ROM (1024 palabras de memoria de
programa), una memoria RAM (de acceso aleatorio, 68 bytes), líneas de entrada y salida (2
Puertos) y una lógica de control que coordina la interacción de los demás bloques.
Estos micros pertenecen a la gama media y dispones de un set de 35 instrucciones, tipo RISC
por 0, provoca un reset automático, utilizado para sistemas que no tienen control de un
de que se desborde.
• Memoria EEPROM de 64 bytes, para guardar datos que no se alteran a pesar de quitar la
alimentación.
• Interrupciones, cuando una señal externa, o una condición interna activa una línea de
interrupción, dejando de lado la tarea que está ejecutando, atiende dicha interrupción y
• Protección ante fallo de alimentación. Se trata de un circuito que resetea al micro cuando
7
• Estado de bajo consumo. Sleep. Si el micro debe esperar mucho tiempo sin hacer nada,
posee una instrucción especial, Sleep, que lo pasa al estado de reposo. Al activarse una
Watchdog, interrupción por RB0, interrupción por cambio de nivel en RB4 a RB7,
Este microcontrolador cuenta con dos puertos configurables como estradas y salidas, y consta de
18 pines los cuales se encuentran asignados de la siguiente manera: El PIC 16F84A contiene 13
El puerto A tiene solo cinco pines, el pin 3, ósea, RA4/TOCKI puede ser configurado a su vez
abierto, por lo tanto debemos poner una resistencia Pull-up a Vdd de 1 Kohm. Cuando se configura
como entrada, funciona como disparador Schmitt Trigger por lo que puede reconocer señales con
un poco de distorsión.
8
El puerto B tiene 8 pines que pueden ser configurados como entrada/salida. RB0 puede
programarse además como entrada de interrupción externa. Los pines RB4 a RB7 pueden
programarse para responder a interrupciones por cambio de estado y los pines RB6 y RB7 se
corresponden con líneas de entrada de reloj y entrada de datos cuando está en modo programación.
Vss y Vdd, son los pines de masa y alimentación. La tensión de alimentación está comprendida
respectivamente.
La máxima capacidad de corriente de cada uno de los pines de los puertos en modo sumidero es
de 25 mA y modo fuente de 20 mA. La máxima capacidad de corriente total de los puestos es,
9
LP, Cristal de baja frecuencia y bajo consumo de potencia.
Internamente la frecuencia del oscilador es dividida por 4, así que, si temeos un oscilador de 4
MHz, la frecuencia de trabajo es de 1 MHz, por lo que cada instrucción se ejecuta cada 1 us.
Reset: El PIC 16F84A posee un temporizador interno conectado al pin de reset, que funciona
microcontrolador quede en reset por un tiempo mientras se estabilizan todas las señales del
10
Ilustración 3. Reset PIC 16F84A.
Arquitectura del PIC, existen dos arquitecturas, la clásica de Von Neumann y la arquitectura
Harvard, esta última es la que usan los PIC’s. Dispone de dos memorias independientes, una que
contiene solo instrucciones y la otra solo contiene datos. Ambas disponen de sus respectivos buses
Aquí almacenamos nuestro programa o código que debe ejecutar, en el PIC16F84A es FLASH, es
rápida, de bajo consumo y alta capacidad de almacenamiento. Se divide en 2048 posiciones, pero
este PIC solo tiene implementadas 1024 posiciones, de 0x00 hasta 0x3FF.
Cuando ocurre un reset, el contador de programa (PC) apunta a la dirección 0x00, y el micro inicia
nuevamente. Aquí se debe escribir todo lo relacionado con la iniciación del mismo, por ejemplo,
Si ocurre una interrupción PC apunta a la dirección 0x04, y aquí debemos escribir el código
11
Memoria RAM estática.
Donde se encuentran los 24 registros específicos (SFR) y 68 registros de propósito general (GPR).
Algo que se debe tener en cuenta es la pila o Stack, que consta de 8 posiciones, cada posición
contiene la dirección y datos de la instrucción que se está ejecutando, así cuando se ejecuta una
llamada call o una interrupción, el PC sabe dónde regresar. (Limitar las llamadas anidadas).
Set de instrucciones:
12
Ilustración 5.Instrucciones PIC16F84A.
13
La multiplexación de un Display:
número y luego apagarlo, para encender el display que le sigue. El truco de encender y apagar el
display a una alta velocidad, permite engañar al ojo humano, y tener la sensación de que todos los
Cátodo Común:
Aquí vemos la conexión de displays de 7 segmentos de cátodo común con transistores NPN donde
poniendo LOW en los pines de control (la base del transistor) los transistores están al corte, y
ningún digito puede iluminarse. Si ponemos tensión en el pin de más a la derecha su transistor se
satura y permite la salida a Ground del primer digito que encenderá los segmentos que le indiquen
Simulación en Proteus:
14
15
Ilustración 8. Simulación Proteus Reloj PIC16F84. Fuente Propia.
16
Código.asm
; **** Universidad Nacional Abierta y a Distancia "UNAD" ****
; **** Escuela de Ciencias Básicas, Tecnología e Ingeniería****
; **** CEAD José Acevedo y Gómez ****
; **** Ingeniería Electrónica ****
; **** Microprocesadores y Microcontroladores ****
; **** Deivy Faviany Vanegas Vásquez****
; **** Edgar Leonardo Galvis****
; **** David Ricardo Ruiz****
; **** Roosber Fabian Medina****
list p=16F84A ; Especificamos con que microcontrolador estamos trabajando.
#include P16F84A.inc ; Librería, se encuentran las definiciones de las direcciones de los registros específicos, los bits utilizados en
cada registro y los fusibles del micro.
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
; Configuración de pines:
;_CP_OFF: Activando este fuse tendremos la garantía de que el código que escribamos en el PIC no pueda ser leído por otra persona,
para que no nos lo copien, modifiquen, etc.
;_WDT_OFF: "perro guardián" del PIC se configura aquí. Esta es una capacidad del microcontrolador de autorresetearse.
;_PWRTE_ON: Si activamos este fuse, lo que conseguimos es que se genere un retardo en la inicialización del microcontrolador.
;_XT_OSC: Este fuse controla el modo de oscilación que usará el PIC para funcionar.
17
;**** Definición de variables ****
Unidad equ 0x0C ; Guardamos conteo unidad,aquí le asignamos nombres a los registros indicando la posición en la
que se encuentran.
Decena equ 0x0D ; Guardamos conteo decena,aquí le asignamos nombres a los registros indicando la posición en la
que se encuentran.
Centena equ 0x0E ; Guardamos conteo centena,aquí le asignamos nombres a los registros indicando la posición en
la que se encuentran.
Contador1 equ 0x0F ; Registro utilizado en demora,aquí le asignamos nombres a los registros indicando la posición
en la que se encuentran.
Contador2 equ 0x10 ; Registro utilizado en demora,aquí le asignamos nombres a los registros indicando la posición
en la que se encuentran.
Contador equ 0x11 ; Control de Refresco de Display,aquí le asignamos nombres a los registros indicando la posición
en la que se encuentran.
MuestroU equ 2 ; Para control del 1º Display,aquí le asignamos nombres a los registros indicando la posición en
la que se encuentran.
MuestroD equ 1 ; Para control del 2º Display,aquí le asignamos nombres a los registros indicando la posición en
la que se encuentran.
MuestroC equ 0 ; Para control del 3º Display,aquí le asignamos nombres a los registros indicando la posición en
la que se encuentran.
18
;**** Tabla de conversión BCD a 7 Segmentos ****
; Se coloca al inicio para asegurar ubicación en página.
org 0x05 ; Origen del código de tabla.
BCD7SEG; retlw b'gfedcba' para display cátodo común.
addwf PCL,1 ; Se incrementa el contador del programa.
DT 0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0xFF, 0x6F
;**** Programa principal ****
;**** Configuración de puertos ****
Inicio
bsf STATUS,RP0 ; Pasamos de Banco 0 a Banco 1, poner 1 en el registro status pin RPO.
clrf TRISA ; PORTA como salida, borra los registros del puerto A.
clrf TRISB ; PORTB como salida, borra los registros del puerto B.
bcf STATUS,RP0; Paso del Banco 1 al Banco 0, para escribir el programa.
clrf PORTA ; Desactivo todos los Displays.
clrf Unidad ; Comienza en cero --> 0 0 0, contenido del registo en ceros.
clrf Decena ; Comienza en cero --> 0 0 0, contenido del registo en ceros.
clrf Centena ; Comienza en cero --> 0 0 0, contenido del registo en ceros.
goto Actualizo_Display; Esta rutina multiplexa los displays.
19
;**** Testeo de Pulsador ****
Bucle
incf Unidad,1; Incremento Unidad.
movlw d'10' ; Si es 10 reseteo e incremento Decena,carga un numero en el acumulador.
subwf Unidad,0 ; Resta a f el registro de w.
btfss STATUS,Z ; Salta la siguiente instruccion si bit es 1.
goto Actualizo_Display ; no es 10.
clrf Unidad ; Si, reseteo.
incf Decena,1 ; Incremento Decena.
movlw d'6' ; Si Decena = 6, reseteo e incremento Centena
subwf Decena,0 ;
btfss STATUS,Z ;
goto Actualizo_Display ; No es 10.
clrf Decena ; Si, reseteo.
incf Centena,1 ; Incremento Centena.
movlw d'10' ; Si es 10 Reseteo.
subwf Centena,0
btfss STATUS,Z
goto Actualizo_Display ; No es 10.
clrf Centena ; Si, reseteo.
20
;**** Se multiplexan los Display ****
Actualizo_Display
movlw d'10' ; Cargo Contador = 10
movwf Contador ; Para repeticiones de visualización del mismo valor,mueve una copia del acumulador W al registro f.
; durante 150 ms.
Refresco
movfw Unidad ; Obtengo código de 7 Segmentos para Unidad.
call BCD7SEG ;
bcf PORTA, MuestroC ; Apago Display de Centena, Se entiende al mirar rutina.
movwf PORTB ; Cargo unidad en PORTB.
Bsf PORTA, MuestroU ; Enciendo Display de Unidad.
call Demora_5ms
movfw Decena ; Obtengo código 7 Segmentos para Decena.
call BCD7SEG
bcf PORTA, MuestroU ; Apago Display de Unidad.
movwf PORTB ; Cargo PORTB con Decena.
bsf PORTA, MuestroD ; Enciendo Display de Decena.
call Demora_5ms
movfw Centena ; Obtengo código de 7 Segmentos para Centena.
21
call BCD7SEG
bcf PORTA, MuestroD ; Apago Display de Decena.
movwf PORTB ; Cargo PORTB con Centena.
bsf PORTA, MuestroC ; Enciendo Display Centena.
call Demora_5ms
decfsz Contador,1 ; Pregunto si ya se ha repetido 10 veces el ciclo?, Decrementa el registro f, Salta la siguiente
instrucción si el resultado es 0
goto Refresco ; No, repito.
goto Bucle ; Si, actualizo cuenta.
;**** Demora ****
Demora_5ms
movlw 0xFF ; Cargamos el valor de 5ms que controla la duración.
movwf Contador1 ; Iniciamos contador1.
Repeticion1
movlw 0x05 ;
movwf Contador2 ; Iniciamos contador2
Repeticion2
decfsz Contador2,1 ; Decrementa Contador2 y si es 0 sale,decrementa el registro f, Salta la siguiente
instrucción si el resultado es 0.
goto Repeticion2 ; Si no es 0 repetimos ciclo.
22
decfsz Contador1,1 ; Decrementa Contador1 y si es 0 sale,decrementa el registro f, Salta la siguiente
instrucción si el resultado es 0.
goto Repeticion1 ; Si no es cero repetimos ciclo.
return ; Regresa de la subrutina.
end
23
24
25
26
27
28
Conclusiones.
Esta actividad fue realizada con el fin de comprender la arquitectura, registros y periféricos que
componen un Microprocesador por medio del lenguaje de programación de bajo nivel con el
simulación y diseño de circuitos electrónicos Proteus con este se realizó la solución al paso 3
planteado anexando todos los elementos electrónicos necesarios para el funcionamiento. Por
último, se hizo revisión de las características principales de los elementos que componen el diseño
29
Recomendaciones.
Para el desarrollo del diseño del código es importante reforzar el lenguaje de programación
electrónico.
30
Bibliografía.
Hernández, E. (2009). Microprocesadores. Ed. El Cid Editor. (Pp. 5 -23) Recuperado de:
http://bibliotecavirtual.unad.edu.co:2460/lib/unadsp/reader.action?ppg=3&docID=3183363&tm=
1527288594447
Recuperado de:
http://bibliotecavirtual.unad.edu.co:2460/lib/unadsp/reader.action?ppg=1&docID=4499097&tm=
1527288958603
http://bibliotecavirtual.unad.edu.co:2460/lib/unadsp/reader.action?ppg=31&docID=3191906&tm
=1527289146227
Recuperado de:
http://bibliotecavirtual.unad.edu.co:2619/apps/pub/3BDI/GVRL?u=unad&sid=GVRL
http://bibliotecavirtual.unad.edu.co:2460/lib/unadsp/detail.action? docID=3194849
31
Eduardo, G. B. (2008). Compilador CCS y Simular Proteus para Microcontroladores Pic Cap. 1.
https://tecnologialsb.files.wordpress.com/2017/05/compilador-cccs-y-simulador-proteus-para-
microcontroladores-pic.pdf
Recuperado de:
http://bibliotecavirtual.unad.edu.co:2460/lib/unadsp/reader.action?ppg=4&docID=3175505&tm=
1527544841827
Noel Jair, Z. (2017). OVI Unidad 2 Microcontroladores. [Archivo de video]. Recuperado de:
http://hdl.handle.net/10596/11674
32