TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: kidpic en 14 de Julio de 2020, 18:44:19

Título: consulta
Publicado por: kidpic en 14 de Julio de 2020, 18:44:19
Encontré un programa que me sirve y estoy estudiándolo. No logro interpretar estas líneas de programación. Si me pueden dar una mano para saber que es lo que hacen les estoy muy agradecido.

message1[13]  = T_Byte1 / 10  + 48;
            message1[14]  = T_Byte1 % 10  + 48;
            message1[16]  = T_Byte2 / 10  + 48;
            message2[13] = RH_Byte1 / 10 + 48;
            message2[14] = RH_Byte1 % 10 + 48;
            message2[16] = RH_Byte2 / 10 + 48;
            message1[17] = 223;             
Título: Re:consulta
Publicado por: KILLERJC en 14 de Julio de 2020, 18:53:12
T_Byte1 / 10  + 48;
T_Byte1 % 10  + 48;

Voy a tratar de explicar esta parte, ya que lo demas es lo mismo.

Si tuvieras un numero decimal de dos cifras por ejemplo el 87

La primera instruccion divide por 10, quedando 8 solo (ya que es un entero) no tiene parte decimal, se elimina el .7, luego el 48 es lo mismo que '0' en ASCII, por lo tanto si vos tenes 8 y le sumas el '0' te queda un caracter ASCII '8'

El otro es el modulo 10 del numero, es decir si lo dividis por 10 y observas el resto del mismo, es decir en nuestro ejemplo el resto es 7, nuevamente lo convierto a ASCII sumandole '0' (o 48 que es lo mismo)
Título: Re:consulta
Publicado por: Nocturno en 15 de Julio de 2020, 06:28:41
Básicamente es una conversión de entero a string, pero qué raros los índices del string: utiliza las posiciones 13,14 y 16 pero no lo la 15. Y luego cierra en la 17 con un 223, que es un medio bloque negro.
Título: Re:consulta
Publicado por: KILLERJC en 15 de Julio de 2020, 10:08:53
Básicamente es una conversión de entero a string, pero qué raros los índices del string: utiliza las posiciones 13,14 y 16 pero no lo la 15. Y luego cierra en la 17 con un 223, que es un medio bloque negro.

Tanto la temperatura, como la humedad, tienen dos digitos enteros + coma + decimal, y ese reservado (el 15) es la coma. Seguramente tenga pre-cargado las palabras "Temperatura:" y "Humedad:" en los arrays.
Y el 223 (0xDF , 1101 1111) en algunas ROM de los LCD es el simbolo de grados.

(https://www.electronic-engineering.ch/microchip/datasheets/lcd/charset.gif)

Lo raro es que usualmente tenes 16 caracteres en la mayoria de los LCD mas baratitos, Por lo tanto deberian llegar al 15, pero bueno, cada uno programa como desea jejeje.
Título: Re:consulta
Publicado por: kidpic en 16 de Julio de 2020, 19:33:29
Muchas gracias muchachos por sus aportes.!!!
Título: Re:consulta
Publicado por: kidpic en 16 de Julio de 2020, 23:12:14
Continuando con mi interpretación de programa. Me encuentro con esta líneas.

void alarm_check(){
 if((alarm1_minute == ((minute & 0x0F) + (minute >> 4) * 10)) &&
 (alarm1_hour == ((hour & 0x0F) + (hour >> 4) * 10)) && (second == 0) && alarm1_status)
    output_high(PIN_B3);
 
}
 Entiendo que es una comparación. Para ello hace una operación and (&&).
 Lo que no entiendo es la suma(+) de la parte baja con el enmascaramiento 0F y el mismo archivo desplazado a la derecha 4 veces y despues multiplicado *10 .
 Lo compara con alarm1_status, si es verdadero la salida B3 lo pone en alto.
Muchas gracias por responder a esta pregunta
Título: Re:consulta
Publicado por: Geo en 16 de Julio de 2020, 23:31:56
Parece una conversión de BCD a decimal: https://es.wikipedia.org/wiki/Decimal_codificado_en_binario

minute y hour parecen ser BCD (números decimales codificados en binario), muy usado para representar dígitos en displays.
Título: Re:consulta
Publicado por: KILLERJC en 16 de Julio de 2020, 23:35:40
(Justo habia escrito todo esto, me gano Geo antes)
Bueno, eso que tenes ahi es una mala practica de programacion, intentar achicar todo reduciendo la legibilidad del codigo

Separemoslo
if((alarm1_minute == ((minute & 0x0F) + (minute >> 4) * 10)) &&  (alarm1_hour == ((hour & 0x0F) + (hour >> 4) * 10)) && (second == 0) && alarm1_status)


Dentro del IF tenes 3 condiciones unidos con ANDs, es decir las 3 se deben cumplir
(alarm1_minute == ((minute & 0x0F) + (minute >> 4) * 10))
(alarm1_hour == ((hour & 0x0F) + (hour >> 4) * 10))
alarm1_status

Vamos a analizar alguna...

Si el tiempo de los minutos lo tenes en BCD, es decir 4 bits por cada numero, y el minuto 24 se representa como 0x24 (observa que no es el valor decimal 24). Voy a usar este valor como ejemplo.
Entonces lo que hace esto es pasarlo de BCD a decimal

((minute & 0x0F) + (minute >> 4) * 10))

Primero saca las unidades, por eso hace la AND con 0xF, nuestro ejemplo quedaria 0x04 (4 decimal), y luego las decenas, la rota 4 veces dejando las decenas ocupando el lugar de las unidades, quedando en el ejemplo 0x02 o 2 decimal.

Pero tengo que armar el numero, por eso multiplica las decenas por 10, asi nuestro ejemplo queda en 20 y luego le suma las unidades, quedando 24.

Esto lo compara con lo guardado en minute.

Es decir.. convierte un numero expresado en BCD a un numero decimal, luego compara.
Si corresponde la hora, los minutos e imagino que el tercero es una flag de si esta activa la alarma o no, entonces activa el PIN_B3
Título: Re:consulta
Publicado por: Nocturno en 17 de Julio de 2020, 01:37:32
Básicamente es una conversión de entero a string, pero qué raros los índices del string: utiliza las posiciones 13,14 y 16 pero no lo la 15. Y luego cierra en la 17 con un 223, que es un medio bloque negro.
Ahora sí que me cuadra todo. Gracias Killer
Título: Re:consulta
Publicado por: kidpic en 17 de Julio de 2020, 23:15:47
Gracias Killer. Muy didáctica tu explicación. Geo muy bueno tu aporte. Muy agradecido !!!
Título: Re:consulta
Publicado por: kidpic en 29 de Julio de 2020, 22:27:34
Una consulta...seguramente tiene que ver con el hardware pero no le pego en la tecla.
Estoy trabajando con el pickit2 y lo que me está sucediendo es que cuando grabo el programa en el micro realiza lo que tiene que hacer pero cuando desconecto el programador la pantalla del lcd pierde toda información. Ya me había pasado un avez. Penséque era la pata del Vpp pero esta la tengo conectada a Vcc mediante una R y con un pulsador a masa para el reset.
Gracias 
Título: Re:consulta
Publicado por: kidpic en 08 de Agosto de 2020, 23:45:49
Solucionado el tema. Muchas gracias. Por si le sirve a alguien. El tema lo solucioné levantando la la pata del Vpp del programador e independizandome de la fuente de la pc. Lo alimenté con una fuente externa y todo muy bien!!! :-/
Título: Re:consulta
Publicado por: kidpic en 08 de Agosto de 2020, 23:47:20
Mi problema sigue siendo éstas matrices.
 
char tabNum[10]={'0','1','2','3','4','5','6','7','8','9'},i=0,j=0;
 
Gracias
Título: Re:consulta
Publicado por: KILLERJC en 09 de Agosto de 2020, 00:12:07
Es un array de caracteres.... Y dos variables i y j inicializadas a 0.

Es lo mismo que :

Código: C
  1. char tabNum[10]={'0','1','2','3','4','5','6','7','8','9'};
  2. char i=0;
  3. char j=0;
Título: Re:consulta
Publicado por: kidpic en 13 de Agosto de 2020, 21:39:13
Hola. Gracias. Si eso lo tengo Me podrias indicar algun link donde ver como trabaja esas lineas de programa.
 Otra consulta...

Compreun cristal de 27120 considero que son 27120000. Pedí de 20 Mhz.... a la hora de programar el fuse

use delay (clock=20000000)         //clock=20Mhz
 deberia colocar
use delay (clock=27120000)         //clock=27.120Mhz
 
Gracias!!
Título: Re:consulta
Publicado por: KILLERJC en 14 de Agosto de 2020, 08:53:52
https://www.ccsinfo.com/downloads/ccs_c_manual.pdf

Pagina 183

Si, deberias usar el  use delay (clock=27120000) para que tus delays respeten el tiempo
Título: Re:consulta
Publicado por: kidpic en 15 de Agosto de 2020, 17:42:25
Hola nuevamente
 esta configuracion pertence a un pic 16877A

#BIT Data_Pin = 0x08.0                       // Pin mapped to PORTD.0
#BIT Data_Pin_Direction = 0x88.0             // Pin direction mapped to TRISD.0
 
Cambie de pic por un 18f4520 y el sensor colgado de ese pin anterior no lo ve
  donde puedo sacar informacion acerca del pin D0 de del 18F
Debería buscarla en su datasheet pero no la encuentro o estoy interpretando mal el data
Gracias
Título: Re:consulta
Publicado por: KILLERJC en 15 de Agosto de 2020, 19:27:37
Del datasheet del PIC18F4520.. Ahí esta toda la informacion.

El mayor problema es que los PIC18 poseen 3 registros, el PORTx para leer, el TRISx para entrada/salida, y el LATx para la salida.
Distinto de los PIC16.

Y ni hablo de los nuevos que tienen vaaaaaaarios registros. Ademas si esos pines tienen para analogico/digital, tambien vas a tener algun registro, ya sea los ANSELx o ADCONx para configurarlo como digital primero.
Título: Re:consulta
Publicado por: kidpic en 16 de Agosto de 2020, 22:45:30
Gracias por tus aportes KillerJC. Muy útiles como siempre!.lo que me permite avanzar.

Otra consulta.  Necesito comparar un par de números de dos cifras  Uno de ellos lo obtengo a traves de un contador realizado de la siguiente forma:
 
char tabNum[10]={'0','1','2','3','4','5','6','7','8','9'},i=0,j=0;    //  i=unidades y j=decenas
 y los muestro en el lcd mediante

TabNum[j] y TabNum ( j decena e i unidad)  de la siguiente forma

printf(lcd_putc,"%c%c",tabNum[j],tabNum);

El otro número lo obtengo de una medición y después de hacer este  tratamiento

message1 [7]=(Temp/100)%10+48; (decenas)
message1[8]=(Temp/10)%10 + 48; (unidades)

lo muestro por lcd en un chard mediante

printf(lcd_putc, message1); 

Ambos pares se presentan perfectamente en pantalla
 
Lo que quiero hacer es compararlos y decidir
 La pregunta es : ¿Se puede hacer de la siguiente manera?

If ((message1(7)>=TabNum ) && (message1(8)>=TabNum [j]));   //( si la medicion ( message1 ) es mayor o igual que el nro (j,i)

bit_set(port_b,0);

else

bit_set(port_b,1);

Gracias por su colaboración






Título: Re:consulta
Publicado por: KILLERJC en 16 de Agosto de 2020, 23:19:28
Lo que tenes en message1 lo tenes en Temp

entonces... mejor compararlo con eso...

if (Temp >= (TabNum[j]*10 y TabNum))


Ahora TabNum solo es un puntero... No se que son TabNum ni como lo manejas. Y pieso que estas intentando comparar eso.
Título: Re:consulta
Publicado por: kidpic en 17 de Agosto de 2020, 14:47:21
Lo que sucede es TEMP tiene tres digitos y uno de ellos corresponde al decimal de la medición. Por ejemplo. TEMP es 254 y lo arreglo de tal forma que quede  25.4
Lo que quiero es comparar solo el 25. con los tabNum [j] y tabNum que salen de aquí
char tabNum[10]={'0','1','2','3','4','5','6','7','8','9'},i=0,j=0;    //  i=unidades y j=decenas

 y se incrrementan de esta manera

void asendente(void)                  //funcion cuenta ascendente

{         
            i++;                  //incremento contador para visualizar siguiente digito
            if(i>9){                     //¿se ha mostrado digito 9?
            i=0; //SI -> restaura valor indice(para mostrar digito 0)
            j++;
            if(j>9){
              J=0;
           
            }}
Debido a esta particularidad de comparar solo los enteros es que se me ocurre la comparacion de número x número
 Gracias
Título: Re:consulta
Publicado por: KILLERJC en 17 de Agosto de 2020, 15:17:17
Te vuelvo a decir

tabNum[j] -> accede al elemento j del array tabNum
tabNum  (asi solo) es el puntero al array, y no el contenido.

Si queres comparar numero a numero, entonces tenes que comparar decenas primero
- Si es mayor por ejemplo tabNum entonces ya queda decido
- Si es menor tabNum entonces tambien queda decido
- Si son iguales luego tenes que revisar las unidades.

Si son muchos ya te conviene un for y pasar los arrays

Ves que es mas complicado ?
Si tenes Temp como 254, dividilo por 10, y listo... te queda 25.


No te puedo dar codigo hasta que no definas exactamente como estan guardado los numeros.
Y usualmente, se hace todo con enteros, y unicamente para mostrar se pasa a ASCII. Ya que trabajar en ASCII es mas complejo (normalmente, hay excepciones)
Título: Re:consulta
Publicado por: kidpic en 17 de Agosto de 2020, 18:26:55
if ((message1(7)>=TabNum ) && (message1(8)>=TabNum [j]));   //( si la medicion ( message1 ) es mayor o igual que el nro (j,i)
 Gracias Killerjc. Hay un error en la expresión que escribí
 Lo correcto es así:

if ((message1(7)>=TabNum) && (message1(8)>=TabNum [j]));   //( si la medicion ( message1 ) es mayor o igual que el nro (j,i)

Aquí estoy comparando el contenido de message1 en la posiición 7 y el contenido de tabNum en la posición i

message1(7)>=TabNum

Lo que sugieres lo puedo presentar de esta manera?


if (Temp/10 >= (TabNum[j]*10 + TabNum)) y decido ....

sería comparar..... siguiendo con el ejemplo 254/10 con el contenido de j *10 + el contenido de i
 
Gracias killerjc




Título: Re:consulta
Publicado por: KILLERJC en 17 de Agosto de 2020, 18:49:23
Despues de discutir sobre que no aparece el
Código: [Seleccionar]
[i]
Es por que el foro lo saca, ya que es el código BB de la itálica. Por eso mejor ponerlo en un recuadro de código como hice arriba.

-----------------------------------------------------------------------

Código: [Seleccionar]
if ((message1(7)>=TabNum[i]) && (message1(8)>=TabNum [j]));   //( si la medicion ( message1 ) es mayor o igual que el nro (j,i)
Tampoco, porque estas pidiendo que ambos numeros sean mayor o igual, entonces si en message1 tenes 32  y en TabNum tenes 23 esto falla. Por eso te decia... primero las decenas y luego las unidades.


Código: C
  1. if (Temp/10 >= (TabNum[j]*10 + TabNum[i]))
Título: Re:consulta
Publicado por: kidpic en 18 de Agosto de 2020, 21:01:15
Hola Killerjc. Gracias por tus aportes. Se avanza y se aprende.
Estoy con estas líneas de programa.

if (Temp/10>= (tabNum[j]*10+tabNum))    //si la temperatura supera un determinado valor high D2
        output_High(PIN_D2);
 else
      output_low(PIN_D2);

Como no puedo producir la variacion de temp.  Provoco el incremento del seteo 
como empiezo desde (J,i) = (00) y ya mido temperatura 24° se ejecuta high D2. Tengo un led que se prende. Se apaga cuando el  incremento del seteo todavía es menor y llega a 12. se debería apagar cuando ese seteo supera los 24°. O sea cuando la temperatura es menor que el seteo.
Busque cambiar las posiciones j,i pero igual no responde a la expresión.
Lo positivo es que se prende y se apga el led pero no con los valores que quiero.

Probé también con esta expresión

if ((message1[7]>=tabNum[j]) && (message1[8]>=tabNum))     
        output_High(PIN_D2);
     
    else
     
     output_low(PIN_D2);

Aquí la salida se pone a uno cuando se cumple las dos condiciones o solo una. Lo que no deberia ser. lo ideal sería solamente las dos se cumplen.
No se en que le estoy errando

 
Título: Re:consulta
Publicado por: KILLERJC en 18 de Agosto de 2020, 22:02:57
Perdon, eso es porque crei que tabNum era algun array que tenia valores numericos (estoy con la cabeza en mil lados). Y no me di cuenta que era el array de los caracteres.

Código: C
  1. if (Temp/10>= (j*10+i))    //si la temperatura supera un determinado valor high D2
  2.         output_High(PIN_D2);
  3.  else
  4.       output_low(PIN_D2);

La otra forma seria:

Código: C
  1. if (message1[7]>tabNum[j]) {
  2.         // Decena mas grande en mensaje
  3.         output_high(PIN_D2);
  4. }
  5. else if (message1[7]==tabNum[j]) {
  6.         if(message1[8]>=tabNum[i]) output_high(PIN_D2);   // Decena igual, Unidad igual o mas grande
  7.         else  output_low(PIN_D2);   // Decena igual, Unidad mas pequeña
  8. } else {
  9.      output_low(PIN_D2); // Decena mas pequeña.
  10. }
Título: Re:consulta
Publicado por: kidpic en 19 de Agosto de 2020, 18:51:09
Bien funcionó con .... if (Temp/10>= (j*10+i)). Todo anda perfectamente pero trataré de optimizarlo

Me queda la duda del tabNum[j] y el j ( lo mismo para la i) que diferencia si uno me muestra el contenido de J y el otro el valor de j que es lo mismo.

De todas formas voy a hacer una modificación en mi programa Voy a implementar el seteo de los valores máximos y mínimos mediante una interrupción por RB2.
Muchas gracias gracias Killerjc!!! Sin duda sirve de mucho el foro :-/ :-/
Título: Re:consulta
Publicado por: KILLERJC en 19 de Agosto de 2020, 21:03:30
Citar
Me queda la duda del tabNum[j] y el j ( lo mismo para la i) que diferencia si uno me muestra el contenido de J y el otro el valor de j que es lo mismo.

Es que j es un numero del 0 al 9 (decimal del 0 al 9)

Mientras que tabNum[j] es un numero ASCII, es decir '0' a '9', pero estos números codificados en ASCII tienen un valor hexadecimal 0x30 a 0x39 respectivamente, o de 48 a 57 decimal

(https://2.bp.blogspot.com/-6cy6NDdlhKc/VxCx8H8XFaI/AAAAAAAABCs/WNkqjXtGm-MWRNkGi6gr-q9wAQxToQq8QCLcB/w1200-h630-p-k-no-nu/Tabla%2BASCII.PNG)


Y ahora que lo pienso, el array TabNum no tiene sentido.... ya que si queres obtener el equivalente en ASCII solo haces:

Código: C
  1. j + '0'

Y es lo mismo que con tu array hacer:

Código: C
  1. TabNum[j]
Título: Re:consulta
Publicado por: kidpic en 19 de Agosto de 2020, 21:49:40
Gracias!!
Lo que me planteo es setear con interrupciones externas por RB2.

Sé que que ingresa a la interrupción porque se ejecuta una parte de este programa.
 Es decir... el led se prende y apaga 5 veces y sale de la interrupcion.

Lo que debería suceder de acuerdo a mi teoría además se tendría que meter al do - while y hasta que el pin b2 no se pulse se tiene que quedar. Accionando b1 incremento un tmax  y muestro conteo.

 Compila todo muy bien. Pero no se mete en el do while a contar

Dejo las líneas del programa. Gracias!!

 PortB_Interrupt() //Nombre de la interrupción.

{
 
ext_int_edge(1,H_TO_L); //Detecta el cambio de estado de RB1 en el flanco negativo.
 
int tmax;  //variable de conteo

 for(n=1; n<=5; n++){ //El LED conectado en el puerto D1 titila 5 veces.
 output_high(PIN_D2);
 delay_ms(300);
 output_low(PIN_D2);
 delay_ms(300);
 }

 do{
     if(!input(PIN_B0)){                  //¿se ha pulsado el boton?
         do{                           //SI -> eliminar...           
         }while(!input(PIN_B0));
         tmax++;
         delay_ms(500);
         if (tmax >40)
         tmax=0;
        lcd_gotoxy(7,4);
        printf(lcd_putc,"%u",tmax);
     } 
     }while (bit_set(port_b,2)==1);
 

}
Título: Re:consulta
Publicado por: kidpic en 20 de Agosto de 2020, 20:58:01
Por el momento ya lo solucioné. Me meto en las interrupciones solo para incrementar los valores de seteo max y min. No hago todo el protocolo de seteo. Pero aún no se porque no entra en el lazo.
Gracias.  :-/ :-/ :-/

Título: Re:consulta
Publicado por: remi04 en 21 de Agosto de 2020, 04:02:06
bit_set(); lo que hace es poner a uno el bit indicado.

  Si lo que quieres es preguntar por el estado del bit tienes que usar:

bit_test();

Código: C
  1. while(bit_test(port_b,1));
Título: Re:consulta
Publicado por: KILLERJC en 21 de Agosto de 2020, 07:01:38
Disculpa por no tener mas tiempo. Ademas de lo que dijo remi04.


Si esto es para probar la interrupción, entonces OK. Pero JAMAS pongas un loop infinito/casi-infinito/ o dependiente de una entrada, en una interrupción.
TAMPOCO delays, escrituras a LCD, etc. Y mucho menos en una for...

Esencialmente todo lo que ocupe MUCHO tiempo, de procesarse. Ya que si algún día tenes dos interrupciones, y esta es una de ellas, la otra va a funcionar únicamente cuando salga de esta. Lo cual para una comunicacion es mucho tiempo y seguramente tengas overflow en tu modulo.

Mejor al detectar, activar un flag, y luego en el programa principal leerlo y actuar.

Obviamente se puede hacer asi como lo haces si:
- No existe otra interrupción
- O si hay dos interrupciones, la otra que tenga mas prioridad (en los PICs que lo permitan)
Título: Re:consulta
Publicado por: kidpic en 21 de Agosto de 2020, 20:00:42
Gracias por las sugerencias y atento a ellas implementé esta función la que anda perfectamente.
Como verás también estoy escribiendo y leyendo de la eeprom.
El tema de la consulta es que al terminar de cargarla al pic se ejecuta la interrupción sin que se haya llamado externamente por ningún pin del puerto B lo que hace que me aparezca un 1 en las variables de conteo. Debe haber una configuración errónea para que esto suceda.

Pasa lo mismo cuando la alimento con una fuente externa. Se ejecutan las interrupciones primero y después entra al main .

Aquí dejo las configuraciones y las funciones. Salvo ese detalle todo lo demás se realiza como dice el programa.


Me es de importancia pues esa primera acción me actualiza los conteos y yo necesito que los guarde ante una eventual corte de energía.

Aquí las funciones de interrupción que se ejecutan por primera vez sin que las llamen cuando se energiza el sistema

#int_ext
PortB_Interrupt() //Nombre de la interrupción.
{
 ext_int_edge(1,H_TO_L); //Detecta el cambio de estado de RB0 en el flanco negativo.
 for(n=1; n<=5; n++){ //El LED conectado en el puerto D1 titila 5 veces.
 output_high(PIN_D1);
 delay_ms(500);
 output_low(PIN_D1);
 delay_ms(500);
 }
}

 

 
 #int_EXT2 High // el high le da prioridad a laint. se
                //activa al pulsar rb2
void ext2_isr()

{
   tmax++;
   delay_ms(200);
   if (tmax >40)
         tmax=0;
     write_eeprom(0,tmax);
 
}

#int_EXT1          //de menor prioridad se activa con rb1
void EXT1_isr(){
   
   Tmin++;
   delay_ms(200);
   if (tmin >20)
         tmin=0;
     write_eeprom(3,tmin);
   
}

El main de la función

void main(void) //Función principal main.
{
 lcd_init();  // Initialize LCD module
   
 bit_set(tris_b,2); //el bit 2 del PtoB como entrada
 bit_set(tris_b,1); //el bit 1 del PtoB como entrada
 bit_clear(tris_d,1);// bit 1 del PtoD como salida
 bit_clear(tris_d,2);// bit 2 del PtoD como salida
 enable_interrupts(GLOBAL); //Habilitación de todas(GLOBAL) las interrupciones.
 enable_interrupts(int_EXT2);//Habilita int. por RB2con prioridad
 enable_interrupts(int_EXT1); //Habilita la interrupción externa RB1.
 enable_interrupts(int_EXT);


 

 while(TRUE){ //El LED del PIN D2 titila indefinidamente.
 output_high(PIN_D2);
 delay_ms(500);
 output_low(PIN_D2);
 delay_ms(500);

temp0=read_eeprom(0);
temp1=read_eeprom(3);
 
lcd_gotoxy(1,1);  //
printf(lcd_putc,"%u",temp0);//me indica que realmente se grabo en memoria
lcd_gotoxy(1,2);  //
printf(lcd_putc,"%u",temp1);//me indica que realmente se grabo en memoria
lcd_gotoxy(1,3);
printf(lcd_putc,"Tmax=%u", tmax);
lcd_gotoxy(1,4);  //
printf(lcd_putc,"Tmin=%u", tmin);
 } //Fin del bucle infinito.
}

Se esta armando lindo este programita. Gracias por su tiempo.

Título: Re:consulta
Publicado por: kidpic en 23 de Agosto de 2020, 00:12:39
Se soluciono, no empleando las interrupciones. Aún no se porqué? se dispara cuando doy energía al sistema. No debería.
Dejo el programa que sí funciona correrctamente salvo ese detalle. Solo falta la cabecera de declaraciones. Si algún interesado lo quiere se los paso. Pedirlo por aquí. ( Son los includes comunes y declaraciond de int.)
Gracias por el aporte muchachos!!! Hasta otra duda :)!!!