TODOPIC

Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: _Canito_ en 20 de Diciembre de 2004, 07:22:00

Título: RLF W,W
Publicado por: _Canito_ en 20 de Diciembre de 2004, 07:22:00
Hola a todos,

No si es un problema del simulador del MPlab o que es lo que es toy haciendo mal en el siguiente codigo:

movlw B"00000001"   ;cargar un valor en W
bcf status,c               ;limpiar el carry
rlf w,w                      ;rotar el valor en W hacia la izquierda y guardarlo en W

W deberia quedar con B"00000010" pero el resultado es W=B"00000000".

Mi duda es si "rlf w,w"  se puede implementar o no.

¿Alguien podría verificar esto y confirmarme si realmente no funciona?


Gracias.
Un saludo a todos
Jorge.
Título: RE: RLF W,W
Publicado por: Sispic en 20 de Diciembre de 2004, 08:31:00
Codigo:

Syntax: [ label ] RLF f,d


Example   RLF REG1, 0

                     Before Instruction

                     REG1 = 1110 0110
                     C = 0

                     After Instruction

                     REG1 = 1110 0110
                     W    = 1100 1100
                     C = 1




Parece ser que hay que indicarle el valor de un registro . o esto entiendo .
Título: RE: RLF W,W
Publicado por: todopic en 20 de Diciembre de 2004, 08:51:00
Hola Jorge, verifique el codigo, y efectivamente queda en cero...

tambien, pensando a W como el mismo registro escribi rlf w,f  y alli aparece "00000001" pero no rota... Llorando

yo tengo el mplab 5.70.40

tendremos que estudiar.... y no tira ningun error....
nunca rote sobre W.....

Norberto

Título: RE: RLF W,W
Publicado por: Elena2000 en 20 de Diciembre de 2004, 08:58:00
Me temo que "rlf w,w" no se puede implementar, Canito.

Como dice Sispic, hay que indicarle el valor del registro temp que quieres modificar:
RLF f,d
f : Dirección del Registro de almacenamiento inicial ( desde 00(00h) a 127(7Fh) )
d : Selección de destino ( 0 o 1 )

La operación en sí es tal que mueve el contenido que haya en el registro f un bit a la izquierda, incluyendo el bit de carry.
La selección del destino indicará dónde se almacena el nuevo valor:

si d = 0 : el resultado va a W
si d = 1 : el resultado va a f

Una cosa: esta instrucción lleva consigo un efecto flag:    el bit más significativo del registro f se cargará en C.

Espero haberte ayudado.
Título: RE: RLF W,W
Publicado por: todopic en 20 de Diciembre de 2004, 09:20:00
Sonrisa Gigante
mirando FIGURE 1-1: PIC16F84A BLOCK DIAGRAM
alli se ve que el registro de instrucciones, decode control etc, no tienen acceso directo al registro w.....
Como Manifiesta Elena y Sipic.... tendras que emplear un registro temporal.... Llorando


o crear la RLW... o una macro loco
Norberto
Título: RE: RLF W,W
Publicado por: Sispic en 20 de Diciembre de 2004, 12:10:00
El compilador no da error y se traga  ->  RLF W,W  por que  W es una definición constante y es equivalente a cero .


así :
;==========================================================
;
;       Register Definitions
;
;==========================================================

W                            EQU     H"0000"
F                            EQU     H"0001"

osea que  RLF W,W rotará el contenido de la posicion 0 y guarda en w

felices fiestas ¡

Título: RE: RLF W,W
Publicado por: _Canito_ en 20 de Diciembre de 2004, 15:06:00
Gracias a todos,

Felices Fiestas.
Jorge.