SoloCodigo

Programación Específica => Microcontroladores => Mensaje iniciado por: RJC en Domingo 18 de Junio de 2006, 09:14

Título: Necesito Multiplicar Un Registro De 2 Bytes
Publicado por: RJC en Domingo 18 de Junio de 2006, 09:14
Necesito multiplicar ADRESH y ADRESL (en realidad solo 10 bites) de este registro, por una constante. alguien sabe com lo puedo hacer?
Título: Re: Necesito Multiplicar Un Registro De 2 Bytes
Publicado por: Huguen_aus_Tirol en Domingo 18 de Junio de 2006, 13:44
Hola!
Que micro usas? La familia 18F permite la multiplicación por hardware...
Asembler o C?
Cuál es la constante a multiplicar?

En la página de Microchip encontrarás varias notas de aplicación (AN) matemáticas, puedes buscar la que más te convenga...

De todas maneras responde y vemos que se hace.

Saludos
Título: Re: Necesito Multiplicar Un Registro De 2 Bytes
Publicado por: RJC en Domingo 18 de Junio de 2006, 17:26
Hola, estoy usando pic16f873 y programo en assembler. y estuve leyendo los AN de microchip, pero la verdad es no no entendi mucho.. ojala que puedas ayudarme.. gracias
Título: Re: Necesito Multiplicar Un Registro De 2 Bytes
Publicado por: Toph en Lunes 19 de Junio de 2006, 00:51
Citar
Necesito multiplicar ADRESH y ADRESL (en realidad solo 10 bites) de este registro, por una constante. alguien sabe com lo puedo hacer?

 :huh: como sabes la multiplicacion es una suma abreviada, en tu caso quieres multiplicar 10 bits con una constante, o sea que debes sumar el registro el numero de veces de la constante.
voy a buscar una rutina que tengo que hace esto exactamente para posteartela  :comp:



saludos  :hola:
Título: Re: Necesito Multiplicar Un Registro De 2 Bytes
Publicado por: RJC en Martes 20 de Junio de 2006, 19:25
el numero que quiero multiplicar es 0.196 (extraño??) la verdad es k si se puede hacer, un amigo lo hizo pero no lo puedo ubicar ( pk ya esta en su tesis) el me dio una pagina dnde se genera automaticamente la rutina con soo ponerle la cte, pero la probe y no me funciona, es esta, por si les srive http://www.golovchenko.org/cgi-bin/constdivmul (http://www.golovchenko.org/cgi-bin/constdivmul)

el codigo k genera es este

; binaro = binaro * 0.196
; Temp = TEMP
; binaro size = 8 bits
; Error = 0.5 %
; Bytes order = little endian
; Round = no

; ALGORITHM:
; Clear accumulator
; Add input / 8 to accumulator
; Add input / 16 to accumulator
; Add input / 128 to accumulator
; Move accumulator to result
;
; Approximated constant: 0.195312, Error: 0.350765 %

;     Input: binaro0, 8 bits
;    Output: binaro0, 6 bits
; Code size: 15 instructions

   cblock
   binaro0
   endc

;copy accumulator to temporary
   movf   binaro0, w


;shift accumulator right 3 times
   clrc
   rrf   binaro0, f
   clrc
   rrf   binaro0, f
   clrc
   rrf   binaro0, f

;add temporary to accumulator
   addwf   binaro0, f

;shift accumulator right 1 times
   rrf   binaro0, f

;add temporary to accumulator
   addwf   binaro0, f

;shift accumulator right 3 times
   rrf   binaro0, f
   clrc
   rrf   binaro0, f
   clrc
   rrf   binaro0, f


lo prbe con el mplab, y no veo en ninguna parte el resultado de la multiplicacion (le cargo 11111111 al binario0 y deberia dar aprox 200 (en binario por supuesto) y no lo veo (le pongo k lo deje en w) si pueden lo prueban y me dicen ok?  gracias
Título: Re: Necesito Multiplicar Un Registro De 2 Bytes
Publicado por: Huguen_aus_Tirol en Martes 20 de Junio de 2006, 19:50
No se cuanta precición necesitas, pero fijate que tu constante es 0.196, por 10 es 1.96. Podemos decir que es 2, y si rotamos un registro una posición a la izquierda, lo estamos multiplicando por 2 ;)
En una de esas puedes hacer así, y tienes tu resultado (multiplicado por 10). Todo depende de la exactitud que necesites.
Tal vez puedas compensar tu error luego, por rangos, por ejemplo...
Lo más simple y rápido es progamarlo en C...

Espero haber ayudado, nos cuentas!

Saludos
Título: Re: Necesito Multiplicar Un Registro De 2 Bytes
Publicado por: RJC en Martes 20 de Junio de 2006, 20:36
gracias, la rutina k me entrega la pagina estaba bien, fue un error mio, estaba viendo el resultado en otro registr (cosas que pasan) de todas maneras les sirve a todos pk la paina que hace la multiplicacion esta bine buena