PIC18F4550

Desarrollo de sistemas basados en microcontroladores y DSPS Practica 1 Facultad Cs. De La Electrónica Benemerita Unive

Views 294 Downloads 2 File size 1MB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

Desarrollo de sistemas basados en microcontroladores y DSPS

Practica 1 Facultad Cs. De La Electrónica

Benemerita Universidad Autonoma de Puebla

M.C. Nicolas Quiroz Hernandez Alyne Sharaid Méndez Díaz Omar Alejandro Rosas Salas Julio Martínez Ramírez Alex Adan Couto Rodriguez Jeshua Alejandro Ramirez Moreno

1

Septiembre 21, 2015

2

Introducción Objetivo de la práctica Materiales Entendiendo la arquitectura del pic18f4550 El oscilador interno Organización de memoria La Pila de direcciones Arquitectura del microcontrolador PIC18f4550 Ambiente de desarrollo MPLAB Directivas Desarrollo Simulación en el entorno MPLAB SIM Conexión en tablilla de experimentos Análisis de resultados Conclusión Bibliografia Anexos

3

4

Introducción Un microcontrolador (abreviado μC, UC o MCU) es un circuito integrado programable, capaz de ejecutar las órdenes grabadas en su memoria. Está compuesto de varios bloques funcionales, los cuales cumplen una tarea específica. Un microcontrolador incluye en su interior las tres principales unidades funcionales de una computadora: unidad central de procesamiento, memoria y periféricos de entrada/salida. El PIC18F45 pertenece a la empresa Microchip, de la familia PIC18F de 8 bits. MPLAB es un IDE (Integrated Development Environment), es decir , un ambiente de Desarrollo, el cual permite, crear y diseñar aplicaciones en sistemas empotrados como el PICmicro y dsPIC microcontrollers.

Objetivo de la práctica ●

Identificar las características de los microcontroladores (uC) PIC de la familia PIC18.



Identificar los pines del PIC18F4550.



Analizar el funcionamiento de los puertos, oscilador y reset.



Conectar el circuito de reset (MClr) del PIC.



Identificar el software MPLAB, para un programa en lenguaje ensamblador.



Realizar un programa en lenguaje ensamblador para sumar dos datos de 4 bits (Puerto B) y mostrar el resultado en 5 leds conectados en puerto D.

5



Realizar el algoritmo del punto anterior.



Realizar la simulación del código en ensamblador.



Simular en el software Proteus el circuito completo.



Programar el microcontrolador (Pickit2, ICD2, Master-Pro, etc.).



Probar el programa para obtener los resultados.

Materiales ●

PIC18F45



LEDS



Tablilla de experimentos



Cable



Fuente

Entendiendo la arquitectura del pic18f4550 Poseen un repertorio de 75 instrucciones en modo estándar, más 8 instrucciones especiales que solo trabajan cuando el microcontrolador opera en modo extendido (con memoria de programa interna y externa). El procesador sigue siendo de filosofía RISC (set de instrucciones reducido), buses de arquitectura Harvard, construido en pastilla de tecnología CMOS, frecuencia de operación de hasta 40 MHz, hasta 32 KWord de memoria Flash de programa, conversores A/D integrados y manejo de interrupciones.

El oscilador interno Los PIC18F4550 tienen un oscilador interno que genera dos señales diferentes, cualquiera de las cuales puede utilizarse como reloj del microcontrolador. Este componente puede eliminar el oscilador externo de los pines OSC1 y/o OSC2. Comencemos a conocer la estructura de nuestro microcontrolador que no es más que un circuito integrado de 40 pines en la Figura 1 vemos un diagrama completo con la disposición de los pines y el nombre que toma cada uno.Las flechas indican si el pin es de salida, de entrada o de entrada/salida.

6

El microcontrolador PIC18F4550 posee cinco puertos de entrada y salida: A, B, C, D y E. Debido a que el bus de datos es de 8 bits.

Figura 1. Patillaje del PIC18f4550

7

Figura 2. Diagrama de Bloques de Pic18F4550 Organización de memoria Memoria de programa: Memoria flash interna de 32.768 bytes ●

8

Almacena instrucciones y constantes/datos



Puede ser escrita/leída mediante un programa externo o durante la ejecución programa mediante unos punteros

Memoria RAM de datos: memoria SRAM interna de 2048 Bytes en la que están incluidos los registros de función especial. ●

Almacena datos de forma temporal durante la ejecución del programa.



Puede ser escrita /leída en tiempo de ejecución mediante diversas instrucciones.

Memoria EEPROM de datos: memoria no volátil de 256 bytes ●

Almacena datos que se deben

conservar aun en ausencia de tension de

alimentacion. ●

Puede ser escrita/leída en tiempo de ejecución a través de registros.

Pila: bloque de 31 palabras de 21 bits ●

Almacena la dirección de la instrucción que debe ser ejecutada después de una interrupción o subrutina

Memoria de configuración: Memoria en la que se incluyen los bits de configuración (12 bytes de memoria flash ) los registros de identificacion (2 bytes de memoria de solo lectura). Aquí se hallan las opciones de configuración: ●

Opciones de oscilador



Opciones de reset



Opciones de WatchDog



Opciones de la circuiteria de depuración y programación



Opciones de protección contra escritura de memoria de programa y memoria EEPROM de datos

Registros de identificación:se tratan de dos registros situados en las direcciones 3ffffeh y 3fffffh que contienen información del modelo y revisión del dispositivo.Son registros de solo lectura.

9

La Pila de direcciones La pila es un bloque de memoria RAM independiente de 31 palabras de 21 bits que sirve para almacenar temporalmente el valor del PC cuando se produce una llamada o subrutina o una interrupción. El puntero de pila (contenido en el registro STKPTR) es un contador de 5 bits que indican la posición actual del final de pila. El contenido de final de pila es accesible mediante los registros TOSU,TOSH,TOSL. Cuando se procesa una interrupción o se ejecutan las instrucciones las instrucciones CALL o RECALL (el PC está apuntando a la siguiente instrucción) se incrementa el STKPR y se almacena en el final de pila el valor del PC.

Arquitectura del microcontrolador PIC18f4550 Con el datasheet del PIC18f4550 [1] nosotros decidiremos la configuración de nuestro microcontrolador.

Ambiente de desarrollo MPLAB Directivas Las directivas son palabras reservadas o comandos que controlan el proceso de ensamblado del código fuente, no debemos confundirlo con las instrucciones, ya que no tienen equivalente en código maquina, sino que solo sirven para controlar el ensamblado al momento de realizarlo y, además para facilitar la escritura del código fuente. Es por eso que la gran mayoría de las directivas son opcionales . El ensamblador MPASM tiene alrededor de 60 directivas. De las cuales se hablan a continuación algunas que son muy comunes en un programa ensamblador:

10

END Es la única directiva que es obligatoria. Esta le indica al ensamblador donde finaliza el codigo, para que se detenga al momento de ensamblar. EQU (define an assembler constant)

Sintaxis: [label] EQU exp

Esta directiva sirve para asignar etiquetas a constantes u otros elementos. Lo que pongamos en exp será asignado a la etiqueta.Por ejemplo, podemos usar esta directiva para asignar nombres a registros de la memoria de datos:

En este ejemplo, el valor 0x0C es asignado a la etiqueta contador. De esta forma, cada vez que escribamos contador en nuestro programa, el ensamblador lo sustituirá por el valor 0x0C, que es la dirección del primer registro de la memoria de datos. En la instrucción incf, el registro 0x0C será incrementando y el resultado se almacena en el. ORG(set program origin)

Syntax [label] ORG dir

La directiva ORG le indica al ensamblador el origen de las instrucciones siguientes en la direccion de memoria de programa definida por dir.Es decir, le señalara al ensamblador a partir de que direccion se pondran las siguientes instrucciones de nuestro codigo.Esto es

11

util

cuando

deseamos

especificarlo,

como

en

el

siguiente

codigo:

La línea con la instrucción bsf se pondrá en la dirección de memoria de programa 05h, y a partir de ahí las demás que le sigan. Si no usamos la directiva ORG el ensamblador tomara la primera direccion de la memoria de programa (00h), y a partir de ahí pondrá las instrucciones. Podemos usar la directiva ORG todas las veces que sea necesario en nuestro código, para definir diferentes direcciones de origen para diferentes bloques del programa.Si le colocamos una etiqueta se le asignara el valor de dir especificado:

Le asignara el valor de 10h a la etiqueta dir_1, además de especificar el origen #INCLUDE (include additional source file)

Sintax:

#INCLUDE

[file]

o

#INCLUDE

[“file”] o #INCLUDE [] Esta es una directiva muy importante, ya que permite incluir un archivo fuente completo en el lugar donde lo coloquemos, es decir, al especificar un archivo, su contenido será colocado en ese lugar, tal como si lo hubiéramos escrito ahí.

12

Figura 3. Con #INCLUDE insertamos el contenido de un archivo en nuestro código fuente De esta forma, podemos insertar codigos y definiciones de constantes desde otros archivos sin tener que escribirlos nuevamente, también podemos tener una coleccion de librerias, con subrutinas que utilizamos constantemente. Ejemplo de esto es:

Si

especificamos

la

ruta

completa

del

archivo

(Por

ejemplo,

), el ensamblador solo lo buscara en esa ruta, Si no especificamos ninguna ruta para el archivo (Colocamos únicamente su nombre)

Desarrollo A partir del planteamiento de la práctica comienza a definir lo que se va a realizar a través de un diagrama de flujo (Figura 3),

13

Figura 4. Diagrama de Flujo creado con DFD v.xxx Ya que con él obtenemos el algoritmo que nos permitirá crear el código en cualquier lenguaje. Para iniciar a codificar en ensamblador utilizaremos una plataforma llamada MPLAB IDE v.8.90, que es un software que cuenta con todas las herramientas necesarias para desarrollar los programas para nuestro microcontrolador. Una vez abierto nuestro programa para empezar a trabajar iniciaremos el Project Wizard, para ello vamos a la pestaña Project → Project Wizard, el cual nos ayudara a configurar nuestro entorno de trabajo. Nos aparecerá una pantalla como la siguiente (Figura 5):

14

Figura 5 Primero comenzaremos por seleccionar nuestro dispositivo en nuestro caso el PIC18F4550, posteriormente seleccionaremos una suite de lenguaje en el cual vamos a programar, seleccionamos Microchip MPASM Toolsuite, el cual contendrá las herramientas necesarias para la compilación, el ensamblador y las librerías como se muestra en la Figura 6.

Figura 6 Posteriormente se nos da la opción de crear un nuevo proyecto, primero que nada damos clic en Browse para seleccionar la ruta donde queremos guardar nuestro proyecto y lo nombramos Practica_1, y presionamos siguiente, se nos dará la opción de agregar un

15

archivo código anterior, pero al no tener daremos siguiente y finalizaremos la configuración. Estás configuración solo se nos pedirán la primera vez que abrimos el programa, para posteriores proyectos, la configuración que asignamos en este momento será la predeterminada. Para comenzar a escribir nuestro programa debemos crear un nuevo archivo fuente, dando click en el menú de File → New, y se nos abrirá un editor de texto en el cual copiaremos nuestra plantilla predeterminada del PIC18F4550, pero aún no se nos detectara como código ensamblador para ello tenemos que guardarlo con la extensión .asm, para eso vamos al menú File → Save As…

y se nos abrirá un cuadro de dialogo

para elegir la carpeta donde lo guardamos, y seleccionamos la carpeta donde guardamos nuestro proyecto, ponemos el nombre de nuestro archivo y al final ponemos la extensión .asm, para que quede así Practica_1.asm (Figura 7)

Figura 7 Al guardarlo, el editor de texto tomará colores, eso quiere decir que el programa ya detecta que estamos haciendo código ensamblador y nos detectara cada una de las instrucciones y los mnemónicos. Nuestro código base se vería como se muestra en la Figura 8, y comenzaremos a describirlo:

16

Figura 8 Primero que nada todo lo que se encuentra en color verde, es decir después de un punto y coma son todos los comentarios que nosotros como programadores queramos agregar, en nuestro caso ponemos como título la plantilla para nuestro microcontrolador PIC18F4550, nuestra materia en curso Microcontroladores y DSPs, el nombre y número de nuestra práctica, la fecha y algunas notas que hagamos acerca del programa que estamos realizando, después utilizamos el siguiente comando List

p=18F4550, el cual sirve para

seleccionar el microcontrolador que usaremos, también añadiremos la directriz include , es una librería en la cual se encuentran todas las definiciones de todas las etiquetas de los registros del PIC18F4550. Ahora comenzaremos a describir las Palabras de Configuración, todas estas instrucciones comienzan con la palabra CONFIG seguidos de la instrucción a definir: · FOSC = INTOSC_XT.- Esto es para usar el oscilador interno XT usado para la configuración USB, aunque para nuestro uso utilizaremos INTOSCIO_EC, ya que la primera función tiene problemas con el software PROTEUS en donde realizaremos nuestra simulación

17

·

PWRT = ON.- Esta se activa para tener un retraso al prender el microcontrolador y que no se activen las funciones inmediatamente.

·

BOR = OFF.- Sirve para habilitar o deshabilitar el reset en hardware y software.

·

WDT = OFF.- Activa o desactiva el watchdog timer.

·

MCLRE = ON.- Activa o desactiva el pin del master clean reset.

·

PBADEN = OFF.- Configura el puerto B como pines digitales de entrada salida.

·

LVP = OFF.-Este comando sirve para activar la programación en bajo nivel de voltaje.

·

DEBUG = OFF.-Activa o desactiva la depuración en segundo plano

·

XINST = OFF.- Activa o desactiva el set de instrucciones extendido. Ahora comenzaremos a codificar el cuerpo de nuestro programa, para ello primero describiremos qué es lo que hará nuestro programa. Será un sumador de 2 números de 4 bits que entraran por el puerto B y mostrara el numero por medio de LEDs a través del puerto D. El código de todo nuestro programa quedaría de la siguiente manera (Figura 9)

18

Figura 9 Primero comenzaremos definiendo nuestras variables op1 y op2 que es donde se almacenará el valor de los 2 números que sumaremos y que serán extraídos del puerto B, para ello primero escribimos el nombre de la variable seguido de equ qué es la directiva para declarar las variables seguido escribiremos la localidad de memoria donde queramos almacenar dicha variable en el caso de op1 será en 0x00h y op2 en 0x01h. Después de esto declararemos la directiva org, la cual establece la dirección del origen del código en la memoria de programa. Después cargaremos al registro W con el valor 0x62h, el cual manejaremos para propósito de esta práctica y reporte como los valores que entran por el puerto B; después de esto mediante la instrucción bcf activaremos las resistencias de pull-up internas del microcontrolador. Activaremos también el oscilador de 4 MHz para nuestro microcontrolador, para ello utilizaremos la instrucción movwf OSCCON, 0, esta instrucción lo que hace es poner el valor 0 en la dirección F, en este caso OSCCON con lo cual activamos el oscilador requerido. Pasaremos ahora a configurar los puertos B y D Utilizamos para el puerto B la instrucción setf TRISB, la directiva setf pasa todos los bits a 1 de la dirección que le indiquemos en este caso con TRISB seleccionamos todo el puerto B y al pasarlo a 1´s será configurado como entradas, lo opuesto será para el puerto D que lo pondremos todo en 0´s como salidas y utilizaremos la directiva clrf la cual pasa todos los bits a ceros de cualquier dirección que le demos, en este caso TRISD. Ahora que ya hemos configurado nuestras entradas y parámetros de funcionamiento daremos las instrucciones para efectuar la suma, primero que nada leeremos lo que tenga el puerto B y lo mandaremos a nuestro registro W para ello utilizamos la directiva movf PORTB, después de esto mandaremos este valor que leímos en el puerto B a la variable op1 para hacer un respaldo del valor, para ello utilizamos movwf op1, puesto que la directriz movwf copia el valor de W a F en este caso op1. Ahora haremos una operación 19

and al registro W para dejar en W solo el valor del operando 2, en W tenemos el valor de entrada en B como dijimos tenemos el valor 0x62h, que en binario seria 01100010, y para dejar solo el operando 2 utilizaremos el valor 0x0Fh (binario 00001111), al aplicar esta operación and en el registro W quedaría solo el valor del operando 2 que sería 0x02h (binario 00000010), en código ensamblador utilizaremos la directiva andlw 0x0F para realizar lo descrito anteriormente, ahora bien moveremos lo que ahora tenemos en W a la variable op2 utilizando la instrucción movwf op2. Ahora utilizamos la directiva swapf op1, esta instrucción lo que hará es intercambiar los nibbles (grupos de 4 bits) de la dirección que marquemos, en nuestro caso op1 y lo almacenaremos en W, para nuestro ejemplo en op1 tenemos el siguiente valor en binario 01100010 y al aplicar el swap quedaría en el registro W de la siguiente manera 00100110b y volvemos a aplicar la operación andlw de la misma manera que lo hicimos con el operando 2, ahora bien tenemos en el registro W el valor del operando 1 que seria 00000110b y en op2 tenemos 00000010 por lo que solo nos falta efectuar la suma para eso utilizamos la instrucción addwf op2 donde sumamos el operando 1 que está almacenado en W a la variable op2 y el resultado queda almacenado en el registro W, que sería 00001000b; por último mandamos el valor obtenido al puerto D para que podamos visualizarlo, esto se hace por medio de la instrucción movwf PORTD, cuyo funcionamiento ya describimos anteriormente. Todo nuestro proceso está contenido en un ciclo que está dado por la instrucción de inicio, antes de leer el puerto B y termina justo cuando mandamos el valor al puerto D, y lo volvemos ciclo al incluir la directiva bra inicio, lo que hace que se mantenga un ciclo concurrente es decir que pueda estar sumando en cualquier momento Finalmente se da la instrucción end que es ahí donde nuestro programa concluye.

Simulación en el entorno MPLAB SIM Ahora que ya tenemos nuestro código hecho podemos comenzar a simularlo para comprobar que realmente funciona y hace lo que nosotros requerimos, para esto el propio

20

MPLAB contiene un simulador MPLAB SIM, para esto primero debemos ensamblar nuestro código para esto iremos a la pestaña Project → Build All nos aparecerá una pantalla nueva donde veremos el proceso de compilación, y en caso de no haber errores nos mostrará la leyenda BUILD SUCCEEDED (Figura 10)

Figura 10 Esto nos generará un archivo .hex el cual contiene los valores binarios expresados en forma hexadecimal que corresponden a las instrucciones de nuestro programa. Una vez generado nuestro archivo podemos comenzar la simulación para esto iremos al menú Debugger → Select Tool → MPLAB SIM seguido de esto nos aparecerán los botones de simulación (Figura 11)

Figura 11 Comenzaremos describiendo los botones de izquierda a derecha 1.

Run: Sirve para ejecutar el programa de forma continua. El programa correrá de forma libre hasta que lo detengamos

21

2. 3.

Stop: Sirve para detener la simulación cuando esta corriendo. Animate: La simulación corre paso a paso por cada línea, y aparecerá una flecha verde junto a la línea de código fuente que se está ejecutando.

4.

Step Into: Podremos ejecutar manualmente el programa un paso a la vez, cada vez que se presiona se ejecutará una línea del programa.

5.

Step Over: Funciona de manera similar a Step Into, pero tiene como diferencia de que al encontrar una instrucción call no entrara en ella sino que la ejecutará como una sola instrucción

6.

Step Out: Sirve para cuando estamos en una subrutina y queremos salir de ella en un paso

7.

Reset: Es equivalente a dar un reset al microcontrolador, al dar click iniciaremos de nuevo el programa desde el principio.

8.

Breakpoints: Abre una ventana para poder observar una lista con los puntos de ruptura y desde ahí podremos manipularlos (crearlos, eliminarlos, activarlos o desactivar los). Para poder tener más detalles sobre lo que está sucediendo al correr la simulación podemos observar a través de otras ventanas los estados que toman los registros primero utilizaremos el SFR (Registros de función especial por sus siglas en inglés) Para abrir esta ventana iremos al menú View → Special Function Registers

y nos

aparecerá una pantalla como la siguiente (Figura 12) En el podremos visualizar los valores que van tomado cada uno de los registros durante la simulación y apreciar si toman los valores que esperamos.

22

Figura 12 También podemos observar los registros de la memoria de datos, para ello vamos al menú View →> File Registers donde aparecerá una ventana (Figura 13) con un mapa de todos los registros de la memoria de datos. Si presionamos la pestaña Symbolic debajo de esta ventana se mostrará una lista de registros con su nombre y su valor contenido, esto es útil para ver los valores que tienen los registros de la memoria de datos durante la simulación.

Figura 13 23

Otra herramienta que utilizaremos será la de Watch, está la abrimos nuevamente el menú View → Watch, nos aparecerá una ventana al principio vacía, pero esta nos será útil para observar únicamente los registros o bits individuales que necesitemos, es decir podemos personalizar en ella los registros o bits de la memoria de datos que queremos vigilar. Esto lo hacemos al elegir por medio del botón Add SFR o Add Symbol respectivamente en nuestro caso seleccionaremos el PORTB, PORTD y

WREG (Figura 14),

que serán los

valores que utilizaremos en esta práctica.

Figura 14 Por último para poder hacer una simulación más correcta podemos simular los datos en los pines de entrada de los puertos debemos hacerlo mediante estímulos, para configurar los estímulos necesarios iremos al menú Debugger → Stimulus à New Workbook y se abrirá una nueva ventana, seleccionaremos la pestaña Asynch y veremos una serie de celdas. Haremos click en la primera celda de la columna llamada Pin / SFR, podemos elegir un pin de entrada en nuestro caso utilizaremos los Pines RB0, RB1, RB4 y RB5 y en la casilla Action seleccionaremos Toggle (Figura 15) para que cada que demos en la pestaña de Fire los bits conmutan entre 0 y 1, hemos seleccionado estos 4 bits para seleccionar los bits más significativos de cada uno de los operandos y asi poder simular y ver de qué manera suma nuestro programa

24

Figura 15 Con cada una de estas herramientas podremos ver el correcto funcionamiento de nuestro programa dando entradas, comprobando los datos que se encuentran en cada uno de los registros, viendo las salidas e ir verificando paso a paso nuestro programa y así podremos hacer una simulación más completa y desarrollada.

Conexión en tablilla de experimentos Las conexiones con respecto al PIC18F4550 se realizaron de la siguiente manera: ●

Alimentación: el PIC es alimentado en ambos lados. Los pines 11,32 están conectadas a VDD y los pines 12,31 a VSS.

El pin 1 se conecta a VDD constante ya que si se le da un voltaje menor a 3 V se ejecuta un reset. ●

Entradas (DIP SWITCH): Las entradas utilizadas corresponden al puerto B (33-40) que corresponden a los 2 números de 4 bits que se sumarán cada uno le corresponde 4 pines RB0-RB3 (33-36) y RB4-RB7 (37-40). El DIP SWITCH también se alimenta a VSS y VDD.



Salidas (Leds): Las salidas corresponden al puerto D (19-22, 27-30, y 23,24 ), se utilizaron (19-23) conectados al led y este a su vez a una resistencia que va a VDD.

En la figura 16 se puede ver la conexión:

25

Figura 16 Montaje del Pic con conexiones, creado con el Programa fritzing

Análisis de resultados Para visualizar nuestro código se hace uso del simulador proteus versión 8 el cual nos permite usar un modelo virtual PIC18F4550, gracias a que MPLAB crea un archivo de copilacion .hex nosotros cargamos este archivo al PIC el cual sería su equivalente a quemarlo.Teniendo el diagrama de la figura 17. se nota que el dip switch tiene un arreglo de 8 switches que dependiendo de la posición nos dará un cero (0v si es logica no inversa) o un uno logico ( 5v si es logica no inversa) las resistencias que se hallan entre la señal de +5v y el dipswitch son delimitadoras de corriente y las que permiten con el dip switch el cambio de nivel, estas pueden ser opcionales ya que se le puede configurar al Pic que “construya” las resistencias en su interior.

26

De derecha a izquierda (de low-high) se toman los primeros bits del primer nibble, después del primer nibble, empieza el segundo nibble, es decir, que desde el switch 4 empieza el segundo operando,por lo tanto tenemos dos números con una longitud de 4 bits. La salida de acuerdo al programa tenemos del mismo orden de derecha a izquierda van de low-high, de ser asi se espera que se encienda un led con el resultado de la suma de los dos nibbles.

Figura 17 Diagrama de conexión del PIC para el desarrollo de la practica Dando doble clic en el Pic aparecerá una ventana emergente Figura 18 la cual en el cuadro donde aparece una carpeta se debe de introducir la dirección del .hex, como comentario este aparece en conjunto con otros archivos después de compilarlo en el MPLAB, es decir, que debemos de buscar este archivo dentro de la carpeta que guardemos nuestro proyecto MPLAB o en archivos temporales para el caso de Windows.

27

Figura 18. Carga del .hex en Proteus 8 Ya cargandolo nos disponemos a probar se introduce en el nibble RB=0001 y en el nibble RB’= 0001 por qué se espera en salida un valor de RD=00010.En la figura 19 se demuestra que esto se cumple

Figura 19 Simulación del programa 28

Haciendo una prueba más con RB=0110, RB’=1000 el resultado es:

Figura 20. Simulacion n.2 Con el simulador Figura 20. se observa que el resultado de RD=01110 lo cual es igual de correcto. La práctica en la tablilla de experimentos es la siguiente:

Figura 20 Conexion del PIC No se encuentran las conexiones del PIC18F4550 ya que los “jumpers” no permiten ver las partes.

Conclusión

29

El uso del código ensamblador para la programación de los microcontroladores resultó ser una poderosa herramienta y que nos facilita mucho la codificación de nuestros programas , juntamente con el entorno MPLAB hace de la programación de microcontroladores algo más sencillo de lo que parece, ciertamente se debe estudiar muy bien las instrucciones, pero una vez hecho eso podemos realizar cualquier cosa, asi mismo las herramientas que tenemos a nuestro alcance para simular y comprobar el funcionamiento del programa evita que cometamos errores y que veamos de manera minuciosa las localidades de memoria, los registros y nos permite tener un control completo de nuestra codificación. Asi mismo el uso del Software Proteus nos permite tener una ventana mas cercana a la realidad , permitiendo hacer una simulación con todos los componentes necesarios para la conexión y para asi mismo tambien dar los impulsos y comprobar el completo funcionamiento de nuestro programa.

Bibliografia (2015) Wikipedia. Accessed september 2015 [online]. Available: https://es.wikipedia.org/wiki/Microcontrolador Rossano V.,”Electrónica y microcontroladores PIC Guia practica de programación”, 1a edición-Banfield-Lomas de Zamora: Gradi,2009 pp.368 Anonimo, “Microcontroladores”,Coleccion Users Electronica, 1a edicion,Buenos Aires, 2011. pp.192

30

Anexos PDF Datasheet PIC18F4550

31