Autor Tema: Comentarios sobre el tutorial 'ASM desde 0'  (Leído 56799 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Comentarios sobre el tutorial 'ASM desde 0'
« Respuesta #30 en: 23 de Noviembre de 2008, 13:14:00 »
Hola Leonpic

Felicidades por el tutorial  :-/ . Hay unos detalles que quisiera comentarte...  :mrgreen:

Estos registros, tienen una ancho de bit de acuerdo al PIC, que hay de 8 bit, 16 bit y 32 bit. Excepto la palabra configuración y que la veremos mas adelante.

Los PIC16 siempre tienen registros de memoria de 8 bits. Los que tienen registros de 16 y 32 bits son pics de otras familias como la pic24 y pic32.

Ahora bien, si W es un registro, ¿dónde está ubicado, ya que en el mapa de memoria no lo encuentro?

Está en la pocición 00h y dice indirect addr. Esto es, porque el registro W, no es una pocición de memoria física. Hay otros registros que están igual. Pero no nos desbiemos, el registro W, es muy usado y recuerden, se utiliza para mover datos, o cargar datos en distintas pociociones de la RAM y EEPROM.

El registro W no está implementado en la memoria ram en la posición 0x00 ni en otra posición. W es un registro independiente que tiene un bus directo con la ALU (un camino privado). La ALU es la única entidad que puede leer o escribir este registro de trabajo.

El direccionamiento indirecto hace uso de los registros FSR e INDF. INDF es completamente ajeno a W. Un direccionamiento indirecto usa el registro FSR como apuntador al contenido de otros registros. Cualquier instrucción que hace uso de INDF (0x00) como dirección invoca un direccionamiento indirecto.

* Memoria de Programa
               Es la ubicación física dónde se guarda el firmware que hemos creado, o sea, nuestro programa. Y tiene un ciclo de 1.000 de lectura y/o escrituras antes de estropearce y es del tipo FLASH (pero este es flaco  :mrgreen: Es un chiste).

El PIC16F877A tiene una capacidad de escritura de FLASH de 100,000 veces. No todos los PIC16 tienen memoria flash, hay que recordar a los viejitos PIC16C que tenían memoria EEPROM borrable con luz ultravioleta  :D o a los PICs que tienen memoria OTP (One time programmable) y solo se graban una vez.

El PIC 16F877, tiene una memoria de programa de 8Kb por un ancho de 14 Bits, o sea que cada pocición de memoria tiene 14 bit (B'11111111111111', o H'3FFF') Cada línea de instrucción ocupa una pocición en la memoria de programa, asi que, podemos poner hasta 8.000 instrucciones.

1k equivale en el ámbito de la computacion a 2^10 = 1024, por lo que 8k equivalen a 8192 instrucciones.

Seguiré leyendo con atención tu documento Leon.  :)
« Última modificación: 23 de Noviembre de 2008, 13:20:44 por migsantiago »

Desconectado Leon Pic

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3564
    • Impresiones en 3D
Re: Comentarios sobre el tutorial 'ASM desde 0'
« Respuesta #31 en: 23 de Noviembre de 2008, 13:24:00 »
Ahora si te entendí  :-/ :-/. Efectivamente, son páginas no bancos. Ya lo cambio.


Me ganaste de mano Santiago.

Hola Leonpic

Felicidades por el tutorial  :-/ . Hay unos detalles que quisiera comentarte...  :mrgreen:

Estos registros, tienen una ancho de bit de acuerdo al PIC, que hay de 8 bit, 16 bit y 32 bit. Excepto la palabra configuración y que la veremos mas adelante.

Los PIC16 siempre tienen registros de memoria de 8 bits. Los que tienen registros de 16 y 32 bits son pics de otras familias como la pic24 y pic32.
Me expresé mal. Lo que intenté decir, es que hay distintos tipos de PIC que algunos trabajan de 8, otros de 16 y otrs de 32. Otro detalle a corregir.

Citar
Ahora bien, si W es un registro, ¿dónde está ubicado, ya que en el mapa de memoria no lo encuentro?

Está en la pocición 00h y dice indirect addr. Esto es, porque el registro W, no es una pocición de memoria física. Hay otros registros que están igual. Pero no nos desbiemos, el registro W, es muy usado y recuerden, se utiliza para mover datos, o cargar datos en distintas pociociones de la RAM y EEPROM.

El registro W no está implementado en la memoria ram en la posición 0x00 ni en otra posición. W es un registro independiente que tiene un bus directo con la ALU (un camino privado). La ALU es la única entidad que puede leer o escribir este registro de trabajo.

El direccionamiento indirecto hace uso de los registros FSR e INDF. INDF es completamente ajeno a W. Un direccionamiento indirecto usa el registro FSR como apuntador al contenido de otros registros. Cualquier instrucción que hace uso de INDF (0x00) como dirección invoca un direccionamiento indirecto.
Muchas gracias por la aclaración. Tenía mal el concepto.

Citar
* Memoria de Programa
               Es la ubicación física dónde se guarda el firmware que hemos creado, o sea, nuestro programa. Y tiene un ciclo de 1.000 de lectura y/o escrituras antes de estropearce y es del tipo FLASH (pero este es flaco  :mrgreen: Es un chiste).

El PIC16F877A tiene una capacidad de escritura de FLASH de 100,000 veces. No todos los PIC16 tienen memoria flash, hay que recordar a los viejitos PIC16C que tenían memoria EEPROM borrable con luz ultravioleta  :D o a los PICs que tienen memoria PROM y solo se graban una vez.
Actualizando entónces.

Citar
El PIC 16F877, tiene una memoria de programa de 8Kb por un ancho de 14 Bits, o sea que cada pocición de memoria tiene 14 bit (B'11111111111111', o H'3FFF') Cada línea de instrucción ocupa una pocición en la memoria de programa, asi que, podemos poner hasta 8.000 instrucciones.

1k equivale en el ámbito de la computacion a 2^10 = 1024, por lo que 8k equivalen a 8192 instrucciones.

Seguiré leyendo con atención tu documento Leon.  :)

Si, perdón. Es 8.192. Lo corregí en otros foros y aquí me olvidé. Perdón  :mrgreen:
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Comentarios sobre el tutorial 'ASM desde 0'
« Respuesta #32 en: 23 de Noviembre de 2008, 15:27:36 »
Veo que copiaste y pegaste mi explicación sobre W, eso está bien, pero ya no era necesario que copiaras lo del direccionamiento indirecto  :D esa parte no tiene lugar en la explicación de W

Talvez la deberías dejar para cuando expliques los 3 direccionamientos que manejan los PIC16  :P

Desconectado Leon Pic

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3564
    • Impresiones en 3D
Re: Comentarios sobre el tutorial 'ASM desde 0'
« Respuesta #33 en: 23 de Noviembre de 2008, 16:26:47 »
 :-) :-) :-) Pero me pareció buena explicación y una pequeña introducción para el direccionamiento indirecto. Si quieres lo saco. No tengo problema en hacerlo. Normalmente pido permiso antes de copiar y pegar una explicación, pero como Ariel está haciendo un backup de su foro y además lo está pasando a formato wiki, quise  arreglarlo lo más rápido posible, y poner con mis palabras las tuyas, hiba a quedar igual practicamente. No había mucho que cambiar. Cuando una idea está bien explicada, no hay nada que resumir y/o agregar  :)
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Comentarios sobre el tutorial 'ASM desde 0'
« Respuesta #34 en: 23 de Noviembre de 2008, 19:04:17 »
Entonces no hay problema, puede quedar así.

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: Comentarios sobre el tutorial 'ASM desde 0'
« Respuesta #35 en: 04 de Diciembre de 2008, 17:29:46 »
Hola Leon.
Primero felicitarte por el tutorial y por el movimiento que le estas dando al ".almacen del asembler"
Creo que en la instruccion DECFSZ si afecta al flag Z de STATUS, de hecho hace el salto porque este flag se pone a 1.

saludos tapi8

Desconectado Leon Pic

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3564
    • Impresiones en 3D
Re: Comentarios sobre el tutorial 'ASM desde 0'
« Respuesta #36 en: 04 de Diciembre de 2008, 18:59:20 »
Buena observación pero esta vez no me equivoqué, je (el curso tiene 2 páginas y el tema de fe de errata tiene 5 páginas  :D :D :D)

El que afecta al bit Z del status es la instrucción DECF según en el datasheet del 16F877 de microchips. De todas maneras lo voy a probar en el MPLAB y si es así, lo modifico, no es de estrañar que halla errores en los datasheet.


EDITO: Confirmado, no afecta el bit Z.
« Última modificación: 04 de Diciembre de 2008, 21:10:10 por Leon Pic »
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: Comentarios sobre el tutorial 'ASM desde 0'
« Respuesta #37 en: 07 de Diciembre de 2008, 08:53:34 »
Pues la verdad no lo entiendo. Si la instruccion es: decremeta una unidad de F y salta si Z es 1, no entiendo como no le afecta a dicho flag. Este flag es el que hace que se produzca dicho salto. A lo mejor afecta dicho flag a la instruccion, y no al contrario?

salu2 tapi8

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Comentarios sobre el tutorial 'ASM desde 0'
« Respuesta #38 en: 07 de Diciembre de 2008, 09:31:18 »
Hola tapi. Es que eso es lo que "te venden".
Recuerda que el uC internamente pues es algo mucho más complejo de lo que nosotros vemos o usamos. Yo no conozco el circuito interno del uC en su totalidad ni en toda su profundidad, pero tal vez el circuito electrónico interno que detecta cuando el resultado de una operacion da cero no este necesariamente implementado fisicamente en la parte del bit Z. Es decir que internamente puede que el circuito que detecte el "Zero" no necesariamente sea el bit Z en si, pero puede que sí lo comande y decida si debe afectarlo o no(al bit Z). O bien puede que utilice dos circuitos identicos, solo que uno afecta al Z y el otro no. Quién sabe? :D

Saludos!
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Comentarios sobre el tutorial 'ASM desde 0'
« Respuesta #39 en: 07 de Diciembre de 2008, 11:57:49 »
Cierto, el hecho de que la instrucción diga INCFSZ no implica que la Z sea el bit 2 de status.

Si la operación incremento resulta en un 0x00 entonces la ALU ordena a la entidad EEPROM que en vez de entregar la siguiente instrucción, entregue un NOP, pero nunca afecta al bit Z de status.

Las instrucciones INCFSZ, DECFSZ, BTFSC y BTFSS ejecutan el 2do ciclo de instrucción como NOP cuando se debe hacer el salto.

Desconectado Javicho

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 570
Re: Comentarios sobre el tutorial 'ASM desde 0'
« Respuesta #40 en: 07 de Diciembre de 2008, 15:11:57 »
Pues la verdad no lo entiendo. Si la instruccion es: decremeta una unidad de F y salta si Z es 1,

Es que se dice asi ... decrementa una unidad del registro Fuente y salta si el resultado es ZERO.

Javicho.

Desconectado Leon Pic

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3564
    • Impresiones en 3D
Re: Comentarios sobre el tutorial 'ASM desde 0'
« Respuesta #41 en: 07 de Diciembre de 2008, 20:27:42 »
Efectivamente. Fíjensen que cuando traduje la instrucción, no puse Z como el bit Z del registro Status, lo traduje como la palabra en ingles ZERO  que en castellano es CERO.
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: Comentarios sobre el tutorial 'ASM desde 0'
« Respuesta #42 en: 08 de Diciembre de 2008, 08:02:26 »
Bueno despues de estos comentarios me queda algo mas claro . Yo ese Z siempre lo traduje como el Z del STATUS, pero posiblemente fuera un error mio, gracias a todos por las aclaraciones.

saludos tapi8

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Comentarios sobre el tutorial 'ASM desde 0'
« Respuesta #43 en: 21 de Diciembre de 2008, 13:10:24 »
RLF

Rota hacia la izquierda los bit de un registro seleccionado por el programador. El destino de la operación se puede elegir. Cada rotación equivale a multiplicar por 2

Ejemplo:

Código: [Seleccionar]
              RLF         PORTC,F
Si antes de la instrucción PORTC vale B'00001000', después de la instrucción vale B'00010000'. Si se hubiera elegido como destino W, PORTC después de la instrucción continua valiendo B'00001000' y W vale B'00010000'

Para recordar Rotate es rotar Left es izquierda File es el registro.

Afecta a:

  • C se pone a 1 si hubo acarreo

RRF

Rota hacia la derecha los bits de un registro seleccionado por el programador. El destino de la operación se puede elegir. Cada rotación equivale a dividir por 2

Ejemplo

Código: [Seleccionar]
             RRF         PORTB,F
Si antes de la instrucción PORTB vale B'10000000' después de la instrucción PORTB vale B'0100000'. Si se hubiera elegido como destino W, PORTB después de la instrucción continua valiendo B'10000000' y W vale B'01000000'

Para recordar Rotate es rotar Right es derecha File es el registro.

Afecta a:

  • C se pone a 1 si hubo acarreo

RLF y RRF no se hacen como mencionas ni son multiplicación por 2 en el caso de los pics.

Caso RLF

Se rotan los 8 bits del byte original a la izquierda. El bit 0 del nuevo byte será el valor que había en la bandera C. El nuevo valor de la bandera C será el valor que había en el bit 7 del byte original.

Caso RRF

Se rotan los 8 bits del byte original a la derecha. El bit 7 del nuevo byte será el valor que había en la bandera C. El nuevo valor de la bandera C será el valor que había en el bit 0 del byte original.

Debes leer mejor las especificaciones del pic, checa la sección Instruction Set del Mid-Range Manual.

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Comentarios sobre el tutorial 'ASM desde 0'
« Respuesta #44 en: 21 de Diciembre de 2008, 13:32:40 »
muy bueno el tutorial que estas haciendo leon :-/ :-/ muchas gracias

si es que se puede podes colocar algunas funciones de los 18F? después claro
.