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

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

Desconectado todopic

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3495
    • http://www.todopicelectronica.com.ar
Re: Sera ASM ???
« Respuesta #30 en: 02 de Abril de 2007, 00:51:08 »
 :-/ :-/ :-/

GRANDIOSO Bruno!, una explicación magnifica!  :-/

Un gran abrazo!

Norberto
Firmat - Santa Fe - Argentina

www.TodoPic.net

Solo se tiran piedras, al arbol que tiene frutos...

Desconectado Resistencio

  • PIC12
  • **
  • Mensajes: 82
Re: Sera ASM ???
« Respuesta #31 en: 02 de Abril de 2007, 04:04:27 »
Hola BRUNO, aca intento algo como lo que pedis...hay un poco de codigo al "pepe", porque lo quise simular...

MIREG     EQU  0x20
AUXA     EQU  0x21
AUXB     EQU  0x22

   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
   BSF   STATUS,C         ;para que vaya rotando en AUXA

   MOVLW   0x88                 ;cargue MIREG con 10001000
   MOVWF   MIREG              ;a efectos de verlo en el simulador
   MOVWF   PORTB

A   BTFSS   PORTA,02        ;esto es para el simulador se puede sacar
     GOTO    A

   CLRF   AUXA

   MOVLW   0x07                 ;aca se escribe el BIT a setear, en este caso el 7
   MOVWF   AUXB
   INCF   AUXB                ;le sumo uno al valor expresado entonces 7 es el MSB (y 0 el LSB)

   CALL    SETBIT

   MOVFW   AUXA
   IORWF   MIREG                ;lo carga sin alterar (eso creo, simule algunos valores y dio bien)
   MOVFW   MIREG
   MOVWF   PORTB                ;esto es para simulador (se puede sacar)

   BTFSC   PORTA,02         ;para simulador se puede sacar
   GOTO   $-1
     GOTO    A

SETBIT   RLF         AUXA
   DECFSZ      AUXB
   GOTO   $-2
   RETURN

END

Fijate BRUNO y decime que te parece...tambien se podia hacer con TABLAS con los valores precargados...

Mi pregunta (a pesar de que comentas en ROJO, que se puede agregar IF, THEN, etc en cualquier parte del programa) es: si esas instrucciones, necesariamente tienen que ser parte de una macro, o se las puede llamar con CALL (es decir como subrutinas)...no se si lo aclaraste, puntualmente en algun lado...la verdad es que repase todo y no lo vi...por eso puntualizo la pregunta...

PD: me parece que en algun lugar debo limpiar el CARRY...tendria que ver como hacer para que si quiero modificar el bit 0, modifique el LSB del AUXA, quizas si le sumara 1, cuando entra en el CALL...(paciencia, ya veo como...es una de las primeras cosas que hago...)

SALUDOS...

______________________________
"Justo a mi me toco ser YO" QUINO"
« Última modificación: 02 de Abril de 2007, 04:15:56 por Resistencio »

Desconectado fartet

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 145
Re: Sera ASM ???
« Respuesta #32 en: 02 de Abril de 2007, 14:11:02 »
Así a lo bruto me sale una subrutina de unas 32 líneas con código ASM además de necesitar de un fichero auxiliar de la RAM
Supongo que habrán opciones más eficientes.

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Sera ASM ???
« Respuesta #33 en: 02 de Abril de 2007, 15:51:38 »
:-/ :-/ :-/

GRANDIOSO Bruno!, una explicación magnifica!  :-/

Un gran abrazo!

Norberto

Gracias Norberto ;)

Hola BRUNO, aca intento algo como lo que pedis...hay un poco de codigo al "pepe", porque lo quise simular...

MIREG     EQU  0x20
AUXA     EQU  0x21
AUXB     EQU  0x22

   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
   BSF   STATUS,C         ;para que vaya rotando en AUXA

   MOVLW   0x88                 ;cargue MIREG con 10001000
   MOVWF   MIREG              ;a efectos de verlo en el simulador
   MOVWF   PORTB

A   BTFSS   PORTA,02        ;esto es para el simulador se puede sacar
     GOTO    A

   CLRF   AUXA

   MOVLW   0x07                 ;aca se escribe el BIT a setear, en este caso el 7
   MOVWF   AUXB
   INCF   AUXB                ;le sumo uno al valor expresado entonces 7 es el MSB (y 0 el LSB)

   CALL    SETBIT

   MOVFW   AUXA
   IORWF   MIREG                ;lo carga sin alterar (eso creo, simule algunos valores y dio bien)
   MOVFW   MIREG
   MOVWF   PORTB                ;esto es para simulador (se puede sacar)

   BTFSC   PORTA,02         ;para simulador se puede sacar
   GOTO   $-1
     GOTO    A

SETBIT   RLF         AUXA
   DECFSZ      AUXB
   GOTO   $-2
   RETURN

END

Fijate BRUNO y decime que te parece...tambien se podia hacer con TABLAS con los valores precargados...

Te felicito. Parece funcionar correctamente.
Sin embargo, me gustaría hacer un par de comentarios:

La parte que está "peligrosa" es la del CARRY. Si entre que lo seteás y haces las rotaciones aparece alguna  instrucción que afecte al CARRY, tu algoritmo no va a funcionar como es debido.
Para asegurar que la subrutina funcione correctamente, podria ser algo asi:

   LIST P=16F877A
    INCLUDE P16F877A.INC

   ERRORLEVEL -302

MIREG     EQU  0x20
AUXA     EQU  0x21
AUXB     EQU  0x22

   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
   BSF      STATUS,C         ;para que vaya rotando en AUXA

   ;MOVLW   0x88                 ;cargue MIREG con 10001000
   CLRF   MIREG              ;a efectos de verlo en el simulador
   ;MOVWF   PORTB

A   ;BTFSS   PORTA,02        ;esto es para el simulador se puede sacar
     ;GOTO    A

   MOVLW   0x01                 ;aca se escribe el BIT a setear, en este caso el 1
   CALL    SETBIT

   MOVFW   AUXA
   IORWF   MIREG,F              ;lo carga sin alterar (eso creo, simule algunos valores y dio bien)
   MOVFW   MIREG
   MOVWF   PORTB                ;esto es para simulador (se puede sacar)

   BTFSC   PORTA,02         ;para simulador se puede sacar
   GOTO   $-1
     GOTO    A

SETBIT
   MOVWF   AUXB
   MOVLW   0x01
   MOVWF   AUXA
LOOPROT
   MOVF   AUXB,F
   BTFSC   STATUS,Z
   RETURN   

   BCF     STATUS,C      ;asegurar que ingresen ceros por la derecha.
   RLF       AUXA,F
   DECF    AUXB,F
   GOTO   LOOPROT

   END

Mi pregunta (a pesar de que comentas en ROJO, que se puede agregar IF, THEN, etc en cualquier parte del programa) es: si esas instrucciones, necesariamente tienen que ser parte de una macro, o se las puede llamar con CALL (es decir como subrutinas)...no se si lo aclaraste, puntualmente en algun lado...la verdad es que repase todo y no lo vi...por eso puntualizo la pregunta...

Call es una instrucción perteneciente al PIC. NO AL MPASM. Es directa. Por lo tanto, no podés llamar a un IF.
La Call llama a una posición de memoria(ROM).
Ejemplos:


#define LimpiarW .1
...
     call MiFuncion

MiFuncion
     if LimpiarW == 0
        movlw 0xFF
     else
        clrw
     endif
return



Otro ejemplo: está permitido, pero derrocha memoria FLASH(macro):

#define Valor .1
...
     MiFuncion

MiFuncion MACRO
     if Valor != 0
        movlw Valor
     else
        clrw
     endif
     ENDM

Eso no es correcto:

      call MiFuncion

MiFuncion MACRO
  ...
  ...
  endm


Así a lo bruto me sale una subrutina de unas 32 líneas con código ASM además de necesitar de un fichero auxiliar de la RAM
Supongo que habrán opciones más eficientes.

Sería bueno que lo postearas farfet, así lo analizamos, ¿te parece?

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 #34 en: 02 de Abril de 2007, 17:53:37 »
Se entendio BRUNO...mira asi !!!

A   BTFSS   PORTA,02   ;boton para el simulador
     GOTO    A
   CLRF   AUXA

   MOVLW   0x04    ;BIT a setear
   MOVWF   AUXB
   INCF   AUXB
   BSF   STATUS,C   ;ensucia CARRY

   CALL    SETBIT
   BCF   STATUS,C   ;limpia CARRY
   MOVFW   AUXA
   IORWF   MIREG
   MOVFW   MIREG
   MOVWF   PORTB
   
     GOTO    A

SETBIT  RLF        AUXA
   DECFSZ        AUXB
   GOTO   $-2
   RETURN
END

Voy a ver si me sale con las MACROS que incluyen IF y WHILE...SALUDOS

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

Desconectado fartet

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 145
Re: Sera ASM ???
« Respuesta #35 en: 02 de Abril de 2007, 20:05:18 »
Ahora si lo pongo, estaba esperando que contestara el amigo Resistencio, aqui estoy de mirón y que aproveche este hilo para aprender cosas no me autoriza a chafarlo.
Ahi va, pero seguro que es mejorable
-----------------------------------------------------------------------------------------------------------
MiReg   EQU   0x20
Auxil   EQU   0x21   ;mi registro auxiliar
............
............
   movf   NuBit,1   ;valor entre 0x07 y 0x00 inclusives      
   call   SETEARBIT
............
............
SETEARBIT
   addlw   0xF8   ;Pasa a 0xFF (para 0x07) y 0xf8 (para 0x00)
   movwf   Auxil   ;Copio valor incrementado a Auxili
   incfsc   Auxil,1   ;+1 y pregunto si rebasa 0xFF-->0x00
   goto   BIT6   ;si no hay rebase ir a probar BIT6
   bsf   MiReg,7   ;si hay rebase Nubit es 7
   goto    SALIR   ;misión cumplida, ir a SALIR
BIT6
   incfsc   Auxil,1   ;ya es +2, pregunto si rebasa 0xFF-->0x00
   goto   BIT5   ;si no hay rebase ir a probar BIT5
   bsf   MiReg,6   ;si hay rebase Nubit es 6
   goto    SALIR   ;misión cumplida, ir a SALIR
BIT5
   incfsc   Auxil,1   ;ya es +3, pregunto si rebasa 0xFF-->0x00
   goto   BIT4   ;si no hay rebase ir a probar BIT4
   bsf   MiReg,5   ;si hay rebase Nubit es 5
   goto    SALIR   ;misión cumplida, ir a SALIR
BIT4   
   incfsc   Auxil,1   ;ya es +4, pregunto si rebasa 0xFF-->0x00
   goto   BIT3   ;si no hay rebase ir a probar BIT3
   bsf   MiReg,4   ;si hay rebase Nubit es 4
   goto    SALIR   ;misión cumplida, ir a SALIR
BIT3
   incfsc   Auxil,1   ;ya es +5, pregunto si rebasa 0xFF-->0x00
   goto   BIT2   ;si no hay rebase ir a probar BIT2
   bsf   MiReg,3   ;si hay rebase Nubit es 3
   goto    SALIR   ;misión cumplida, ir a SALIR
BIT2
   incfsc   Auxil,1   ;ya es +6, pregunto si rebasa 0xFF-->0x00
   goto   BIT6   ;si no hay rebase ir a probar BIT1
   bsf   MiReg,2   ;si hay rebase Nubit es 2
   goto    SALIR   ;misión cumplida, ir a SALIR
BIT1
   incfsc   Auxil,1   ;ya es +7, pregunto si rebasa 0xFF-->0x00
   goto   BIT0   ;si no hay rebase NuBit es 0
   bsf   MiReg,1   ;si hay rebase Nubit es 1
   goto    SALIR   ;misión cumplida, ir a SALIR
BIT0
   bsf   MiReg,0   ;es ya la única posibilidad
SALIR
   return   
------------------------------------------------------------------------------------------------------------
Una subrutina con 32 líneas de código ASM y un fichrero auxiliar

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Sera ASM ???
« Respuesta #36 en: 02 de Abril de 2007, 22:04:55 »
Se entendio BRUNO...mira asi !!!

A   BTFSS   PORTA,02   ;boton para el simulador
     GOTO    A
   CLRF   AUXA

   MOVLW   0x04    ;BIT a setear
   MOVWF   AUXB
   INCF   AUXB
   BSF   STATUS,C   ;ensucia CARRY

   CALL    SETBIT
   BCF   STATUS,C   ;limpia CARRY
   MOVFW   AUXA
   IORWF   MIREG
   MOVFW   MIREG
   MOVWF   PORTB
   
     GOTO    A

SETBIT  RLF        AUXA
   DECFSZ        AUXB
   GOTO   $-2
   RETURN
END

Ahí está perfect! ;)

Ahora si lo pongo, estaba esperando que contestara el amigo Resistencio, aqui estoy de mirón y que aproveche este hilo para aprender cosas no me autoriza a chafarlo.
Ahi va, pero seguro que es mejorable
-----------------------------------------------------------------------------------------------------------
MiReg   EQU   0x20
Auxil   EQU   0x21   ;mi registro auxiliar
............
............
   movf   NuBit,1   ;valor entre 0x07 y 0x00 inclusives      
   call   SETEARBIT
............
............
SETEARBIT
   addlw   0xF8   ;Pasa a 0xFF (para 0x07) y 0xf8 (para 0x00)
   movwf   Auxil   ;Copio valor incrementado a Auxili
   incfsc   Auxil,1   ;+1 y pregunto si rebasa 0xFF-->0x00
   goto   BIT6   ;si no hay rebase ir a probar BIT6
   bsf   MiReg,7   ;si hay rebase Nubit es 7
   goto    SALIR   ;misión cumplida, ir a SALIR
BIT6
   incfsc   Auxil,1   ;ya es +2, pregunto si rebasa 0xFF-->0x00
   goto   BIT5   ;si no hay rebase ir a probar BIT5
   bsf   MiReg,6   ;si hay rebase Nubit es 6
   goto    SALIR   ;misión cumplida, ir a SALIR
BIT5
   incfsc   Auxil,1   ;ya es +3, pregunto si rebasa 0xFF-->0x00
   goto   BIT4   ;si no hay rebase ir a probar BIT4
   bsf   MiReg,5   ;si hay rebase Nubit es 5
   goto    SALIR   ;misión cumplida, ir a SALIR
BIT4   
   incfsc   Auxil,1   ;ya es +4, pregunto si rebasa 0xFF-->0x00
   goto   BIT3   ;si no hay rebase ir a probar BIT3
   bsf   MiReg,4   ;si hay rebase Nubit es 4
   goto    SALIR   ;misión cumplida, ir a SALIR
BIT3
   incfsc   Auxil,1   ;ya es +5, pregunto si rebasa 0xFF-->0x00
   goto   BIT2   ;si no hay rebase ir a probar BIT2
   bsf   MiReg,3   ;si hay rebase Nubit es 3
   goto    SALIR   ;misión cumplida, ir a SALIR
BIT2
   incfsc   Auxil,1   ;ya es +6, pregunto si rebasa 0xFF-->0x00
   goto   BIT6   ;si no hay rebase ir a probar BIT1
   bsf   MiReg,2   ;si hay rebase Nubit es 2
   goto    SALIR   ;misión cumplida, ir a SALIR
BIT1
   incfsc   Auxil,1   ;ya es +7, pregunto si rebasa 0xFF-->0x00
   goto   BIT0   ;si no hay rebase NuBit es 0
   bsf   MiReg,1   ;si hay rebase Nubit es 1
   goto    SALIR   ;misión cumplida, ir a SALIR
BIT0
   bsf   MiReg,0   ;es ya la única posibilidad
SALIR
   return   
------------------------------------------------------------------------------------------------------------
Una subrutina con 32 líneas de código ASM y un fichrero auxiliar

La logica del este programa también está bien. Es perfectamente posible. Tal vez podríamos reducir la cantidad de lineas...
¿Y si hacemos una tablita? :D
Ej:
      movlw  0x06      ;indicar bit 6 a setear:
      pagesel MiTabla
      call MiTabla


MiTabla
     andlw 0x07 ;forzar a que el valor recibido en W sea < 8(evitemos errores)
     movwf AUX     
     addwf  AUX,W    ;AUX = W*2
     addwf  PCL,F
     bsf      MiReg,0
     return
     bsf      MiReg,1
     return
     bsf      MiReg,2
     return
     bsf      MiReg,3
     return
     bsf      MiReg,4
     return
     bsf      MiReg,5
     return
     bsf      MiReg,6
     return
     bsf      MiReg,7
     return

Suerte!!! Y sigan programando.
« Última modificación: 02 de Abril de 2007, 22:12:23 por BrunoF »
"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 #37 en: 02 de Abril de 2007, 22:07:15 »
Hola FARTET, esta es la prueba que se puede hacer de varias maneras...no la revise todavia, voy a tratar de simularlo...

Estas seguro de " incfsc " ??? yo tengo " incfsz "...no se si es igual...esperemos a BRUNO, que "pilotea con una mano" esto del ASM... :D

SALUDOS !!!

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

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Sera ASM ???
« Respuesta #38 en: 02 de Abril de 2007, 22:11:22 »
Estas seguro de " incfsc " ??? yo tengo " incfsz "...no se si es igual...esperemos a BRUNO, que "pilotea con una mano" esto del ASM... :D

Sisi. Efectivamente es incfsz. ;)

Saludoss!!!
"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 #39 en: 02 de Abril de 2007, 22:35:55 »
FARTET, hasta ahi esta aclarado lo del INCFSZ...me parece que ademas, deberias entrar al CALL, con el W limpio (CLRW)...Que te parece ???

SALUDOS...

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

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Sera ASM ???
« Respuesta #40 en: 02 de Abril de 2007, 23:13:20 »
Bueno, hay un errorcito pero no debe entrar con W limpio Resistencio.

movf   NuBit,1   ;valor entre 0x07 y 0x00 inclusives     

deberia ser:

movf   NuBit,0   ;valor entre 0x07 y 0x00 inclusives     

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 #41 en: 03 de Abril de 2007, 00:03:31 »
Claro BRUNO, ya me parecia que algo estaba raro...me confunde el tema de que los destinos de los valores de registro son, para 0=W y 1=F...

y hablando de ese tema, alguna vez escribistes por ahi, algo que en principio me confundio un poco...cuando crei tnerlo aclarado, me surgieron las mismas dudas...tiene que ver con las EQU...Yo sostenia que las EQU, servian solo para elegir alguna posicion donde declarar un REGISTO...asi, si escribia MIREG EQU 0X20, el registro MIREG ocupaba esa posicion de RAM...

Sin embargo, para mi sorpresa, en otras ocasiones he leido cosas como:

RP0   EQU   5
RP1   EQU   6
IRP   EQU   7
Z   EQU   2
C   EQU   0

Donde parece que aqui las EQU, especifican la posicion del BIT en el registro !!!  :shock: :shock: :shock:

Pero en algunos casos se repiten estan declaraciones, y en el mismo encabezado encuentro redundancias (O NO), como:

PORTA equ 5 (fijate que arriba ya se habia usado para el RP0 equ 5)  :shock:

Parece que unas son EQUATES de REGISTROS y otras de BITS o algo asi...

Incluso vi cosas como:

RELOJ equ 4000000

En fin, curiosidades, por ahora...

Estoy muy interesado en la posibilidad de medir el tiempo de los pulsos de entradas...lei algo relacionado con un tacometro, donde se usa el TIMER, con lo cual se me ocurrio que podria a partir de un solo puerto de entrada, tener varios botones  conectados a el, que hagan cosas diferentes...cada uno tendria una constante de tiempo diferente, para poder ser identificados...lo que no se es cual deberia ser la precision de esos pulsos o con que precision mide el micro esos tiempos...

Otra idea que vi es la de medir diferentes niveles de tension, medibles luego de ser convertidos por los AD de un micro...pero me interesa la primera opcion...tengo que ver con cuidado, si entre tanto info que hay en este FORO, hay algo concreto, para por lo menos, rescatar los comceptos primarios...

En estos momentos, y producto solamente de mi ignorancia, se me ocurre preguntar, cuales son los principios ordenados, minimos, necesarios y que protocolos se deben encausar, para lograr interactuar con un programador (o analista de sistemas)...se me ocurre que en alguna medida, la labor de un ingeniero electronico (o idoneo en electronica), es una disciplina que dista bastante de la de un analista, que maneja conceptos mas abstractos...Por otro lado, no creo que sea una condicion, necesaria para los analistas, el conocer de electronica y a la inversa...por lo cual estas actividades son a mi entender, absolutamente interdiscipliniarias...

Por ejemplo: Hace varios años que trabajo haciendo electromedicina, y conozco a la perfeccion el funcionamiento de sistemas de ECG o EEG...pero no tengo la mas minima pista de como hacer un software, que pueda presentarse en PC, para estos sistemas...Es decir, que tiene que conocer como minimo un programador, para hacer un soft a medida ???

Quien decide la interface de entrada, sistema de comunicacion, formato de pantalla, etc, etc, etc...

Ahora con el recurso de los micros, estoy decidido a reformar algunos dispositivos de electromedicina, que ya estan bastante pasados de moda...a los fines de los sistemas puramente electronicos, dificilmente necesite recursos, demasiados complicados de instrumentar...pero por si asi fuera, seguire aprendiendo sobre MICROS !!!

SALUDOS...y espero que las cosas mejoren pronto en Santa Fe...

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







Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Sera ASM ???
« Respuesta #42 en: 03 de Abril de 2007, 01:26:33 »

Claro BRUNO, ya me parecia que algo estaba raro...me confunde el tema de que los destinos de los valores de registro son, para 0=W y 1=F...

y hablando de ese tema, alguna vez escribistes por ahi, algo que en principio me confundio un poco...cuando crei tnerlo aclarado, me surgieron las mismas dudas...tiene que ver con las EQU...Yo sostenia que las EQU, servian solo para elegir alguna posicion donde declarar un REGISTO...asi, si escribia MIREG EQU 0X20, el registro MIREG ocupaba esa posicion de RAM...

Si pones MIREG EQU 0x20, lo unico que estas haciendo es decirle al MPASM:
"mirá, cada vez que aparezca escrito por en mi programa MIREG, reemplazalo por 0x20"
Entonces, en ese caso funcionaría como un puntero a la posición de memoria 0x20.

Sin embargo, para mi sorpresa, en otras ocasiones he leido cosas como:

RP0   EQU   5
RP1   EQU   6
IRP   EQU   7
Z   EQU   2
C   EQU   0

Donde parece que aqui las EQU, especifican la posicion del BIT en el registro !!!  :shock: :shock: :shock:


Nuevamente, lo unico que hace el MPASM ahi es remplazar el nombre definido por su valor.

Decir bsf STATUS,C
Se traduce a bsf 0x03,0

NO ES NECESARIO DECLARAR LOS BITS Y REGISTROS ESPECIALES DE UN PIC SI INCLUIS EL ARCHIVO .INC DEL uC A UTILIZAR: Ej:

 INCLUDE P16F877A.INC

(abri el archivo P16F877A.INC con el bloc de notas y fijate lo que tiene dentro asi comprendes mejor)

Pero en algunos casos se repiten estan declaraciones, y en el mismo encabezado encuentro redundancias (O NO), como:

PORTA equ 5 (fijate que arriba ya se habia usado para el RP0 equ 5)  :shock:

Es dos formas distintas de apuntar al mísmo NUMERO.

Es como decir x = y = 5, sólo que algunas veces es más fácil(y adecuado) usar el nombre x y otras el y según el caso.
Entonces, vos podrias perfectamente poner:

 bsf   PORTA,PORTA

o lo que sería lo mísmo:

 bsf   RP0,RP0

Ambos serían traducidos a:

 bsf   0x05,0x05

¿Pero sería muy poco legible el código, no? Por eso mejor ponerle distintos nombres al mísmo número y usar el nombre adecuado según corresponda

Incluso vi cosas como:

RELOJ equ 4000000

En fin, curiosidades, por ahora...

Más de lo mísmo. No importa que exceda el valor .255. Se utilizará para realizar probablemente cálculos en el programa(probablemente en alguna MACRO).

Estoy muy interesado en la posibilidad de medir el tiempo de los pulsos de entradas...lei algo relacionado con un tacometro, donde se usa el TIMER, con lo cual se me ocurrio que podria a partir de un solo puerto de entrada, tener varios botones  conectados a el, que hagan cosas diferentes...cada uno tendria una constante de tiempo diferente, para poder ser identificados...lo que no se es cual deberia ser la precision de esos pulsos o con que precision mide el micro esos tiempos...

Depende de varias cosas. La precisión depende de muchas cosas: el modelo de PIC, la velocidad del cristal, las ppm del mísmo, el Timer del pic a utilizar,etc...
Si me preguntás cuál es el valor mínimo a 4mhz que puede, por ejemplo, contar el Timer0 del 16F84A no puedo decirte con precisión, pero no creo que supere los 10us o 20us.
El máximo puede arreglarse y "estirarse" usando registros auxiliares.
Las fórmulas para calcular el tiempo de desbordamiento de los Timers están en el foro muchísimas veces repetidas y dependen de cuál Timer pensés usar.

Otra idea que vi es la de medir diferentes niveles de tension, medibles luego de ser convertidos por los AD de un micro...pero me interesa la primera opcion...tengo que ver con cuidado, si entre tanto info que hay en este FORO, hay algo concreto, para por lo menos, rescatar los comceptos primarios...

Es posible. Tal vez para un producto REALMENTE SERIO debas recurrir a un ADC externo, ya que el del PIC puede dejar mucho que desear si se necesitan muchas conversiones o bien mucha precisión.

En estos momentos, y producto solamente de mi ignorancia, se me ocurre preguntar, cuales son los principios ordenados, minimos, necesarios y que protocolos se deben encausar, para lograr interactuar con un programador (o analista de sistemas)...se me ocurre que en alguna medida, la labor de un ingeniero electronico (o idoneo en electronica), es una disciplina que dista bastante de la de un analista, que maneja conceptos mas abstractos...Por otro lado, no creo que sea una condicion, necesaria para los analistas, el conocer de electronica y a la inversa...por lo cual estas actividades son a mi entender, absolutamente interdiscipliniarias...

Bueno, básicamente debés definir qué puerto/s de la computadora deseas utilizar(los más populares son: paralelo, serie y USB)y su configuración. Luego el protocolo de comunicación a utilizar, que puede ser a medida o bien respetando protocolos existentes. Y luego el resto, ya entrando en mayor detalle.

Por ejemplo: Hace varios años que trabajo haciendo electromedicina, y conozco a la perfeccion el funcionamiento de sistemas de ECG o EEG...pero no tengo la mas minima pista de como hacer un software, que pueda presentarse en PC, para estos sistemas...Es decir, que tiene que conocer como minimo un programador, para hacer un soft a medida ???

Quien decide la interface de entrada, sistema de comunicacion, formato de pantalla, etc, etc, etc...

Mínimamente seguramente debas aprende algún lenguaje de programación para PC.
Te recomiendo el VB6 para que te resulte fácil poder aprender a programar rápido para PC.
 
Generalmente lo decide el empleador. Si ambos(el electronico y el programador) son empleados de un 3ero o socios, deberán ponerse de acuerdo entre ellos. Aunque seguramente el programador esté más capacitado y familiarizado con qué cosa conviene hacer en cada caso y cómo debería ser visualizada en pantalla.

Ahora con el recurso de los micros, estoy decidido a reformar algunos dispositivos de electromedicina, que ya estan bastante pasados de moda...a los fines de los sistemas puramente electronicos, dificilmente necesite recursos, demasiados complicados de instrumentar...pero por si asi fuera, seguire aprendiendo sobre MICROS !!!

Si pensás utilizarlo en electromedicina, me parece bárbaro que te hayas inclinado hacia el ASM. Si un programa está bien hecho en ASM, es la mayor seguridad que podés obtener con un PIC.
"Mayor seguridad que podés obtener con un PIC" digo porque si bien los PICs son estables, la electromedicina es un área crítica en cuanto a errores. Tus dispositivos deberían ser MUY estables, incluso con ruidos cercanos o cualquier sorpresita que pueda ocurrir en el medio ambiente. Es un área muy delicada.

SALUDOS...y espero que las cosas mejoren pronto en Santa Fe...

Esperemos que si...

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 #43 en: 03 de Abril de 2007, 04:21:13 »
Gracias BRUNO, siempre aportando algo util... (sos profesor o maestro, en algun establecimiento ??? )

Conozco muy poco de lenguajes, pero por lo que refiere la mayoria en terminos de control, el ASM es mejor...el BASIC, me parece lo que sigue en este orden...de lo demas no hablo porque no conozco...imagino que a mayor nivel de lenguaje (lo que en realidad significa alejarse mas del MICRO), se resolveran algoritmos mas complejos con menos instrucciones del lenguaje usado...Pero para mi es mucho mas directo y controlable el ASM...mi pregunta anterior, estaba fundada en este razonamiento, me parece que los que eligen lenguajes de mas nivel, estan mas abstraidos de la electronica y por ello mas alejados de la funcionabilidad del hadware (usando el mismo criterio, que expongo mas arriba)...esto lo digo a riesgo de equivocarme, y sin intencion de polemizar al respecto, ni de herir suceptibilidades u ofender a nadie...es solo una apreciacion personal...

Asi como digo que la mayoria refiere el ASM, como ideal para manejar parametros electronicos con mejor precision...lei comentarios de que los MOTOROLA son micros mas estables o inmunes a EMI o ruido electricos o artefactos (artificios)...por lo cual de estar esto confirmado de alguna manera, me serviran mejor para algunas aplicaciones donde se necesitan filtrar ciertos espureos...personalmente creo que es un mito...dada la avanzada de MICROCHIP con estos "bichitos", no me parece que sea real tal afirmacion, y que solo se trata de aliados a esos micros, por cuestiones de escuela o lo que sea...es decir sin mayores fundamentos...

Me gustaria conocer tu opinion al respecto, si es que tenes alguna formada...o la de algun forista que haya tenido oportunidad de trabajar con ellos...

Hoy escuche atento a las noticias, que se estan encausando los desbordes, pero que en varios sitios, hara falta el uso de bombas de aspiracion, por saturacion de los suelos (y porque no hay nada desbordado, es pura saturacion)...encima los gobiernos de turno, se afanaron las bombas...tercermundistas a full...esperemos el milagro de la solidaridad entre hermanos, que es lo que realmente, nunca falla... :?

Un ABRAZO !!!

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

Desconectado fartet

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 145
Re: Sera ASM ???
« Respuesta #44 en: 03 de Abril de 2007, 08:26:12 »
Todo aclarado. Por cierto me ha gusta la solución usando tablas. :-/ :-/ :-/


 

anything