TODOPIC

Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: macedo en 19 de Marzo de 2012, 12:51:59

Título: Expresión matemática
Publicado por: macedo en 19 de Marzo de 2012, 12:51:59
Hola necesito hacer una ecuación y micod. es así:

   movlw    (ASCIICode - 0x20)*0X0c

donde ASCII contiene el valor de un carácter a buscar en una tabla, pero el compilador me tira un error, que tengo que hacer?, separo la primer secuencia y luego lo multiplico o estoy formulando mal?, ademas quisiera si me dan una mano ya que en un punto esta formula tiene tres dígitos.
Saludos
Título: Re: Expresión matemática
Publicado por: mtristan en 19 de Marzo de 2012, 13:46:42
.


Esa expresión podría aceptarla el compilador únicamente si ASCIICode es una constante ya declarada con un valor determinado. Sino vas a tener que desglosar la operación y hacer primero la resta, después la multiplicación. Seguramente en este foro ya hay publicados varios algoritmos de multiplicación, tal vez encuentres el que te sirva.

Saludos.

Título: Re: Expresión matemática
Publicado por: macedo en 19 de Marzo de 2012, 14:43:28
Hola, el ASCCII es un registro que se carga con W, entonces tengo que hacerlo separado.
Gracias
Título: Re: Expresión matemática
Publicado por: tapi8 en 19 de Marzo de 2012, 14:45:30
Has visto estas, en el mensaje 13 hay varias rutinas matematicas.

http://www.todopic.com.ar/foros/index.php?topic=23812.0
Título: Re: Expresión matemática
Publicado por: macedo en 22 de Marzo de 2012, 16:03:06
Hola le expresion ,
   movlw    (ASCIICode - 0x20)*0X0c

quedaría así:


   movlw      0x20
   SUBWF      ASCIICode,F
   MOVLW      0X0C
   MULWF      ASCIICode

donde el resultado estaría en:
PRODH:PRODL

Esa es mi pregunta para ver si lo pude resolver bien.
Saludos
Título: Re: Expresión matemática
Publicado por: macedo en 26 de Marzo de 2012, 14:22:37
Hola, esa expresion no funciona deberia quedar asi:
Código: [Seleccionar]
    movlw      0x20
    SUBWF      ASCIICode,W             ; Resto al valor ASCII el valor 0x20
    MULLW      0X0C                    ; y lo multiplico 0X0C * W -> PRODH:PRODL
                                       ; obteniendo asi en PRODH:PRODL la direccion de mi caracter
                                       ; a mostrar.
    MOVF    PRODL,W
    ADDWF   TBLPTRL,F                ; Sumo para formar la direccion del caracter

    btfsc STATUS,C               ; Si hubo un acarreo incremento.
incf TBLPTRH,F

    MOVF    PRODH,W                    ; Sumo para formar la direccion del caracter
    ADDWF   TBLPTRH,F                  ; Ya tengo la direccion de mi caracter.


Con esto puedo llamar a una tabla guardar el carácter en ASCIICode y cargar el valor verdadero en mi otra tabla para poder mostrarlo.

les paso la direccion donde esta el cod. entero: http://www.todopic.com.ar/foros/index.php?topic=37913.0
Esto funciona a la perfección.