• Domingo 22 de Diciembre de 2024, 13:54

Autor Tema:  Rutinas De Multiplicacion 16 Bits Para Pic 16f84  (Leído 8935 veces)

hecktor_vm

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Rutinas De Multiplicacion 16 Bits Para Pic 16f84
« en: Miércoles 14 de Abril de 2004, 18:04 »
0
necesito una rutina de multiplicacion de 16 bits para el Pic 16f84
si necsitan documentacion o rutinas solo envien un email

© Jonathan ©

  • Moderador
  • ******
  • Mensajes: 1671
  • Nacionalidad: ar
    • Ver Perfil
    • http://www.einstec.com.ar
Re: Rutinas De Multiplicacion 16 Bits Para Pic 16f84
« Respuesta #1 en: Viernes 16 de Abril de 2004, 00:59 »
0
De intentar hacerla ni ahi, verdad?
EINSTEC Tecnología «La única fuente del conocimiento es la experiencia.»

«Lo importante es no dejar de hacerse preguntas.»

jgpeiro

  • Miembro activo
  • **
  • Mensajes: 67
    • Ver Perfil
Re: Rutinas De Multiplicacion 16 Bits Para Pic 16f84
« Respuesta #2 en: Viernes 16 de Abril de 2004, 14:39 »
0
Este codigo lo he generado en 1 minuto con el niple. Te permite escoger algunas opciones, pero yo he puesto lo mas estandar, que todos los valores de entrada y salida de la rutina esten en registor de la RAM....bueno, espero t sirva esta rutina.


;------------------------------------------------------------
; Código assembler generado por Niple.
; Nombre del Proyecto: tdbprototipo
; Autor: Desarrollo Niple.
; Fecha: 14/04/2004
; PIC: 16F84
; Velocidad de reloj: 4 Mhz
; Descripcion: crear las rutinas basicas para un 16f84a para comprobar el hard. del prototipo del tdb
;------------------------------------------------------------


 LIST    P=PIC16F84


;------------------------------------------------------------
;                  Declaración de Registros
;------------------------------------------------------------
w                     equ  00h
status                equ  0x03
porta                 equ  0x05
_np_temp1             equ  0x0c
regalto               equ  0x0d   multiplicando bajo
regbajo               equ  0x0e   multiplicando alto
rmultiplicadoralto    equ  0x0f   multiplicador alto
multiplicadorbajo     equ  0x10   multiplicador bajo
res3                  equ  0x11   resultado
res2                  equ  0x12   resultado
res1                  equ  0x13   resultado
res0                  equ  0x14   resultado
_np_temp2             equ  0x15
_np_temp3             equ  0x16
_np_temp4             equ  0x17
_np_temp5             equ  0x18
_np_temp6             equ  0x19
_np_temp7             equ  0x1a
_np_temp8             equ  0x1b
_np_temp9             equ  0x1c


;------------------------------------------------------------
;                  Declaración de Bits
;------------------------------------------------------------
c               equ  0   ;carry / borrow bit
rp0             equ  5   ;registrer banck select bit


;------------------------------------------------------------
;                        Inicio
;------------------------------------------------------------

reset   org 0
   goto paso2


;------------------------------------------------------------
;                      programa principal
;------------------------------------------------------------
paso2
   ;multiplicar a 16 bits (res0,res1,res2,res3 = regalto,regbajo * rmultiplicadoralto,multiplicadorbajo)
   bcf status,rp0         ;cambiar a pagina 0
   movf regbajo,w
   movwf _np_temp2
   movf regalto,w
   movwf _np_temp1
   movf multiplicadorbajo,w
   movwf _np_temp2
   movf rmultiplicadoralto,w
   movwf _np_temp1
   call multiplicacion_16
   movf _np_temp3,w
   movwf res0
   movf _np_temp4,w
   movwf res1
   movf _np_temp5,w
   movwf res2
   movf _np_temp6,w
   movwf res3
   "aqui el resto del programaaaaa""


;------------------------------------------------------------
;                  Declaración de Subrutinas
;------------------------------------------------------------

multiplicacion_16
   ;calculo matematico multiplicacion a 16 bits
   movlw 0x10
   bcf status,rp0         ;cambiar a pagina 0
   movwf _np_temp9
   movf _np_temp4,w
   movwf _np_temp8
   movf _np_temp3,w
   movwf _np_temp7
   clrf _np_temp4
   clrf _np_temp3
multiplicacion_16_1
   rrf _np_temp8,f
   rrf _np_temp7,f
   btfss status,c
   goto multiplicacion_16_2
   movf _np_temp1,w
   addwf _np_temp3,f
   btfsc status,c
   incf _np_temp4,f
   movf _np_temp2,w
   addwf _np_temp4,f
multiplicacion_16_2
   rrf _np_temp4,f
   rrf _np_temp3,f
   rrf _np_temp6,f
   rrf _np_temp5,f
   decfsz _np_temp9,1
   goto multiplicacion_16_1
   return


 End
¿que falta despues de morir que hubiese anter de nacer?, ¿es posible la reencarnacion?

hecktor_vm

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Re: Rutinas De Multiplicacion 16 Bits Para Pic 16f84
« Respuesta #3 en: Viernes 16 de Abril de 2004, 16:07 »
0
gracias por la rutina m sera muy util.
esta es la rutina de division de 8 bits tal vez t pueda servir

DIVV8
   MOVF  TEMPY8,F
   BTFSC STATUS,Z  
   RETURN
   CLRF  RESULT8
   MOVLW  1
   MOVWF  IDX16
SHIFT_IT8
   BCF   STATUS,C
   RLF   IDX16,F
   BCF   STATUS,C
   RLF   TEMPY8,F
   BTFSS  TEMPY8,7
   GOTO  SHIFT_IT8
DIVU8LOOP
   MOVF  TEMPY8,W
   SUBWF  TEMPX8
   BTFSC   STATUS,C
   GOTO   COUNT8
   ADDWF   TEMPX8
   GOTO  FINAL8
COUNT8
   MOVF  IDX16,W
   ADDWF  RESULT8
FINAL8
   BCF   STATUS,C
   RRF   TEMPY8,F
   BCF   STATUS,C
   RRF   IDX16,F
   BTFSS   STATUS,C
   GOTO   DIVU8LOOP
   RETURN