# Corrimiento de bits en Proton IDE



## hopeanirak (Oct 6, 2011)

Me encantaria que alguien me ayudara con el siguiente problema, necesito hacer un corrimiento de bits y el programa que uso en proton, tengo 2 registros Rojo1 y Rojo2 el primero tiene 8 bits y el segundo solo dos pero el segundo es el mas significativo, lo que hago es correr dos bits a la derecha de Rojo1 y para que al correr los dos bits de Rojo2 se forme un solo byte el cual guardo en el registro R, pero al hacer esto en la lcd me muestra un valor de 0cuando me deberia dar el valor de 11110011 .Me gustaria saber que estoy haciendo mal.

Les dejo mi programa y gracias de antemano

Device 16F877A     

  XTAL 4
Dim ROJO1 As Byte
Dim ROJO2 As Byte                       
Dim R As Byte

DelayMS 500

LCD_DTPIN = PORTB.4
LCD_RSPIN = PORTB.3
LCD_ENPIN = PORTB.2
LCD_INTERFACE = 4
LCD_LINES = 2
LCD_TYPE = 0

Cls

LCD: 
Print At 1, 5,"Corrimiento de Bits"
DelayMS 2000
Cls

'CORRIMIENTO DE BITS A LA DERECHA
TMR:
ROJO1 = %11001100
R = ROJO1 >> 2

Print At 1, 5, "R1=", BIN ROJO1
DelayMS 5000
Print At 2, 5, "R=", BIN R
DelayMS 5000
Cls

ROJO2 = %00000011
R = ROJO2 >> 2  'DATA RED_HI

Cls
Print At 1, 5, "R2=", BIN ROJO2
DelayMS 5000
Print At 2, 5, "R=", BIN R
DelayMS 5000
Cls
GoTo TMR 

End


----------



## krit (Oct 9, 2011)

Hola, 
1.-No entiendo de proton IDE, nunca he trabajado con otra cosa que no sea ensamblador.
2.-Por lo que explicas si ROJO1= "abcdefgh" y ROJO2="ijklmnop" pretendes que R sea igual a "opabcdef". ¿Es asi?

Veamos tu programa



'CORRIMIENTO DE BITS A LA DERECHA
TMR:
ROJO1 = %11001100.....................ROJO1= 11001100
R = ROJO1 >> 2...........................R=00110011

Print At 1, 5, "R1=", BIN ROJO1
DelayMS 5000
Print At 2, 5, "R=", BIN R
DelayMS 5000
Cls

ROJO2 = %00000011...............................ROJO2=00000011
R = ROJO2 >> 2 'DATA RED_HI..................R=000000000
La ultima instruccion te ha machacado el valor anterior de R porque ha cogido el valor de ROJO2 despues de desplazarlo dos bits a la derecha,por eso te sale 0. Quizas deberias usar instrucciones de rotacion en vez de desplazamiento, si es que el lenguaje tiene esas instrucciones.
Sino tendras que desplazar ROJO2 6 bits a la izquierda y hacer un OR con ROJO1 (que ya esta desplazado)
Si quitas la anterior instruccion y pones 
R= ROJO2<<6
R=R OR ROJO1
obtendras lo que deseas.
Repito que no entiendo proton IDE pero por por logica las intrucciones tendrian que ser algo parecido a esto.


Cls
Print At 1, 5, "R2=", BIN ROJO2
DelayMS 5000
Print At 2, 5, "R=", BIN R
DelayMS 5000
Cls
GoTo TMR

Espero haber ayudado.


----------



## hopeanirak (Oct 10, 2011)

Exacto eso mismo es lo que quiero hacer, que R sea igual a "opabcdef", entonces lo que necesitaria como mencionas seria hacer una rotación de bits y no un corrimiento de bits?

Gracias por tu ayuda


----------

