TODOPIC

Microcontroladores PIC => Almacén del Assembler => Mensaje iniciado por: carlyvalente en 24 de Septiembre de 2004, 01:26:00

Título: como reflejar un byte? (efecto espejo)
Publicado por: carlyvalente en 24 de Septiembre de 2004, 01:26:00
Existe alguna instruccion o rutina para conseguir reflejar un byte?
O sea: 01101111 se convierta en 11110110
que lo que estaba en bit7 vaya al 0, lo del 0 al 7 y asi sucesivamente con el resto de los bits.
Título: RE: como reflejar un byte? (efecto espejo)
Publicado por: MarquesSalsero en 24 de Septiembre de 2004, 06:13:00
Aqui me voy a lanzar a la piscina ya que con los pic no he trabajado casi nada en ensamblador, pero en otros procesadores que no tienen el comando para hacerlo directamente se hace de la siguiente manera

for contador = 0 to 7
Var_origen RLF
Var destino RRF
next contador

De esta manera los bits que salen por la izquierda de una variable entran en la otra por la izquierda y una vez hecho esto ocho veces has cambiado de orden los ocho bits

Título: RE: como reflejar un byte? (efecto espejo)
Publicado por: oshow en 24 de Septiembre de 2004, 13:03:00
Uy, uy, uy yo también tengo el ensamblador algo oxidado....pero creo que con los pic existe la instruccion swapf, que invierte los nibbles de un byte de un registro.

En el datasheet tiene que salir...

Un saludo...
Título: RE: como reflejar un byte? (efecto espejo)
Publicado por: Carlete71 en 24 de Septiembre de 2004, 17:12:00

Es correcto, la instrucción SWAPF f,d Intercambia los 4 bits de más peso por los 4 bits de menos peso.

Saludos
Título: RE: como reflejar un byte? (efecto espejo)
Publicado por: MarquesSalsero en 25 de Septiembre de 2004, 03:50:00
Ya, pero el colega lo que quiere es un espejo total ¿NO?

A ver ELENA donde estás... done está la reina del ensamblador?
Título: RE: como reflejar un byte? (efecto espejo)
Publicado por: oshow en 25 de Septiembre de 2004, 05:23:00
Vaya, pues ahora toy perdido, no se entoces a que se refiere con efecto espejo, pensé que sólo quería intercambiar los nibbles de un byte.

Un saludo.
Título: RE: como reflejar un byte? (efecto espejo)
Publicado por: Carlete71 en 25 de Septiembre de 2004, 06:40:00
Si Marques, yo tampoco entiendo a que te refieres con Espejo total

El amigo carlyvalente lo que quiere hacer es que:

01101111 se convierta en 11110110  Para esto con un SWAPF f,d es suficiente.

No se si a parte de eso quiera hacer otra cosa

A menos de como en el espejo se invierte la data.... Pero en este caso no habría diferencia para el ejemplo que puso el compañero carlyvalente, pero si lo habría con este:

(0101 1111) Se convertiría haciendo el efecto espejo en: (1111 1010)

Es eso a lo que te refieres Marqués?

Saludos,
Título: RE: como reflejar un byte? (efecto espejo)
Publicado por: Carlete71 en 25 de Septiembre de 2004, 08:35:00
Aquí hice una rutinita para hacer el espejo de un byte. Tal vez no es la más eficiente pero funciona.

Codigo:
   clrf   var2

   movlw   b"01010000"  ; Aquí pones el número a hacerle el espejo
   movwf   var1
veo7   btfsc   var1,7  ; Aquí comienza la rutina de intercambiar los bits
   bsf   var2,0
veo6   btfsc   var1,6
   bsf   var2,1
veo5   btfsc   var1,5
   bsf   var2,2
veo4   btfsc   var1,4
   bsf   var2,3
veo3   btfsc   var1,3
   bsf   var2,4
veo2   btfsc   var1,2
   bsf   var2,5
veo1   btfsc   var1,1
   bsf   var2,6
veo0   btfsc   var1,0
   bsf   var2,7
   movf   var2,0
   movwf   portb  ; Finalmente este es el Byte espejo que es 00001010
         
   
Título: RE: como reflejar un byte? (efecto espejo)
Publicado por: oshow en 25 de Septiembre de 2004, 10:37:00
Ok,ok, ya me dí cuenta de lo del efecto espejo, tienes razón Carlete, el ejemplo que puso nuestro amigo no es el más adecuado....

Me he colado, perdon...

Un saludo.
Título: RE: como reflejar un byte? (efecto espejo)
Publicado por: MarquesSalsero en 26 de Septiembre de 2004, 05:58:00
Lo cierto es que el amigo no eligió el mejor numero binario como ejemplo, pero leyendo su descripción, decia que quería enviar el bit 7 al 0 y lo del 0 al 7 y asi sucesivamente.

Yo con esto entiendo que lo que desea es:

bit 7 a 0
bit 6 a 1
bit 5 a 2
bit 4 a 3
bit 3 a 4
bit 2 a 5
bit 1 a 6
bit 0 a 7

¿No Carlyvalente?
Título: RE: como reflejar un byte? (efecto espejo)
Publicado por: Carlete71 en 26 de Septiembre de 2004, 08:45:00

Marques yo creo que es así como dices:

bit 7 a 0
bit 6 a 1
bit 5 a 2
bit 4 a 3
bit 3 a 4
bit 2 a 5
bit 1 a 6
bit 0 a 7

De hecho eso es lo que hace la rutina que coloqué. Aunque no se para que puede necesitar esto, me gustaría saber la utilidad que le dará.

Saludos,
Título: RE: como reflejar un byte? (efecto espejo)
Publicado por: carlyvalente en 27 de Septiembre de 2004, 00:39:00
Chas gracias a todos los que han respondido y disculpas por la mi demora para postear este (fin de semana sin internet).

Si, efectivamente. El bit se intercambiaría así:

0 <->7 (el estado del bit 0 por el estado del bit 7)
1<->6
2<->5
3<->4

El uso que le doy es este: Necesito enviar el MSB (bit mas significativo bit 7) al principio de una transmision UART. Como ya sabeis la UART solo transmite LSB (el bit 0 primero).

Ya lo he logrado simulando la UART por software con el rs232low.asm y así puedo enviar MSB, incluso lo he modificado para enviar sincronismo (UART sincrónica) en una palabra de 16bits. Pero me gustaría lograr mayor velocidad de transmisión (solo llego a los 38k baud por soft).

Una consulta mas: He probado el puerto SPI (que es lo mas acorde a lo que yo quiero) pero no logro hacer que envie 2 bytes encadenados con su respectivo sincronismo ya que al parecer el registro SSPBUF es simple y se corta entre byte y byte, estoy en lo correcto o hay alguna manera de lograrlo?

Una vez mas muchas gracias a todos por sus respuestas.
 
Título: RE: como reflejar un byte? (efecto espejo)
Publicado por: MGLSOFT en 28 de Septiembre de 2004, 19:22:00
Mal pedido !!!
Elenita no puede ponerse delante de un espejo !!!!

Los rompe !!!!

Título: RE: como reflejar un byte? (efecto espejo)
Publicado por: Carlete71 en 28 de Septiembre de 2004, 19:29:00
Deja que Elena vea tu mensaje MGLSOFT , creo que te vas a acordar de ella

Aquí va  arder Troya  

Saludos,
Título: RE: como reflejar un byte? (efecto espejo)
Publicado por: BrunoF en 14 de Mayo de 2005, 06:27:00
Bueno, una manera es jugar con el Carry, y creo que es la mas adecuada, si bien creo que es mas lenta que la de ELENA. si no he calculado mal, esta funcion consume 58 ciclos de ejecucion(58x4 de oscilacion) Sonrisa
Pues sí, la manera mas "linda" de espejarlo es haciendo:
;///////////////////
;Funcion espejar: recibe: W = byte a reflejar devuelve W= byte reflejado
;//////////////////

espejar:       movwf    byteareflejar
                    movlw     0x09
                    movwf     contador
proxbit        decfsz      contador, F
                   goto         salida
           
                   rlf            byteareflejar,F
                   rrf            bytereflejado,F
                   goto        proxbit
salida          movf       bytereflejado,W
                   return