TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: lovando 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
-
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 +.
-
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
-
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
----------------------