Tablas de datos en ensamblador de microcontroladores PIC

Slides:



Advertisements
Presentaciones similares
Arquitectura RISC & CISC y DSP
Advertisements

El modelo de Von Neumann
DISEÑO DE TRANSFERENCIA ENTRE REGISTROS
A REA DE TECNOLOGIA ELECTRONICA U NIVERSIDAD DE O VIEDO LECCION 5 – ARQUITECTURA INTERNA DE LOS PIC - 1F.F. LINERA ARQUITECTURA BASICA. CARACTERISTICA.
Administración de procesos Lic. Orlando Zamora Rdz.
ARQUITECTURA DE COMPUTADORES - VON NEUMANN MODEL
Prototipo de compilador didáctico del lenguaje LC99
Administración de procesos y del procesador.
Sistemas Operativos Funcionamiento general de una computadora bajo el control de un programa.
UNIDAD 2. ADMINISTRACION DE PROCESOS Y DEL PROCESADOR
Modelo de procesos de dos estados
Pipelines: Riesgos.
ARQUITECTURA INTEL FORMATOS DE INSTRUCCIÓN
Practico PIC Programa Sumador.
Teoría de lenguajes y compiladores
EL Sistemas Digitales Ing. José Alberto Díaz García Escuela de Ingeniería Electrónica Arquitectura Segmentada Pipeline (Segmentación)
Administración de procesos y del procesador.
CLASIFICACION DE LAS MAQUINAS DE TURING
Circuitos Combinacionales Comunes
Composición Interna de un Procesador
Funciones en lenguaje C
TÉCNICO EN PROGRAMACIÓN DE SOFTWARE Instructor: Ingeniero Adrián Guerrero Taborda
Microcontroladores PIC
Programación de código reubicable
HILOS Y COMUNICACIÓN ENTRE PROCESOS
TRADUCTOR DE UN PROGRAMA
Práctica 7 AOC. Gestión de la pila Una pila es una estructura de datos caracterizada por que el último dato que se almacena es el primero que se obtiene.
Microcontroladores PIC16F84A.
Semana 5 Subprogramas..
Sistemas Operativos Procesos.
Funciones y Procedimientos(Pseudocódigo)
MICRO de 8 bits Funcionamiento interno de un microprocesador de 8 bits. Para comprender mejor el funcionamiento, interno de un microprocesador , se propone.
Modelo de Von Neumann Ana Lilia Laureano-Cruces Departamento de Sistemas Universidad Autónoma Metropolitana.
COMPUTACIÓN I TEMA 6. Pasaje de parámetros por Referencia. Uso de apuntadores Prof. Mireya Morales.
Tema 10.3: Asignación de Espacio No Contiguo. Tema 10.3: 2 Silberschatz, Galvin and Gagne ©2005 Fundamentos de los Computadores (ITT, Sist. Electr.),
Asignación de Espacio No Contiguo
Soporte HW para Administración de Memoria Cecilia Hernández
MICROCONTROLADORES NOCIONES BÁSICAS. ¿QUÉ ES UN MICROCONTROLADOR? MICROCONTROLADOR = MICROPROCESADOR + MEMORIA + PERIFERICOS.
Funcionamiento de la CPU
M.C. Juan Carlos Olivares Rojas
Arquitectura de Von Neumann
1 Descripción y control de procesos Capítulo 3. 2 Requerimientos de un SO relacionados con procesos Ejecutar concurrentemente múltiples procesos para.
Administrador de procesos
Campus Chapultepec Arquitectura de Computadoras Diferencia entre microprocesador y microcontrolador Sánchez Manjarrez Silvana Ing. Daniel Domínguez C.
Detección de una tecla pulsada.
Teoría de Sistemas Operativos Departamento de Electrónica 2º Semestre, 2002 Gabriel Astudillo Muñoz
Microprocesadores II PIC16C5X Ing. Nelwi Báez.
Metodología de la programación
ARQUITECTURA Y ESTRUCTURA DEL COMPUTADOR ING. CRISBIANETH KAROL GARCÍA ESCOBEDO COMPUTO II – UASF ING. CRISBIANETH KAROL GARCÍA ESCOBEDO.
ARQUITECTURA DE COMPUTADORES Semestre A-2009 Clase 10.
MICROCONTROLADORES PIC’s
Estructura Microcontrolador
Principio unidad 1.
Tipos de Lenguajes Ensamblador.
INTERRUPCIONES – ABRAZO MORTAL
PICmicro GAMA MEDIA: PIC16F84 [I]
3.2.1 Administración de almacenamiento
Elementos y tipos de sistemas operativos
¿Qué es un Microcontrolador?
UNIDAD 2: “Características del Modelado UML” CONTENDIDO Elaborado por: Ingeniero Harold Cabrera Meza Actualizado por: Ingeniero Nilson Albeiro Ferreira.
ESTADO Registro de ESTADO más utilizado  Es el registro más utilizado.  Ocupa la dirección 03 H tanto del Banco 0 como el Banco 1 de la Memoria de Datos.
También es conocido como proceso ligero. Es una entidad básica de utilización de CPU y esta formado por un contador de programa, algunos registros y una.
Curso: Fundamentos de Computación
Estructura funcional (Von Neumann)
Arquitectura de Computadores
 PRESENTADO POR : ANDRES MAYORGA DANIELA PAEZ VEGA.
Omar Herrera Caamal Rigoberto Lizárraga Luis Cetina Luna.
P ROCESO DE E NSAMBLADO Cámara Vázquez Berenice Rubí.
Katty Evangelina Hipólito Chi.   Aunque cada maquina tiene un lenguaje ensamblador distinto, el proceso de ensamblador tiene suficiente similitudes.
BUCLES – SUBRUTINAS – RETARDOS MICROCONTROLADORES.
Transcripción de la presentación:

Tablas de datos en ensamblador de microcontroladores PIC

Modelo von Neumann Memoria ejecución Procesador Programa + Datos instrucciones datos Carga inicial ejecución Datos Iniciales En el modelo de procesador basado en la arquitectura Hardvard la memoria de programa está separada de la memoria de datos. En cambio en el modelo que conocemos más de von Neumann hay una única memoria de donde el procesador extrae tanto datos como instrucciones. En el modelo de von Neumann hay una única memoria de donde el procesador extrae tanto datos como instrucciones. El programa se carga en la memoria junto con los datos iniciales

Modelo Harvard Programa Memoria Datos ejecución Procesador instrucciones datos Carga inicial ejecución Programa Datos Iniciales Todo programa necesita un conjunto de datos iniciales para poder comenzar a operar. En el modelo de von Neuman esos datos pueden estar inicialmente en la memoria y el código del programa puede acceder a la zona de datos para obtenerlos. En el modelo de Harvard el programa depende estrictamente de las instrucciones con parámetro inmediato (en los pic las instrucciones que tienen una l en su especificación. movlw, addlw, etc) –También en el modelo von Neuman se incluyen siempre instrucciones de tipo inmediato para dar más versatilidad a la programción. En el modelo de procesador basado en la arquitectura Harvard la memoria de programa está separada de la memoria de datos. El programa se carga en la memoria de programa. Y los datos iniciales deben cargarse como valores inmediatos de las instrucciones.

PIC’s retlw Programa Memoria Datos movlw addlw … ejecución Procesador instrucciones datos Carga inicial ejecución Programa Datos Iniciales movlw addlw retlw … Una facilidad que proporcionan los procesadores pic para introducir listas de datos en el programa son las instrucciones retlw, especialmente orientadas para construir tablas. Cualquier ensamblador ofrece instrucciones con parámetro inmediato. Los pic ofrecen además una instrucción especialmente orientada para construir tablas

Tablas ; rutina CodigoAscii. Parámetro en w CodigoAscii: addwf PCL retlw 30h retlw 31h retlw 32h retlw 33h retlw 34h retlw 35h retlw 36h retlw 37h retlw 38h … movlw 5 call CodigoAscii (w con valor 35h) Una tabla de datos es una estructura organizada dentro del programa como una rutina a la que se invoca con un parámetro y al retorno de la rutina se obtiene un dato dependiente del parámetro. ; rutina CodigoAscii. Parámetro en w CodigoAscii: addwf PCL retlw 30h retlw 31h retlw 32h retlw 33h retlw 34h retlw 35h retlw 36h retlw 37h retlw 38h El uso de esta rutina sería el siguiente, Inicializo el registro w a un valor entre 0 y 9 y llamo a la rutina, al retorno de esta el w contiene la representación ascii del valor suministrado. … movlw 5 call CodigoAscii (w con valor 35h) El modo de funcionamiento de la rutina es el siguiente. Al escribir un valor en el registro PCL este registro es volcado directamente en el contador de programa más concretamente es la parta inferior del contador de programa.(El contador de programa tiene 13 bits de los cuales sólo 8 están representados en PCL el resto están en otro registro llamado PCLATH). Como el contador de programa es el registro que apunta a la siguiente instrucción que se va a ejecutar, este acto equivale a un salto (algo parecido a un goto). El programa salta entonces a ejecutar una nueva instrucción. Veamos lo que pasa en nuesta rutina CódigoAsccii. 1º Invocamos la rutina con un 5 en el w. 2º Dentro de la rutina sumamos el contenido de w al contenido actual de PCL. (El contenido actual de PCL apunta a la instrucción siguiente a la addwf PCL,F, es decir a retlw 30h.) 3º Ahora el contador de programa apuntará a la instrucción retlw 35h. 4º Al ejecutarse la instrucción se retorna de la rutina CodigoAscii y w contiene el valor 35h. Esta es la forma simplificada de implementar una tabla de datos en un programa ensamblador de microcontroladores PIC. Una tabla viene a ser una estructura de datos programada que devuelve un valor u otro dependiendo del parámetro. Hace uso de PCL y de las instrucciones retlw.

PCL y PCLATH “representan” al contador de programa. Org 0 Goto inicio (0000000000000) Org4 Inicio movlw 5h (0000000000100) Addwf PCL (0000000000101) Nop (0000000000110) Nop (0000000000111) Nop (0000000001000) Nop (0000000001001) Nop (0000000001010) Goto inicio (0000000001011) 0000 0000 0000 0001 00 000 0000 0001 Contador de programa El contador de programa está respresentado por PCL y PCLATH. PCL es un registro de 8 bits y representa los bits de 0 a 7 del contador de programa. PCLATH es también un registro de 8 bits y representa los bits 8 a 12 del contador de programa (5 bits, el resto de bits de pclath son irrelevantes en el microcontrolador 16F84A). Cada vez que se modifica el contenido del registro PCL el registro del contador de programa queda modificado igualmente tanto con el valor de PCL como con el valor de PCLATH. Veámoslo gráficamente. PCL y PCLATH “representan” al contador de programa. El contador de programa siempre apunta a la SIGUIENTE instrucción a ejecutar

Al cambiar el contador de programa PCL se ve modificado. No así PCLATH PCL y PCLATH PCLATH PCL Org 0 Goto inicio (0000000000000) Org4 Inicio movlw 5h (0000000000100) Addwf PCL (0000000000101) Nop (0000000000110) Nop (0000000000111) Nop (0000000001000) Nop (0000000001001) Nop (0000000001010) Goto inicio (0000000001011) 0000 0000 0000 0101 00 000 0000 0101 Contador de programa Al cambiar el contador de programa PCL se ve modificado. No así PCLATH

PCLATH debe ser modificado explícitamente por el programador PCL y PCLATH PCLATH PCL Org 0 Goto inicio (0000000000000) Org4 Inicio movlw 5h (0000000000100) Addwf PCL (0000000000101) Nop (0000000000110) Nop (0000000000111) Nop (0000000001000) Nop (0000000001001) Nop (0000000001010) Goto inicio (0000000001011) 0000 0000 0000 0110 00 000 0000 0110 Contador de programa PCLATH debe ser modificado explícitamente por el programador

PCL y PCLATH PCLATH PCL 0000 0000 0000 1011 Contador de programa Org 0 Goto inicio (0000000000000) Org4 Inicio movlw 5h (0000000000100) Addwf PCL (0000000000101) Nop (0000000000110) Nop (0000000000111) Nop (0000000001000) Nop (0000000001001) Nop (0000000001010) Goto inicio (0000000001011) 0000 0000 0000 1011 00 000 0000 0110 Contador de programa Cuando se modifica PCL, el contador de programa se carga con el contenido de PCL y PCLATH

Lo que equivale a un salto o goto PCL y PCLATH PCLATH PCL Org 0 Goto inicio (0000000000000) Org4 Inicio movlw 5h (0000000000100) Addwf PCL (0000000000101) Nop (0000000000110) Nop (0000000000111) Nop (0000000001000) Nop (0000000001001) Nop (0000000001010) Goto inicio (0000000001011) 0000 0000 0000 1011 00 000 0000 1011 Contador de programa Lo que equivale a un salto o goto

!!NO OCURRE LO MISMO¡¡ si se modifica el PCLATH PCL y PCLATH PCLATH PCL Org 0 Goto inicio (0000000000000) Org4 Inicio movlw 5h (0000000000100) Addwf PCLATH (0000000000101) Nop (0000000000110) Nop (0000000000111) Nop (0000000001000) Nop (0000000001001) Nop (0000000001010) Goto inicio (0000000001011) 0000 0101 0000 0110 00 000 0000 0110 Contador de programa !!NO OCURRE LO MISMO¡¡ si se modifica el PCLATH

de una modificación del PCL. PCL y PCLATH PCLATH PCL Org 0 Goto inicio (0000000000000) Org4 Inicio movlw 5h (0000000000100) Addwf PCLATH (0000000000101) Addwf PCL (0000000000110) Nop (0000000000111) Nop (0000000001000) Nop (0000000001001) Nop (0000000001010) Goto inicio (0000000001011) 0000 0101 0000 0111 00 000 0000 0111 Contador de programa Modificar el PCLATH no afecta al control de ejecución si no viene seguido de una modificación del PCL.

Al modificar PCL: PCLATH+PCL se cargan en el contador de programa PCL y PCLATH PCLATH PCL nop (0010100001001) nop (0010100001010) nop (0010100001011) nop (0010100001100) nop (0010100001101) nop (0010100001110) nop (0010100001111) 0000 0101 0000 1100 00 101 0000 1100 Contador de programa Al modificar PCL: PCLATH+PCL se cargan en el contador de programa

PCL,PCLATH: Páginas PCL PCLATH 0000 0000 0000 0001 0000 0010 0000 0011 PCL 0..255 Memoria de Programa Dado este comportamiento de PCL-PCLATH. La memoria de programa puede considerarse dividida en páginas: En los 16F84 solo 10 de los 13 bits del contador de programa son útiles (sólo 1K de memoria de programa): 8 en PCL y 2 en PCLATH. Por lo tanto 4 páginas.

Tablas y páginas: problemas [0005]:movlw 5 [0006]:call CodigoAscii [0007]:… (w con valor 35h) [0008]:… … [000B]:… [000C]:… Pagina 0: ¡NO FUNCIONA COMO ESPERAMOS! ; rutina CodigoAscii. Parámetro en w CodigoAscii: [0105]: addwf PCL [0106]: retlw 30h [0107]: retlw 31h [0108]: retlw 32h [0109]: retlw 33h [010A]: retlw 34h [010B]: retlw 35h [010C]: retlw 36h [010D]: retlw 37h [010E]: retlw 38h [010F]: retlw 30h En este momento PCLATH==0. Al modificar PCL; PCLATH |PCL se cargan en el contador de Programa. Pagina 1:

Tablas y páginas Modificamos primer PCLATH=01. Pagina 0: [0005]mvlw HIGH CodigoAscii [0006]movwf PCLATH [0007]:movlw 5 [0008]:call CodigoAscii [0009]:… (w con valor 35h) [ Modificamos primer PCLATH=01. Al modificar PCL; PCLATH |PCL se cargan en el contador de Programa. Pagina 0: ; rutina CodigoAscii. Parámetro en w CodigoAscii: [0105]: addwf PCL [0106]: retlw 30h [0107]: retlw 31h [0108]: retlw 32h [0109]: retlw 33h [010A]: retlw 34h [010B]: retlw 35h [010C]: retlw 36h [010D]: retlw 37h [010E]: retlw 38h [010F]: retlw 30h ¡SOLUCION! Pagina 1:

Tablas y páginas: Tabla entre dos páginas: otro problema [0005]mvlw HIGH CodigoAscii [0006]movwf PCLATH [0007]:movlw 5 [0008]:call CodigoAscii [0009]:… (w con valor 35h) [ Pagina 0: ; rutina CodigoAscii. Parámetro en w CodigoAscii: [00FB]: addwf PCL [00FC]: retlw 30h [00FD]: retlw 31h [00FE]: retlw 32h [00FF]: retlw 33h [0100]: retlw 34h [0102]: retlw 35h [0103]: retlw 36h [0104]: retlw 37h [0105]: retlw 38h [0106]: retlw 30h Mientras PCL no se desborde, funciona como esperamos Pagina 1:

Tablas y páginas: Pagina 0: Pero si PCL desborda: PCL=0FFh ¡NO! [0005]mvlw HIGH CodigoAscii [0006]movwf PCLATH [0007]:movlw 5 [0008]:call CodigoAscii [0009]:… (w con valor 35h) [ Pagina 0: ; rutina CodigoAscii. Parámetro en w CodigoAscii: [00FB]: addwf PCL [00FC]: retlw 30h [00FD]: retlw 31h [00FE]: retlw 32h [00FF]: retlw 33h [0100]: retlw 34h [0102]: retlw 35h [0103]: retlw 36h [0104]: retlw 37h [0105]: retlw 38h [0106]: retlw 30h Pero si PCL desborda: PCL=0FFh PCL+1=00 Como PCLATH permanece a 00, al cargarse PCLATH|PCL en el contador de programa, salta a la dirección 0 de la página 0 ¡NO! Pagina 1:

Tablas y páginas: ¡SOLUCION! Pagina 0: [0005] [0006] [0007]:movlw 5 [0008]:call CodigoAscii [0009]:… (w con valor 35h) [ ¡SOLUCION! Pagina 0: ; rutina CodigoAscii. Parámetro en w CodigoAscii: [00F5] mvlw HIGH Salto [00F6] movwf PCLATH [00F7] addlw 3 [00F8]: addwf PCL,W [00F9]: btfsc STATUS,C [00FA]: incf PCLATH Salto: [00FB]: movwf PCL [00FC]: retlw 30h [00FD]: retlw 31h [00FE]: retlw 32h [00FF]: retlw 33h [0100]: retlw 34h [0102]: retlw 35h Realizar primer una SUMA FICTICIA (addwf PCL,W) y comprobar el carry. Si hay desbordamiento sumar 1 a PCLATH Pagina 1: Darse cuenta de que la suma ficticia de w a PCL se hace antes de donde verdaderamente se va a efectuar para que se produzca el salto, por lo que para obtener las mismas conclusiones que se van a obtener allí habría que sumarle previamente a w 3, pero luego en la posición real habría que restárselos Para afinar, habría que mover a pclath, no la parte alta de la dirección de la rutina sino la parte alta de la dirección de la instrucción que mueve el w a PCL.

Conclusión Las tablas son unas estructuras de datos muy útiles para cargar datos iniciales en el programa Algunos problemas pueden surgir si no localizamos adecuadamente la tabla en la memoria de programa Es necesario tener en cuenta tales problemas y resolverlos de manera que la funcionalidad de la tabla se vuelva independiente de la localización en la memoria de programa.