Académique Documents
Professionnel Documents
Culture Documents
Practica 1
Facultad Cs. De La Electrnica
Benemerita Universidad
Autonoma de Puebla
1
Septiembre 21, 2015
2
Introduccin
Objetivo de la prctica
Materiales
El oscilador interno
Organizacin de memoria
La Pila de direcciones
Directivas
Desarrollo
Anlisis de resultados
Conclusin
Bibliografia
Anexos
3
4
Introduccin
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
interior las tres principales unidades funcionales de una computadora: unidad central de
Objetivo de la prctica
Identificar las caractersticas de los microcontroladores (uC) PIC de la familia PIC18.
5
Materiales
PIC18F45
LEDS
Tablilla de experimentos
Cable
Fuente
especiales que solo trabajan cuando el microcontrolador opera en modo extendido (con
El oscilador interno
Los PIC18F4550 tienen un oscilador interno que genera dos seales diferentes, cualquiera
de las cuales puede utilizarse como reloj del microcontrolador. Este componente puede
disposicin de los pines y el nombre que toma cada uno.Las flechas indican si el pin es de
6
El microcontrolador PIC18F4550 posee cinco puertos de entrada y salida: A, B, C, D y E.
7
Figura 2. Diagrama de Bloques de Pic18F4550
Organizacin de memoria
8
Puede ser escrita/leda mediante un programa externo o durante la ejecucin
Memoria RAM de datos: memoria SRAM interna de 2048 Bytes en la que estn incluidos
alimentacion.
interrupcin o subrutina
Opciones de oscilador
Opciones de reset
Opciones de WatchDog
EEPROM de datos
3fffffh que contienen informacin del modelo y revisin del dispositivo.Son registros de
solo lectura.
9
La Pila de direcciones
posicin actual del final de pila. El contenido de final de pila es accesible mediante los
registros TOSU,TOSH,TOSL.
Cuando se procesa una interrupcin o se ejecutan las instrucciones las instrucciones CALL
microcontrolador.
Directivas
ensamblado del cdigo fuente, no debemos confundirlo con las instrucciones, ya que no
tienen equivalente en cdigo maquina, sino que solo sirven para controlar el ensamblado
al momento de realizarlo y, adems para facilitar la escritura del cdigo fuente. Es por eso
10
END
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
En este ejemplo, el valor 0x0C es asignado a la etiqueta contador. De esta forma, cada vez
11
util cuando deseamos especificarlo, como en el siguiente codigo:
partir de ah las dems que le sigan. Si no usamos la directiva ORG el ensamblador tomara
instrucciones. Podemos usar la directiva ORG todas las veces que sea necesario en nuestro
cdigo, para definir diferentes direcciones de origen para diferentes bloques del
Esta es una directiva muy importante, ya que permite incluir un archivo fuente completo en
12
Figura 3. Con #INCLUDE insertamos el contenido de un archivo en nuestro cdigo fuente
De esta forma, podemos insertar codigos y definiciones de constantes desde otros archivos
sin tener que escribirlos nuevamente, tambin podemos tener una coleccion de librerias,
Desarrollo
13
Figura 4. Diagrama de Flujo creado con DFD v.xxx
Ya que con l obtenemos el algoritmo que nos permitir crear el cdigo 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
Una vez abierto nuestro programa para empezar a trabajar iniciaremos el Project Wizard,
para ello vamos a la pestaa 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
6.
Figura 6
Posteriormente se nos da la opcin de crear un nuevo proyecto, primero que nada damos
clic en Browse para seleccionar la ruta donde queremos guardar nuestro proyecto y lo
15
archivo cdigo anterior, pero al no tener daremos siguiente y finalizaremos la
configuracin.
Ests configuracin solo se nos pedirn la primera vez que abrimos el programa, para
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
detectara como cdigo ensamblador para ello tenemos que guardarlo con la extensin
.asm, para eso vamos al men File Save As y se nos abrir un cuadro de dialogo
Figura 7
Al guardarlo, el editor de texto tomar colores, eso quiere decir que el programa ya detecta
que estamos haciendo cdigo ensamblador y nos detectara cada una de las instrucciones y
los mnemnicos.
describirlo:
16
Figura 8
Primero que nada todo lo que se encuentra en color verde, es decir despus de un punto y
coma son todos los comentarios que nosotros como programadores queramos agregar, en
nuestro caso ponemos como ttulo la plantilla para nuestro microcontrolador PIC18F4550,
prctica, la fecha y algunas notas que hagamos acerca del programa que estamos
realizando, despus utilizamos el siguiente comando List p=18F4550, el cual sirve para
<p18F4550.inc>, es una librera en la cual se encuentran todas las definiciones de todas las
FOSC = INTOSC_XT.- Esto es para usar el oscilador interno XT usado para la configuracin
USB, aunque para nuestro uso utilizaremos INTOSCIO_EC, ya que la primera funcin tiene
17
PWRT = ON.- Esta se activa para tener un retraso al prender el microcontrolador y que
LVP = OFF.-Este comando sirve para activar la programacin en bajo nivel de voltaje.
18
Figura 9
Primero comenzaremos definiendo nuestras variables op1 y op2 que es donde se
almacenar el valor de los 2 nmeros que sumaremos y que sern extrados del puerto B,
para declarar las variables seguido escribiremos la localidad de memoria donde queramos
Despus de esto declararemos la directiva org, la cual establece la direccin del origen del
el cual manejaremos para propsito de esta prctica y reporte como los valores que entran
por el puerto B; despus de esto mediante la instruccin bcf activaremos las resistencias
valor 0 en la direccin F, en este caso OSCCON con lo cual activamos el oscilador requerido.
setf TRISB, la directiva setf pasa todos los bits a 1 de la direccin que le indiquemos en este
caso con TRISB seleccionamos todo el puerto B y al pasarlo a 1s ser configurado como
entradas, lo opuesto ser para el puerto D que lo pondremos todo en 0s como salidas y
utilizaremos la directiva clrf la cual pasa todos los bits a ceros de cualquier direccin que le
daremos las instrucciones para efectuar la suma, primero que nada leeremos lo que tenga
PORTB, despus de esto mandaremos este valor que lemos 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 operacin
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
operacin and en el registro W quedara solo el valor del operando 2 que sera 0x02h
variable op2 utilizando la instruccin movwf op2. Ahora utilizamos la directiva swapf op1,
esta instruccin lo que har es intercambiar los nibbles (grupos de 4 bits) de la direccin
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 instruccin addwf op2 donde sumamos el
en el registro W, que sera 00001000b; por ltimo mandamos el valor obtenido al puerto D
para que podamos visualizarlo, esto se hace por medio de la instruccin movwf PORTD,
Todo nuestro proceso est contenido en un ciclo que est dado por la instruccin 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
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
cdigo para esto iremos a la pestaa Project Build All nos aparecer una pantalla
Figura 10
Esto nos generar un archivo .hex el cual contiene los valores binarios expresados en
Una vez generado nuestro archivo podemos comenzar la simulacin para esto iremos al
men Debugger Select Tool MPLAB SIM seguido de esto nos aparecern los
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
21
2. Stop: Sirve para detener la simulacin cuando esta corriendo.
3. Animate: La simulacin corre paso a paso por cada lnea, y aparecer una flecha verde
4. Step Into: Podremos ejecutar manualmente el programa un paso a la vez, cada vez que
5. Step Over: Funciona de manera similar a Step Into, pero tiene como diferencia de que al
encontrar una instruccin call no entrara en ella sino que la ejecutar como una sola
instruccin
6. Step Out: Sirve para cuando estamos en una subrutina y queremos salir de ella en un
paso
8. Breakpoints: Abre una ventana para poder observar una lista con los puntos de ruptura y
Para poder tener ms detalles sobre lo que est sucediendo al correr la simulacin
podemos observar a travs de otras ventanas los estados que toman los registros primero
Para abrir esta ventana iremos al men View Special Function Registers y nos
En el podremos visualizar los valores que van tomado cada uno de los registros durante la
22
Figura 12
Tambin 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
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 simulacin.
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 vaca, 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 botn Add SFR o Add Symbol respectivamente en
nuestro caso seleccionaremos el PORTB, PORTD y WREG (Figura 14), que sern los
Figura 14
Por ltimo para poder hacer una simulacin ms correcta podemos simular los datos en
los pines de entrada de los puertos debemos hacerlo mediante estmulos, para configurar
abrir una nueva ventana, seleccionaremos la pestaa 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 pestaa
de Fire los bits conmutan entre 0 y 1, hemos seleccionado estos 4 bits para seleccionar los
bits ms significativos de cada uno de los operandos y asi poder simular y ver de qu
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
reset.
utilizaron (19-23) conectados al led y este a su vez a una resistencia que va a VDD.
25
Figura 16 Montaje del Pic con conexiones, creado con el Programa fritzing
Anlisis de resultados
Para visualizar nuestro cdigo se hace uso del simulador proteus versin 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 sera 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 posicin 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 seal 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
26
De derecha a izquierda (de low-high) se toman los primeros bits del primer nibble, despus
del primer nibble, empieza el segundo nibble, es decir, que desde el switch 4 empieza el
segundo operando,por lo tanto tenemos dos nmeros 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.
donde aparece una carpeta se debe de introducir la direccin del .hex, como comentario
este aparece en conjunto con otros archivos despus de compilarlo en el MPLAB, es decir,
que debemos de buscar este archivo dentro de la carpeta que guardemos nuestro
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
28
Haciendo una prueba ms con RB=0110, RB=1000 el resultado es:
correcto.
partes.
Conclusin
29
El uso del cdigo ensamblador para la programacin de los microcontroladores result ser
una poderosa herramienta y que nos facilita mucho la codificacin de nuestros programas
ms 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
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 codificacin.
Asi mismo el uso del Software Proteus nos permite tener una ventana mas cercana a la
realidad , permitiendo hacer una simulacin con todos los componentes necesarios para la
conexin y para asi mismo tambien dar los impulsos y comprobar el completo
Bibliografia
https://es.wikipedia.org/wiki/Microcontrolador
pp.192
30
Anexos
31