Autor Tema: como reflejar un byte? (efecto espejo)  (Leído 6259 veces)

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

Desconectado carlyvalente

  • PIC16
  • ***
  • Mensajes: 108
como reflejar un byte? (efecto espejo)
« 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.

Desconectado MarquesSalsero

  • PIC18
  • ****
  • Mensajes: 467
RE: como reflejar un byte? (efecto espejo)
« Respuesta #1 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

Hay 10 tipos de personas las que entienden binario y las que no

Desconectado oshow

  • PIC18
  • ****
  • Mensajes: 321
RE: como reflejar un byte? (efecto espejo)
« Respuesta #2 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...

Desconectado Carlete71

  • PIC18
  • ****
  • Mensajes: 433
RE: como reflejar un byte? (efecto espejo)
« Respuesta #3 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

Desconectado MarquesSalsero

  • PIC18
  • ****
  • Mensajes: 467
RE: como reflejar un byte? (efecto espejo)
« Respuesta #4 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?
Hay 10 tipos de personas las que entienden binario y las que no

Desconectado oshow

  • PIC18
  • ****
  • Mensajes: 321
RE: como reflejar un byte? (efecto espejo)
« Respuesta #5 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.

Desconectado Carlete71

  • PIC18
  • ****
  • Mensajes: 433
RE: como reflejar un byte? (efecto espejo)
« Respuesta #6 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,

Desconectado Carlete71

  • PIC18
  • ****
  • Mensajes: 433
RE: como reflejar un byte? (efecto espejo)
« Respuesta #7 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
         
   

Desconectado oshow

  • PIC18
  • ****
  • Mensajes: 321
RE: como reflejar un byte? (efecto espejo)
« Respuesta #8 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.

Desconectado MarquesSalsero

  • PIC18
  • ****
  • Mensajes: 467
RE: como reflejar un byte? (efecto espejo)
« Respuesta #9 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?
Hay 10 tipos de personas las que entienden binario y las que no

Desconectado Carlete71

  • PIC18
  • ****
  • Mensajes: 433
RE: como reflejar un byte? (efecto espejo)
« Respuesta #10 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,

Desconectado carlyvalente

  • PIC16
  • ***
  • Mensajes: 108
RE: como reflejar un byte? (efecto espejo)
« Respuesta #11 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.
 

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7912
RE: como reflejar un byte? (efecto espejo)
« Respuesta #12 en: 28 de Septiembre de 2004, 19:22:00 »
Mal pedido !!!
Elenita no puede ponerse delante de un espejo !!!!

Los rompe !!!!

Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado Carlete71

  • PIC18
  • ****
  • Mensajes: 433
RE: como reflejar un byte? (efecto espejo)
« Respuesta #13 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,

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
RE: como reflejar un byte? (efecto espejo)
« Respuesta #14 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
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.


 

anything