Tablas de datos en ensamblador de microcontroladores pic
This presentation is the property of its rightful owner.
Sponsored Links
1 / 20

Tablas de datos en ensamblador de microcontroladores PIC PowerPoint PPT Presentation


  • 101 Views
  • Uploaded on
  • Presentation posted in: General

Tablas de datos en ensamblador de microcontroladores PIC. Memoria. instrucciones. Carga inicial. Programa + Datos. datos. ejecución. Procesador. Modelo von Neumann. Datos Iniciales. En el modelo de von Neumann hay una única memoria

Download Presentation

Tablas de datos en ensamblador de microcontroladores PIC

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Tablas de datos en ensamblador de microcontroladores pic

Tablas de datos en ensamblador de microcontroladores PIC


Modelo von neumann

Memoria

instrucciones

Carga inicial

Programa

+

Datos

datos

ejecución

Procesador

Modelo von Neumann

Datos Iniciales

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

Memoria

Programa

Memoria

Datos

instrucciones

Carga inicial

ejecución

datos

Datos Iniciales

Procesador

Modelo Harvard

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

Memoria

Programa

Memoria

Datos

instrucciones

Carga inicial

ejecución

datos

Datos Iniciales

Procesador

PIC’s

movlw

addlw

retlw

Cualquier ensamblador ofrece instrucciones con parámetro inmediato. Los pic ofrecen además una instrucción especialmente orientada para construir tablas


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

retlw 30h

movlw 5

call CodigoAscii

(w con valor 35h)

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

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 0001

00 000 0000 0001

Contador de programa

PCL y PCLATH “representan” al contador de programa.

El contador de programa siempre apunta a la SIGUIENTE instrucción a ejecutar


Pcl y pclath1

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


Pcl y pclath2

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 pclath3

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 0110

Contador de programa

Cuando se modifica PCL, el contador de programa se carga

con el contenido de PCL y PCLATH


Pcl y pclath4

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


Pcl y pclath5

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


Pcl y pclath6

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.


Pcl y pclath7

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

0..255

0..255

0..255

0..255

Memoria de Programa

PCL,PCLATH: Páginas

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

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

Tablas y páginas

[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

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 ginas1

Tablas y páginas:

[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 ginas2

Tablas y páginas:

[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:


Conclusi n

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.


  • Login