Hola Killer, mi interrupcion esta calculada para que se de cada 500 ms, al poner un delay de unos ms en la interrupcion no afectaria ya que esta se da cada 500 ms de todas manera lo voy a sacar. El muestreo lo hago en la interrupcion y en el while porque sino me muestra solo la decena en el display, no es logico lo se pero, pero es asi y no se la razon.
por otro lado si fijo los valores de las decenas y unidades con antelacion, el display las muestra sin parpadeos
Si afecta... totalmente, primero por que no tiene sentido alguno que tengas 500ms y muestres cada 500ms !, segundo.. el delay dentro si afecta, haciendo que funcione no a 500ms sino a 515ms + tiempo de las instrucciones, mientras estas en la interrupcion estan desactivadas las interrupciones asi que debes salir lo mas rapido posible!.
Como te decia yo tenes una interrupcion rapida, y solo calculas los valores cada 0.5s tal cual vos queres.
gracias por responder, le voy a sacar la rutina de muestreo de la interrupcion, el tema no es que se vea con parpadeo es que se apaga periodicamente el display, con el codigo que paso a continuacion solo muestra las decenas y se apaga periodicamente
Es culpa de tu interrupcion...
TempBin=ds1820_read();
AuxBin=TempBin%100;//Resto de la division por 100
Decena=AuxBin/10;
Unidad=AuxBin%10;
set_timer1(0x0BDC);//set_timer1(0x0BDC);//carga del TMR
seguro que ds1820_read() es super lento... hasta seguro que tiene un while dentro.
El calculo por la cantidad que es, creo que esto seria mas corto (habria que probarlo exactamente cual es mas rapido):
while( TempBin>100 ) TempBin-=100;
while( TempBin>10) TempBin-=10; Decena++
Unidad = TempBin
el set_timer1() iria al comienzo del codigo.
Tu problema esta en tu rutina de lectura del ds1820
Si pasas el codigo vamos a ver el error, sino ya sabes que es eso, y que debes quitarlo de ahi.