Autor Tema: Sera ASM ???  (Leído 15924 veces)

0 Usuarios y 3 Visitantes están viendo este tema.

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Sera ASM ???
« Respuesta #15 en: 29 de Marzo de 2007, 11:21:44 »
P.D.
¿Errores de tipeo en el semáforo? ¡No me doy cuenta!.

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 Resistencio

  • PIC12
  • **
  • Mensajes: 82
Re: Sera ASM ???
« Respuesta #16 en: 29 de Marzo de 2007, 15:09:33 »
Hola BRUNO, es una pavada, por eso no hice mayores acotaciones al repecto, no hace a la cuestion de fondo que esta perfectamente clara...mi problema es lo otro que escribo...

En una partecita del codigo, cuando se prenden y apagan las luces verdes - rojas y amarillas, se hace bcf o bsf (segun) sobre una mismao salida del puerto (el PORTA,01)...No vale la pena ni hablar del tema...el concepto de tu explicacion es brillante...el que lo haya dicho, espero sirva para que veas, que he leido todo lo que escribiste, con paciencia, y absoluto detenimiento (y mas de una vez)...

Aun asi, y como digo siempre, puede estar equivocado, correjime si hace falta, por favor !!!

=============================================================================

SEMAFORO macro Valor ;Creo una macro, Valor indica que la MACRO recibe sólo un parámetro y lo llamo Valor.

 if(Valor < .80)       ;Si el parametro recibido es menor a 80...
   bsf   PORTA,0    ;Encender lampara Verde
   bcf   PORTA,1    ;Apagar lampara Amarilla
  bcf   PORTA,1     ;Apagar lampara Roja
 endif

 if(Valor >= .80) && (Valor < .160) ;Si el parametro recibido es igual o mayor a 80 Y menor a 160...
   bcf   PORTA,0                       ;Apagar lampara Verde
   bsf   PORTA,1                       ;Encender lampara Amarilla
   bcf   PORTA,1                       ;Apagar lampara Roja
 endif

 if(Valor > .160)                       ;Si el parametro recibido es mayor a 160...
   bcf   PORTA,0                      ;Apagar lampara Verde
   bcf   PORTA,1                      ;Apagar lampara Amarilla
   bsf   PORTA,2                      ;Encender lampara Roja
 endif

endm

============================================================================

Espero impaciente, alguna respuesta tuya, apelando al buen criterio y a la didactica en las explicaciones...solo si estas inspirado y con ganas...Lo mismo corre para los demas integrantes del FORO...SALUDOS y gracias por leer !!!

______________________________
"Justo a mi, me toco ser YO! QUINO

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Sera ASM ???
« Respuesta #17 en: 29 de Marzo de 2007, 16:51:20 »
Ah si. Tenés razón. Yo andaba buscando el error en otro lado...jeje.
Si..eso me pasa por usar tanto copy & paste.

Espero impaciente, alguna respuesta tuya, apelando al buen criterio y a la didactica en las explicaciones...solo si estas inspirado y con ganas...Lo mismo corre para los demas integrantes del FORO...SALUDOS y gracias por leer !!!

¿Qué me falta explicar? Fijate que arriba creo haber respondido al asunto del while. ¿Me perdí de algo?

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 Resistencio

  • PIC12
  • **
  • Mensajes: 82
Re: Sera ASM ???
« Respuesta #18 en: 29 de Marzo de 2007, 20:50:53 »
Te dije que era una pavada BRUNO, se entiende clarisimo...lo del WHILE todavia no lo leo...sí, explicas lo de ELSE...sigo mirando, haber por donde anda...SALUDOS y gracias !!!

_____________________________
"Justo a mi, me toco ser Yo" QUINO

Desconectado fartet

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 145
Re: Sera ASM ???
« Respuesta #19 en: 30 de Marzo de 2007, 16:35:01 »
Me parece que voy a imprimir este hilo, Bruno es todo un maestro.  :-/ :-/
La cuestión es si sería factible establecer una ubicación facilmente localizable de estos temas clarificadores para no depender excesivamente del buscador en el que el éxito depende de como se formule.

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Sera ASM ???
« Respuesta #20 en: 30 de Marzo de 2007, 18:52:19 »
Si te es de utilidad, me parece bárbaro que lo tengas como material tangible. A mi me molesta muchas veces tener que hacer lectura "electronica".

Lo que sí es extraño, Resistencio, es tu gran curiosidad e interés por las MACROS y las estructuras de control en el MPASM. Generalmente los "novatos" no prestan atención a esto, ni siquiera aún luego, cuando tienen un poco más claro el assembler.

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 Resistencio

  • PIC12
  • **
  • Mensajes: 82
Re: Sera ASM ???
« Respuesta #21 en: 31 de Marzo de 2007, 01:28:50 »
Hola BRUNO, antes de preguntar algo en este FORO, estuve leyendolo en OFF, durante 1 mes y medio...empece a estudiar el ASM, por iniciativa de un amigo, quien finalmente me convencio de hacerlo...en realidad no me sentia capaz de interpretar nada, me recibi apenas de tecnico hace mas de 2 decadas (hoy piso los 40)...y no vi, ni me enseñaron nada de programacion...termine mis estudios secundarios con solo 3 años de electronica, ya que venia de un colegio, con orientacion a la mecanica...

Lo que paso luego de encontrar estos "bichitos", es casi obvio !!! la fascinacion absoluta por la versatilidad, la economia de espacios y de desarrollo...hace que hoy no pueda pensar, en diseños con "discreta"...

Lo cierto es que he prestado mucha atencion a los manuales del F84, que me imprimi por completo, y del cual saque una base, como para poder "interfacearme" con ustedes...luego descubri en internet un monton de curiosidades, de las cuales entendi la mitad y finalmente este interesantisimo FORO, del cual aprendo a diario...fijate el horario de mis preguntas, a veces estos hasta entrada la madrugada...

De todas estas curiosidades, la mas llamativas, son para mi las MACROS, quizas por eso tanto interes...pero no es el unico, tengo ganas de preguntar de todo, pero a menudo, siento que abuso de este medio y espero que alguien pregunte por mi...

Empece, tambien a preguntar algo a AITOPES, sobre el PIC SIMULATOR IDE, he hice algunas simulaciones, sencillas...poco a poco voy viendo las diferencias entre los lenguajes y sus posibilidades...Seguramente es mas facil para los estudiante actuales, la interpretacion de estas cuestiones...para mi es absolutamente nuevo (y eso que hace unos 3 o 4 meses que vengo leyendo a diario sobre PICS)...

Como no tengo un organigrama de estudios, me aparecen cosas nuevas todos los dias, y en lugar de estudiarlas con algun criterio u orden, las incorporo tipo "MORE INPUT - del famoso NUMBER FIVE" (la pelicula !!! te acordas)...

Es asi que encontre la MACRO que inicio este hilo (hasta esto de escribir "hilo", "post", "topico", me resulta nuevo...), ya que mi sistema de aprendisaje es la lectura y la interpretacion...lo cual puede resultar peligroso, sino se coteja con alguien, que sepa...Fijate lo que me esta pasando con los conceptos de posiciones de memoria y valor de carga, sobre los registros !!!

En fin, seguire de cerca cualquier aporte que este FORO pueda hacerme, y seguire aprendiendo hasta donde me resulte posible...Sin extenderme mas, mira lo que encontre en la pagina de MIKE !!!

Here is a good, generic Delay Macro that does not change "w" or the STATUS Flag. Note that it assumes that the "DlayCount" variable is equal to zero upon code entry.
DlayMacro Macro Cycles          ;  Delay Macro for Edges
 variable i, TCycles, Value, TFlag
TCycles = Cycles
Value = 1 << 7
i = 7
TFlag = 0
 if (TCycles > 5)
 while (i >= 0)
 if ((TFlag == 0) && ((Value * 3) <= TCycles))
  bsf    DlayCount, i
TFlag = 1
TCycles = TCycles - (Value * 3)
 else
 if ((TFlag != 0) && (((Value * 3) + 1) <= TCycles))
  bsf    DlayCount, i
TCycles = TCycles - ((Value * 3) + 1)
 endif
 endif
Value = Value >> 1
i = i - 1
 endw
 if (TCycles > 3)
 Error "Delay Cycles too Large for Macro"
 endif
  decfsz  DlayCount, f
   goto   $ - 1
 endif
 while (TCycles > 1)
  goto   $ + 1
TCycles = TCycles - 2
 endw
 if (TCycles == 1)
  nop            ;  Delay the Last Cycle
 endif
 endm

Parece una "joyita", pero hay que desentrañarla...incluye WHILE...

Porque, te parece que los estudiantes del ASM, no usan las MACROS o no le prestan la debida atencion, como decis ???

Te mando un saludo y gracias por los aportes...

PD1: Actualmente trabajo como tecnico en electromedicina, me especializo en sistemas tomograficos (dignostico por imagenes, en sistemas SPECT, o planares...adquisicion por emision gamma...la famosa camara gamma que lo dejo verde al pobre "HULK"...cualquier curiosidad que tengas al respecto, tocame timbre...)

PD2: Bruno, recien estoy viendo tu explicacion del WHILE, gracias no la habia visto, se me paso de largo...la escribiste el dia 29/03/07...al mediodia, casi...perdoname, no me di cuenta, por eso te preguntaba sobre algun ejemplo...ahora la reviso y veo si saco algo en limpio...de todos modos, siempre entro a este ALMACEN DEL ASM y veo este hilo, en particular...GRACIAS !!! :-/

______________________________
"Justo a mi, me toco ser YO" QUINO
« Última modificación: 31 de Marzo de 2007, 01:44:43 por Resistencio »

Desconectado Resistencio

  • PIC12
  • **
  • Mensajes: 82
Re: Sera ASM ???
« Respuesta #22 en: 31 de Marzo de 2007, 02:28:17 »
BRUNO, podria hacerse algo similar con una MACRO que emule el ejemplo de WHILE, (que explicas...), asi ???

PEPE equ 0x20

Org 0x00

ROTAIZQ macro

  RLF PEPE,F
  RLF PEPE,F
  RLF PEPE,F
  RLF PEPE,F
  RLF PEPE,F

endm
...
...
...
movlw 0x01
movwf PEPE
ROTAIZQ
...
...
...
end
========================

No se si esta faltando o sobrando algo...el ejemplo del WHILE, me cuesta, porque se incorporo el tema de la variable i (i +=1)...  :shock:  mamita !!! :-) :-) :-) :D :-) :-) :-)

Vamos de apoco...GRACIAS !!!

SALUDOS !!!

_____________________________
"Justo a mi, me toco ser Yo" QUINO

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5474
    • Electrónica Didacta
Re: Sera ASM ???
« Respuesta #23 en: 31 de Marzo de 2007, 11:45:42 »
me parece que resistencio está iniciando el estudio de una manera ordenada, yo también estoy aprendiendo con los conocimientos de macros que expone bruno (de hecho lo he usado muy poco). incluso usando sentencias que ni sabía que formaba parte de un macro.


cuando me inicié en el mundo de los pic, fué a los trancazos, y me salté muchas cosas, por lo que he ido llenando esas lagunas cuando me toca enfrentar un problema práctico. así como lo estas haciendo resistencio me parece bien, recorreras un laargo camino cuando vayas desglosando los otros modulos de los PIC, y los muchos detalles que la arquitectura ofrece pero una cosa si es segura, ya no tendras que iniciar estudios de temas anteriores cuando te toque escribir un código.


...
me recibi apenas de tecnico hace mas de 2 decadas (hoy piso los 40)...y no vi, ni me enseñaron nada de programacion
...

eso me hace recordar un ingeniero electronico ya jubilado que me hablaba que en sus tiempo no había nada de eso de microcontroladores, y que cuando le tocaba hacer un proyecto todo era a punta de transistores y compuertas logicas...
para nosotros los mas jovenes me atrevería decir que no me imagino como era aquella época  :D

la tecnología de hoy dia ha facilitado muchas cosas sobre todo para los pequeños aficionados y hobbystas.



La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado Resistencio

  • PIC12
  • **
  • Mensajes: 82
Re: Sera ASM ???
« Respuesta #24 en: 31 de Marzo de 2007, 12:56:09 »
Gracias PEDRO por los conceptos... :mrgreen:

"Me gusta la gente de criterio, la gente que no traga entero. La gente que no se avergüenza de reconocer que no sabe algo, o que se equivocó, y la que, al aceptar sus errores, se esfuerza constructivamente para no volver a cometerlos.

Me gusta la gente que piensa que el trabajo en equipo, entre amigos, produce más que los caóticos esfuerzos individuales.

Me gusta la gente capaz de criticarme constructivamente y de frente. " BENEDETTI

Esto mismo se lo postie a COS, que me ha ayudado con otro tema...cada integrante de este FORO, es un buen amigo...GRACIAS !!!

______________________________
"Justo a mi, me toco ser Yo" QUINO

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Sera ASM ???
« Respuesta #25 en: 31 de Marzo de 2007, 22:58:52 »
BRUNO, podria hacerse algo similar con una MACRO que emule el ejemplo de WHILE, (que explicas...), asi ???

PEPE equ 0x20

Org 0x00

ROTAIZQ macro

  RLF PEPE,F
  RLF PEPE,F
  RLF PEPE,F
  RLF PEPE,F
  RLF PEPE,F

endm
...
...
...
movlw 0x01
movwf PEPE
ROTAIZQ
...
...
...
end
========================

No se si esta faltando o sobrando algo...el ejemplo del WHILE, me cuesta, porque se incorporo el tema de la variable i (i +=1)...  :shock:  mamita !!! :-) :-) :-) :D :-) :-) :-)

Esta perfecto. La diferencia es que esa macro no genera código de salida variable. Las estructuras de control(Ej. while)  permiten justamente desviar el código generando distinto código de salida.


i es una variable auxiliar que tuve que crear. La necesitaba para poder contar la cantidad de rotaciones comparandola con el parámetro recibido.


"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 BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Sera ASM ???
« Respuesta #26 en: 01 de Abril de 2007, 00:00:19 »
Hola BRUNO, antes de preguntar algo en este FORO, estuve leyendolo en OFF, durante 1 mes y medio...empece a estudiar el ASM, por iniciativa de un amigo, quien finalmente me convencio de hacerlo...en realidad no me sentia capaz de interpretar nada, me recibi apenas de tecnico hace mas de 2 decadas (hoy piso los 40)...y no vi, ni me enseñaron nada de programacion...termine mis estudios secundarios con solo 3 años de electronica, ya que venia de un colegio, con orientacion a la mecanica...

Me parece genial que hayas comenzado a aprender un lenguaje de programación. ¡Nunca es tarde para aprender!¡Nunca!

Lo que paso luego de encontrar estos "bichitos", es casi obvio !!! la fascinacion absoluta por la versatilidad, la economia de
espacios y de desarrollo...hace que hoy no pueda pensar, en diseños con "discreta"...

Una vez que arrancas con esto, ni pensás en usar un 555 alguna vez. La electrónica discreta pasa a ser prácticamente de apoyo solamente. El cerebro es el uC.

Lo cierto es que he prestado mucha atencion a los manuales del F84, que me imprimi por completo, y del cual saque una base, como para poder "interfacearme" con ustedes...luego descubri en internet un monton de curiosidades, de las cuales entendi la mitad y finalmente este interesantisimo FORO, del cual aprendo a diario...fijate el horario de mis preguntas, a veces estos hasta entrada la madrugada...

¡Bienvenido! Y no te preocupes por los horarios...todos los tenemos bastante dados vuelta.

De todas estas curiosidades, la mas llamativas, son para mi las MACROS, quizas por eso tanto interes...pero no es el unico, tengo ganas de preguntar de todo, pero a menudo, siento que abuso de este medio y espero que alguien pregunte por mi...

Bueno, justamente eso me resultó extraño pero me parece perfecto que te intereses.

Como no tengo un organigrama de estudios, me aparecen cosas nuevas todos los dias, y en lugar de estudiarlas con algun criterio u orden, las incorporo tipo "MORE INPUT - del famoso NUMBER FIVE" (la pelicula !!! te acordas)...

Jaja ¡cómo no!

Es asi que encontre la MACRO que inicio este hilo (hasta esto de escribir "hilo", "post", "topico", me resulta nuevo...), ya que mi sistema de aprendisaje es la lectura y la interpretacion...lo cual puede resultar peligroso, sino se coteja con alguien, que sepa...Fijate lo que me esta pasando con los conceptos de posiciones de memoria y valor de carga, sobre los registros !!!

Si necesitas aclarar conceptos sobre eso decime, que no hay problema.

En fin, seguire de cerca cualquier aporte que este FORO pueda hacerme, y seguire aprendiendo hasta donde me resulte posible...Sin extenderme mas, mira lo que encontre en la pagina de MIKE !!!

Here is a good, generic Delay Macro that does not change "w" or the STATUS Flag. Note that it assumes that the "DlayCount" variable is equal to zero upon code entry.

DlayMacro Macro Cycles          ;  Delay Macro for Edges
 variable i, TCycles, Value, TFlag
TCycles = Cycles
Value = 1 << 7
i = 7
TFlag = 0
 if (TCycles > 5)
 while (i >= 0)
 if ((TFlag == 0) && ((Value * 3) <= TCycles))
  bsf    DlayCount, i
TFlag = 1
TCycles = TCycles - (Value * 3)
 else
 if ((TFlag != 0) && (((Value * 3) + 1) <= TCycles))
  bsf    DlayCount, i
TCycles = TCycles - ((Value * 3) + 1)
 endif
 endif
Value = Value >> 1
i = i - 1
 endw
 if (TCycles > 3)
 Error "Delay Cycles too Large for Macro"
 endif
  decfsz  DlayCount, f
   goto   $ - 1
 endif
 while (TCycles > 1)
  goto   $ + 1
TCycles = TCycles - 2
 endw
 if (TCycles == 1)
  nop            ;  Delay the Last Cycle
 endif
 endm

Parece una "joyita", pero hay que desentrañarla...incluye WHILE...

Bueno, esta que pasás es un poco más rebuscada que la otra, pero son similares. En realidad se complejiza porque la rutina no afecta ni el STATUS ni siquiera el registro W.

Asi a la pasada, un tip: ¿por qué aparece tanto "el número 3" en la MACRO? ¿Será porque...
  decfsz  DlayCount, f
   goto   $ - 1

es un bucle que por cada pasada demora 3 instrucciones de ejecución?

Veo una instrucción en especial a la que quiero que prestes atención:

bsf    DlayCount, i

Ojo con esto..."no todo lo que brilla es oro"
Ojalá pudiese yo meter eso asi nomás al uC y que funcione como desearía...

Reseña histórica: Cuando comencé con el asm recuerdo que necesitaba hacer justamente eso:

necesitaba poner a 1 un determinado bit de un registro en particular.

El problema era que el número de bit que debía poner a 1 no era siempre el mísmo, entonces...Podría haber hecho la fácil y haber hecho 8 casos para los posibles 8 bits de un registro(despilfarro de memoria FLASH a lo cual me opongo por completo).

Pero un día dije:
¿Y por qué demonios no pongo directamente "bsf MiRegistro,i" y que "i" contenga el valor del número de bit que quiero setear?

Algo así por ejemplo:

i EQU 0x20

movlw .3
movwf i
bsf MiRegistro,i

La emoción duró poco. El MPASM no me lo permitía. Me decía que el el valor debía estar comprendido entre 0 y 7.
Obviamente se estaba refiriendo a lo que estaba en el lugar del "i".
¿Pero qué demonios!? Si a "i" la cargué con valor 3 y 0<3<7!!!  ...entonces ¿qué pasa?

Lo que pasa es justamente, que al MPASM no le interesa el valor que tenga esa posición de memoria a la que apunta "i". Sino que le interesa sólamente el "i" y su valor declarado(en este caso, es la posición de memoria a la que se refiere)
Es decir que el MPASM traduce:

bsf MiRegistro,i

a:

bsf MiRegistro,0x20

Entonces era lógico que sucediera el error.

Bueno, entonces el problema era cómo hacer para que me lo tomara como una variable realmente.

Resumiendo: la respuesta es que no se puede hacer así de fácil.
Para hacer un algoritmo que setee un determinado bit de un registro, el algoritmo es muy distinto y poco más complejo.

Esa macro que exponés hace todo ese embrollo de setear los bits para no modificar el valor del acumulador(W).



Entonces, aca va la tarea que te dejo para que hagas:

Realizá(en la menor cantidad de líneas posibles, mejor) una subrutina que setee un bit determinado de un registro.

Ejemplo:

MiReg EQU 0x20
...
...

movf   NumeroBit,W      'NumeroBit contiene un valor entre 0 y 7(el numero de bit a setear del registro MiReg)
call   SETEARBIT          'A este momento, W contiene el numero de bit a setear.


SETEARBIT 'esta es la subrutina que quiero que setee el numero de bit X del registro MiReg.
...
...
...
RETURN

Porque, te parece que los estudiantes del ASM, no usan las MACROS o no le prestan la debida atencion, como decis ???

Sinceramente no lo sé.
Probablemente sea porque muchos no se dedican a estudiar el MPASM. Simplemente se limitan a estudiar el datasheet del uC que usan.

PD1: Actualmente trabajo como tecnico en electromedicina, me especializo en sistemas tomograficos (dignostico por imagenes, en sistemas SPECT, o planares...adquisicion por emision gamma...la famosa camara gamma que lo dejo verde al pobre "HULK"...cualquier curiosidad que tengas al respecto, tocame timbre...)

Gracias ;) te voy a tener en cuenta.
PD2: Bruno, recien estoy viendo tu explicacion del WHILE, gracias no la habia visto, se me paso de largo...la escribiste el dia 29/03/07...al mediodia, casi...perdoname, no me di cuenta, por eso te preguntaba sobre algun ejemplo...ahora la reviso y veo si saco algo en limpio...de todos modos, siempre entro a este ALMACEN DEL ASM y veo este hilo, en particular...GRACIAS !!! :-/

Jeje no hay problema. Se vé que ya te están agarrando los primeros mareos provocados por el assembler.

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 fartet

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 145
Re: Sera ASM ???
« Respuesta #27 en: 01 de Abril de 2007, 07:19:00 »
Interesante ejercicio, voy a intentar sacarlo.

Recién se me ocurrió una idea muy piola, tal vez me ponga y haga un librito de bolsillo sobre asm, como para tenerlo a mano cuando uno se está iniciando en ASM en este apasionante mundo de los PICs.

Y que no falten los capitúlos correspondientas al MPASM :-/ :-/ :-/ :-/

Desconectado Resistencio

  • PIC12
  • **
  • Mensajes: 82
Re: Sera ASM ???
« Respuesta #28 en: 01 de Abril de 2007, 20:09:00 »
Esto lo hice usando solo ASM (no "raro")...como quise simularlo y lo unico que pude bajar fue el PIC SIMULATOR IDE, esta preparado para la simulacion...por eso hay valores precargados...

MIREG     EQU  0x20
AUXA     EQU  0x21

   ORG     0x00
   BSF     STATUS,RP0
   MOVLW   0xFF      ;configuro PORTA con *11111*
   MOVWF   TRISA
   MOVLW   0x00      ;configuro PORTB todos *00000000*
   MOVWF   TRISB
   BCF     STATUS,RP0
   CLRF    PORTA
   CLRF    PORTB
   CLRF   AUXA
   MOVLW   0x01
   MOVWF   MIREG
   MOVWF   FSR

A   BTFSS   PORTA,02            ;arranca al apretar este boton (para el simulador)
     GOTO    A

     CALL    SETBIT
     MOVFW   MIREG
     MOVWF   PORTB               ;lo quise ver en el PORTB (en el simulador)
   MOVLW   0x01
   MOVWF   MIREG               
   INCF   AUXA                  ;aca deberia escribirse el Nº de BIT a setear
   MOVFW   AUXA                  ;lo hago automatico para el simulador
   MOVWF   FSR
     GOTO    A

SETBIT  BCF       STATUS,C
   RLF    MIREG
   DECFSZ    FSR
   GOTO    $-2
   RETURN

END

Estan precargados en 0X01 para comenzar, y despues automaticamente incrementa un contador, para no estar apretando a cada rato el boton que puse para que arranque...Esto es algo absolutamente conceptual, en el simulador anda (la primera vuelta esta condicionada por el valor de carga, asi que arranca prendiendome el PORTB,01) luego sigue bien...

Digo conceptual, porque la idea que se me ocurrio, era que se rote MIREG tantas veces como posicion de BIT quiera setear...En este caso, habra que escribir el Nº del BIT en el W y llevarlo al FSR (que parece un reg. que puede usarse para cualquier cosa, ademas de ser el clasico puntero del INDF)...

Bueno, seguire pensando otros metodos, para mejorarlo (seguro tiene errores, NO lo tomen como valido !!!)...

SALUDOS !!!

_____________________________
"Justo a mi me toco ser Yo" QUINO


Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Sera ASM ???
« Respuesta #29 en: 02 de Abril de 2007, 00:03:03 »
Hola Resistencio. Me parece que comprendiste mal mi idea.

La idea era hacer un algoritmo que setee un bit determinado de MiReg.
Ej:

MiReg vale al momento: b'10001111'

y necesito un algoritmo tal que yo pueda setear el bit deseado de ese registro, pero SIN MODIFICAR EL RESTO DE SUS BITS.

Entonces, deberia poder decir, por ej:

movlw .6
call SeteaBit

y la subrutina SeteaBit deberia setear el bit 6 de MiReg, quedando entonces MiReg = b'11001111'

¿Se entendió?

Tu subrutina rota el registro MiReg, e inyecta ceros por la derecha. Entonces estas destruyendo los bits restantes del registro MiReg, cosa que no deberia suceder.
Igualmente tu funcion cambiando la variable a rotar y agregando una IOR haría lo pedido.

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.