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

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

Desconectado Leon Pic

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3564
    • Impresiones en 3D
Re: Comentarios sobre el tutorial 'ASM desde 0'
« Respuesta #45 en: 21 de Diciembre de 2008, 16:00:58 »
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.

Santiago, lamento tener que corregirte, pero es como lo digo. Si hacemos una rotación, corresponde a multiplicar o dividir, pero hay que tener cuidado con su uso, porque si yo roto un bit, supongamos a la izquierda, multiplicamos por 2 y lo guardamos en el registro. Si volvemos a rotarlo a la izquierda, volvemos a multiplicarlo por dos con respecto al registro, pero si lo tomamos desde el valor inicial, será por 4, luego por 8, luego por 16.

El bit C, indica si hay acarreo, por ejemplo:

B'10000000' RLF B'0000000' Lo que pasa aquí, el 1 del bit 7, pasa al carry.

Si hacemos:

B'00000001' RRF B'0000000' Aquí pasa exactamente lo mismo que lo anterior, el bit carry acusa el acarreo.

Si quiero multiplicar con estas instrucciones, lo que tengo que hacer, es trabajar con dos registros. O sea, dos multiplicaciones de 8 bit, dan como resultado otro de 16 bit. Por lo tanto, roto a la izquierda el registro, luego chequeo el bit C del registro STATUS, si hubo acarreo, le pongo a 1 al segundo registro que nos dará el resultado que corresponda al mas significativo.

Supongamos que, tenemos estos registros declarados RESAL (resultado más significativo), RESBA (resultado menos significativo)
Arrancamos con los dos registros en cero, luego cargamos B'10000000' a RESBA y ejecutamos la instrucción RLF. RESBA pasará con el valor B'00000000' pero aquí, hubo acarreo y entónces tenemos que poner a 1 el bit menos significativo del registro RESAL.

Si bien el bit del registro STATUS es legible y escribible, cuando se ejecuta la instrucción RRF o RLF este bit se actualiza según corresponda ya que estos dos instrucciones, afectan al dicho bit. En lo que si tienes razón y algo que me olvidé de comentar, es que según como setee al bit C, afectará al resultado, ya que, si en el registro RES tenemos B'00000001' si ajusto al bit C en 1 y ejecuto la instrucción RRF RES vale B'10000000', pero si ajustamos al bit C en 0 y ejecutamos la instrucción RRF RES vale B'00000000' e inmediatamente el bit C se pone a 1 automáticamente.
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.

Desconectado sander

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 623
Re: Comentarios sobre el tutorial 'ASM desde 0'
« Respuesta #46 en: 21 de Diciembre de 2008, 18:01:36 »
Leon  lo que dice mig santiago es verdad, en el caso de los PICs las intrucciones RLF y RRF, rotan , no desplazan , y realizan la rotacion  con el valor que hay en C, por ejemplo si tu tienes el registro Var = B'00000010'C = 1 entonces al aplicar RRF   Var,F el resultado sera Var = B'10000001' y C = 0, y como ves  RRF no tiene el efecto de dividir entre dos por si solo, para que puedas dividir o multiplicar debes garantizar que C = 0 antes de realizar cualquiera de las rotaciones.

Saludos
La electrónica es el arte de manipular señales eléctricas que transportan información
Jan Davidse

Visita mi blog
Visita mi canal de youtube

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Comentarios sobre el tutorial 'ASM desde 0'
« Respuesta #47 en: 21 de Diciembre de 2008, 18:13:47 »
Estoy de acuerdo con ustedes, para realizar una multiplicación o una división se debe asegurar que C=0.

Leonpic, tu explicación en el tutorial es ambigua. Debes hacer énfasis al uso de la rotación a través del bit C. Cualquier usuario sin experiencia asumirá que el bit que se agrega en la rotación será un cero. Se debe especificar que pasa con el bit C antes y después de la rotación.

El acarreo que mencionas es diferente en la división. Cuando se rota a la derecha un número y el número es impar, entonces C valdrá 1. Si el número es par, C valdrá 0. Yo no llamaría acarreo al bit desplazado, lo llamaría residuo.

RRF y RLF también pueden servir para transmitir una palabra en forma serial, a través del bit C.
« Última modificación: 21 de Diciembre de 2008, 18:19:36 por migsantiago »

Desconectado Leon Pic

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3564
    • Impresiones en 3D
Re: Comentarios sobre el tutorial 'ASM desde 0'
« Respuesta #48 en: 21 de Diciembre de 2008, 18:40:39 »
Ahora entiendo a que te refieres. Lamento el mal entendido. Bueno, actualizando.

Gracias. :-/ :-/ :-/ :-/ :-/ :-/
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.

jacrmr

  • Visitante
Re: Comentarios sobre el tutorial 'ASM desde 0'
« Respuesta #49 en: 22 de Diciembre de 2008, 04:10:33 »
Los comentarios que te han hecho son adecuados. La rotación siempre pasa por el bit C, pero no a manera de "acarreo" como lo mencionas. Esta ambiguedad se elimina con la gráfica que aparece en la hoja de datos donde puede observarse la operación de rotación siempre a través del bit C. Incluso las multiplicaciones y divisiones por y entre 2 que te refieres son correctas siempre y cuando se tenga en claro éste efecto del bit C. Además no es ni necesario checar el bit C para ver si hubo "acarreo" cuando intentas multiplicar o dividir por o entre 2 cuando usas dos registros para hacer operaciones de 16 bits. Puesto que las rotaciones siempre pasan por el bit C, sólo es necesario hacer las operaciones en forma secuencial. Por ejemplo:

bcf STATUS,C
rlf REGISTRO_LO,F
rlf REGISTRO_HI,F

Los nuevos PICs de la arquitectura mejorada PIC16F1XXX que están próximos a salir comenzando el 2009 incluyen operaciones que sí desplazan, en forma normal y también aritméticamente para aumentar esta funcionalidad.

Desconectado taipan

  • PIC12
  • **
  • Mensajes: 91
Re: Comentarios sobre el tutorial 'ASM desde 0'
« Respuesta #50 en: 14 de Enero de 2009, 21:07:48 »
Hola a todas/os

Mi mas sicera FELICITACION a LEON PIC por el tutorial que esta montando.

Los que nos iniciamos en esto del ASM estamos infinitamente agradecidos.
Si es posible me sumo a la peticion de que se continue con el 18F.
Es mas me ofrezco para ayudar en lo que consideren oportuno.

PD LEON PIC disculpa  :cry: en el ultimo privado no me he despedido.

SALU2
SALU2


Pregunta:  ?como se llama esa marca de coches tan cara?.
Respuesta: mercedes.
Pregunta: a pues eso   ?mercedes como se llama ese aleman que me quita las ideas?.
Respuesta: alzeimer

Desconectado Leon Pic

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3564
    • Impresiones en 3D
Re: Comentarios sobre el tutorial 'ASM desde 0'
« Respuesta #51 en: 14 de Enero de 2009, 21:57:56 »
Gracias taipan.

Siguiendo la actualización de mis errores y distraidas  :mrgreen: :oops: :oops: actualizé la instrucción INCFSZ que mencionaba en tres partes que decrementaba. Esto me pasó, por que copié y pegué la explicación de DECFSZ y al agregarle un comentario, me olvidé de actualizarlo.
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.

Desconectado luisp

  • PIC10
  • *
  • Mensajes: 1
Re: Comentarios sobre el tutorial 'ASM desde 0'
« Respuesta #52 en: 04 de Febrero de 2009, 01:52:48 »
Saludos, te felicito leon por lo que haces y mas porque aceptas detalles de las cosas para crear un Super Tutorial,
mi pequeño aporte (es un comentario de un amigo que esta leyendo el tutorial )

Respuesta #3 : 31 de Octubre de 2008, 03:57:59 pm
El registro W no está implementado en la memoria ram en la posición 0x00 ni en otra posición

creo que va es asi

El registro W no está implementado en la memoria ram, ni en la posición 0x00 ni en otra posición

Gracias por el tiempo que les das a los demas sobre tu conocimiento.
« Última modificación: 05 de Febrero de 2009, 02:12:38 por luisp »

Desconectado Leon Pic

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3564
    • Impresiones en 3D
Re: Comentarios sobre el tutorial 'ASM desde 0'
« Respuesta #53 en: 04 de Febrero de 2009, 21:54:55 »
Tienes razón. Tengo un pequeño error gramatical. Modificando entónces  :mrgreen:
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.

Desconectado canival35

  • PIC10
  • *
  • Mensajes: 36
Re: Comentarios sobre el tutorial 'ASM desde 0'
« Respuesta #54 en: 23 de Marzo de 2009, 05:51:24 »
Muy buen trabajo leon felicidades, es una excelente ayuda para los que vamos empezando con esto de los pics, esta mejor explicado que algunos de los libros mas polulares de cominezo que hay para pics, seria de gran ayuda que explicaras la forma en que configuras al pic desde el ICPROG, saludos  :mrgreen:

Desconectado Juancar

  • PIC12
  • **
  • Mensajes: 79
Re: Comentarios sobre el tutorial 'ASM desde 0'
« Respuesta #55 en: 26 de Marzo de 2009, 11:46:46 »
Tengo una duda bastante tonta, pero que no entiendo el funcionamiento de EQU:

Citar
Es muy fácil y con la instrucción "EQU"

PUERTO_A   EQU  H'05'

Si al Bit RA6 lo quero llamar LED6 lo hacemos así:

LED6  EQU  6

El primer caso lo entiendo, igualas la etiqueta "PUERTO_A" con la posición de memoria 05 (supongo que la H es de 'hexadecimal)
Lo que no entiendo es el segundo caso, en el que igualas LED6 a 6, refiriéndote al bit 6 del puerto A. No sería necesario especificar esto de alguna manera?? algo como "LED6 EQU PUERTO_A,6

Un saludo, y gracias por este excelente trabajo.

"Las cosas se hacen bien, o no se hacen"

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: Comentarios sobre el tutorial 'ASM desde 0'
« Respuesta #56 en: 26 de Marzo de 2009, 12:31:53 »
Yo la primera que vi esto de asignarles nombres a los bits fue recientemente en el "curso de suky", por cierto excelente curso suky, gracias por el tiempo y talento dedicados al foro.
Pero creo que esta bien asi, porque le asignas la posicion del bit dentro del registro, cuando lo usas en el progama le tienes que decir en que registro esta.
por ejemplo le dices: LED  equ   5. Y esta el PORTA,5 cuando lo uses le diras BSF   PORTA,LED siempre le diras el nombre del reg. y en vez del numero el nombre que tu le has puesto. No se si me he explicado bien espero que si. Es muy util cuando en un programa tienes que usar muchos bits individualmente porque no tienes que estar pendiente de donde estan colocados, les pones un nombre que haga referencia a lo que hacen y despues los designas con esos nombres.

saludos tapi8.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6759
Re: Comentarios sobre el tutorial 'ASM desde 0'
« Respuesta #57 en: 26 de Marzo de 2009, 12:48:45 »
MPLAB lo que hace al encontrar LED6 lo reemplaza por su valor numérico, ósea 6. Siendo este de cualquier registro especificado, por ejemplo:
Código: ASM
  1. bsf     TRISA,LED6 ; Setea el bit 6 del registro TRISA.
  2. bsf     PORTA,LED6 ; Setea el bit 6 del puerto A.
Otra forma de definir mas especificamente seria usando DEFINE:
#DEFINE es empleado para crear sustituciones dentro del texto del programa que lo simplifiquen. La forma correcta es #DEFINE NOMBRE TEXTO, con lo que, cada vez que el compilador encuentre la orden NOMBRE, la sustituirá por el texto. El problema que se nos plantea es que, si bien es más flexible que la directiva EQU, puesto que esta sólo nos permitía asignar un valor, sólo se nos permite con #DEFINE una línea de texto, y esta debe ser fija.

Código: ASM
  1. #DEFINE LED6    PORTA,6

Entonces en el programa se usa:

Código: ASM
  1. bsf     LED6
  2. bcf     LED6

Citar
Yo la primera que vi esto de asignarles nombres a los bits fue recientemente en el "curso de suky", por cierto excelente curso suky, gracias por el tiempo y talento dedicados al foro.

De nada, y gracias por el reconocimiento. :-)

Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado jhozate

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1689
Re: Comentarios sobre el tutorial 'ASM desde 0'
« Respuesta #58 en: 26 de Marzo de 2009, 18:39:30 »
hola a todos,,felicitaciones por este tutorial...
leí en un documento sobre una instruccion llamada setf q es para poner en 1 todo un byte..alguien sabe de esta instruccion? es verdad o mentira?

saludos
Ser Colombiano es un Premio, Saludos desde CALI-COLOMBIA

Desconectado sander

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 623
Re: Comentarios sobre el tutorial 'ASM desde 0'
« Respuesta #59 en: 26 de Marzo de 2009, 18:48:32 »
Esa instruccion es una instruccion para los PIC18.

Saludos
La electrónica es el arte de manipular señales eléctricas que transportan información
Jan Davidse

Visita mi blog
Visita mi canal de youtube


 

anything