Buen dia amigos me acerco a este foro con una duda. En base a ejemplos hice este programa para un PIC16F877A
DEFINE LCD_DREG PORTD 'define el puerto a usar para el LCD
DEFINE LCD_DBIT 4 'define el uso de solo 4 bits de direccion 7-6-5-4
DEFINE LCD_RSREG PORTD'UTILIZAR EL REGISTRO DE CONTROL/DATOS EN EL PUERTO D
DEFINE LCD_RSBIT 2 'Define cual pin sera el pin R/s del display
DEFINE LCD_EREG PORTD 'UTILIZAR EL ENABLE EN EL PUERTO D
DEFINE LCD_EBIT 3 'Define Pin del puerto para el Enable del LCD
DEFINE LCD_BITS 4
DEFINE LCD_LINES 4 'Define numero de lineas del Display
Hora VAR byte
Minuto var byte
DiaMes var Byte
Mes var byte
Ano var byte
SYMBOL sda=PORTC.5
SYMBOL scl=PORTC.4
LOOP
I2CREAD sda, scl,$D0,1,[mINUTO]
I2CREAD sda, scl,$D0,2,[hORA]
I2CREAD sda, scl,$D0,4,[dIAMES]
I2CREAD sda, scl,$D0,5,[mES]
I2CREAD sda, scl,$D0,6,[aNO]
PAUSE 100
MINUTO=((MINUTO>>4)*10+(MINUTO & $0F))
hora=((MINUTO>>4)*10+(MINUTO & $0F))
diames=((diames>>4)*10+(diames & $0F))
Mes=((Mes>>4)*10+(Mes & $0F))
ano=((ano>>4)*10+(ano & $0F))
pause 50
LCDOUT $fe, 1,hora/10+48,hora//10,":",minuto/10+48,minuto//10+48," ",diames/10+48,diames//10+48,"/",mes/10+48,mes//10+48,"/",ano/10+48,ano//10+48
GOTO LOOP
Al probarlo en proteus en el display solo se ve 00:00 00/00/00
Pero en fisico, en la protoboard funciona bien. Mi duda es sobre las funciones siguientes:
MINUTO=((MINUTO>>4)*10+(MINUTO & $0F))
Se que los dos simbolos de mayor que, sirven para desplazar en este caso 4 Bits a la derecha, y el & es un AND pero la verdad no entiendo el porque de operar el valor leido en Minutos de esta forma.
Luego en la visualizacion en el LCD:
LCDOUT $fe, 1,hora/10+48,hora//10,":",minuto/10+48,minuto//10+48," ",diames/10+48,diames//10+48,"/",mes/10+48,mes//10+48,"/",ano/10+48,ano//10+48
porque hace esto hora/10+48 y luego hora//10 , en que formato quedan las variables despues de: hora=((MINUTO>>4)*10+(MINUTO & $0F)) porque no usar la forma
DEC o HEX o BIN en estos casos para mandar el valor al LCD ????
Gracias