Autor Tema: Multiplicador en C?  (Leído 1896 veces)

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

Desconectado Artifox

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 455
    • Quadbot
Multiplicador en C?
« en: 15 de Noviembre de 2004, 18:11:00 »
Hola chicos, soy nuevo en el foro, recien estoy aprendiendo a usar el Pic C Compiler (PICC) y tengo una duda muy grande Enfurruñado : estoy usando PIC"s 18F448 y necesito trabajar con multiplicaciones y funciones matematicas y hasta donde he podido ver el compilador utiliza algoritmos para multiplicar y hacer las demas funciones matematicas implementadas en software, pero la serie 18 ya tiene incluido un multiplicador por hardware. Alguien sabe trabajar con el multiplicador en hardware en este compilador en C? o tendre que recurrir al siempre tedioso y complicado asembler?

Agradecere mucho sus comentarios.Sonrisa Gigante

Artifox.Divertido
Video Quadbot
Saludos desde mi querido Perú.
Si realmente queremos que el mundo cambie debemos empezar por nosotros mismos... ;)

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
RE: Multiplicador en C?
« Respuesta #1 en: 20 de Noviembre de 2004, 02:50:00 »
¿Has comprobado si el compilador hace uso de él?

Lo digo porque, por ejemplo, con las USART, si el PIC la tiene en su hard el compilador genera código para utilizarla, pero si le PIC no la tiene, el compilador genera código para simularla.

Desconectado manex_1987

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1127
RE: Multiplicador en C?
« Respuesta #2 en: 20 de Noviembre de 2004, 04:12:00 »
He estado mirando en el datasheet, y no es tan dificil, como para implementarlo en assembler puro.

Estos ejemplos los he cogido del data:
Codigo:


EXAMPLE 7-1: 8 x 8 UNSIGNED MULTIPLY ROUTINE

MOVF ARG1, W ;
MULWF ARG2    ;     ARG1 * ARG2 ->
                         ; PRODH:PRODL




Muy simple, el producto lo recoges de los registros PRODH y PRODL.

Codigo:

EXAMPLE 7-2: 8 x 8 SIGNED MULTIPLY ROUTINE

MOVF ARG1, W
MULWF ARG2        ; ARG1 * ARG2 ->
                             ; PRODH:PRODL
BTFSC ARG2, SB    ; Test Sign Bit
SUBWF PRODH      ; PRODH = PRODH
                             ; - ARG1
BTFSC ARG1, SB    ; Test Sign Bit
SUBWF PRODH      ; PRODH = PRODH
                             ; - ARG2



Los 16x16 son mas aparatosos, mira en el datasheet si eso.

salu2


 

anything