Autor Tema: Duda sobre definicion de registros en PIC16F84  (Leído 2347 veces)

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

Desconectado lovando

  • PIC16
  • ***
  • Mensajes: 193
Duda sobre definicion de registros en PIC16F84
« en: 07 de Junio de 2004, 14:05:00 »
Hola

Estoy tratanto de averiguar como funciona la sgte instruccion que encontre en internet

1.- clrf CC+0
     clrf CC+1
     clrf CC+2



2.- movfw AA+1
     addwf CC+2,f


La duda es que en el mplab no he podido definir estos registros y no se como operan esas instrucciones usando el signo +.

La referencia web es esta: http://www.piclist.com/techref/microchip/math/mul/index.htm

revisar codigo de 16bits by 8 bits


Gracias





Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
RE: Duda sobre definicion de registros en PIC16F84
« Respuesta #1 en: 09 de Junio de 2004, 19:47:00 »
Pues yo entiendo que el que escribió ese código pretendió llamar CC a toda la palabra de 24 bits que va a ser el resultado.

CC+0 significa el byte menos significativo (LSB)
CC+1 significa el byte de "mediano" significado
CC+2 significa el byte más significativo (MSB)

Los 3 bytes forman los 24 bits del resultado.

Yo cambiaría el nombre del registro así

CC+0 -> resultado0
CC+1 -> resultado1
CC+2 -> resultado2

Igualmente para AA+0 y AA+1; AA es una palabra de 16 bits a ser multiplicada

AA+0 -> numamult0
AA+1 -> numamult1

Y BB es el multiplicador de solo 1 Byte

BB -> multiplicador

Al parecer sólo pusieron los signos + para que se entienda el valor significativo de cada byte. Sólo renombra las variables sin los signos de +.

Desconectado lovando

  • PIC16
  • ***
  • Mensajes: 193
RE: Duda sobre definicion de registros en PIC16F84
« Respuesta #2 en: 09 de Junio de 2004, 20:05:00 »
Hola migsantiago

La verdad que lo que cometas ya lo se...

Lo que me intriga es saber como  defines los bytes "mediano" y el "MSB"..

Puedo definir facilmente el CC, pero como sabe el ensamblador si debe definir los CC+1 y CC+2.....Entiendo que se refiere a los registros que le siguen al CC, pero cuales???

no puedo definir por ejmplo

cblock
CC +2  => eso no funciona


tampoco podria hacer lo sgte

cblock
CC
CC
CC


En todo caso, basta con definir los registros con otros nombres, y se alivia la cosa, pero es que en el manual del mpasm no encuentro como interpretar y definir esos registros...

.....Espero no molestar....Gracias

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
RE: Duda sobre definicion de registros en PIC16F84
« Respuesta #3 en: 11 de Junio de 2004, 18:23:00 »
Creo que ahora sí tengo la respuesta, no he probado si funciona, pero MPLAB sí lo compila sin errores. Lo único que hice fue agregar paréntesis a cada variable.

----------------

; mult. 16x8 bits = 24 bits
LIST P=16f84a
include "p16f84a.inc"


AA EQU 0x10 ; multiplicado
BB EQU 0x13 ; multiplicador
CC EQU 0x14 ; resultado
bitCount EQU 0x17

      ORG 0
      goto inicio
      ORG 5

;Establece terminales e/s
inicio
   clrf   (CC+0)      ;clear result
   clrf   (CC+1)      ;
   clrf   (CC+2)      ;
   movlw   .8      
   movwf   bitCount   ;bit counter set @ number of bits in multiplier

mul_L1               ;main loop here
   rlf      (CC+2),f         ;rotate result left (*2)
   rlf      (CC+1),f         ;
   rlf      (CC+0),f         ;
   bcf      (CC+2),0         ;clear LSB of result after rotation
   btfss   BB,7         ;test msb of multipier
   goto   dontAdd         ;if bit is clear then dont add
   movfw   (AA+1)            ;Add the 16 bits of AA to product
   addwf   (CC+2),f         ;
   skpnc               ;
   incf   (CC+1),f         ;
   movfw   AA            ;
   addwf   (CC+1),f         ;
   skpnc               ;
   incf   (CC+0),f         ;
dontAdd
   rlf      BB,f         ;rotate multiplier left
   decfsz   bitCount,f      ;chk if finished all bits in multiplier
   goto   mul_L1

   end
----------------------