Programación Específica > Microcontroladores

 Necesito Multiplicar Un Registro De 2 Bytes

(1/2) > >>

RJC:
Necesito multiplicar ADRESH y ADRESL (en realidad solo 10 bites) de este registro, por una constante. alguien sabe com lo puedo hacer?

Huguen_aus_Tirol:
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

RJC:
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

Toph:

--- Citar --- Necesito multiplicar ADRESH y ADRESL (en realidad solo 10 bites) de este registro, por una constante. alguien sabe com lo puedo hacer?
--- Fin de la cita ---

 :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:

RJC:
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

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

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa