Hola saludos a todos, tengo un problema, nose que diablos paso, contare detalladamente, hice un programa que consiste en grabar un dato en la eeprom interna y mediante interrupcion externa por RB0 se lee el dato y se lo observa en puerto B y A, mientras el micro es llevado al estado de bajo consumo (sleep), este es el código en ccs:
Por cierto uso el pic16f877a
/*----------------------------------------------------------------------------*/
/* ESCRIBE un dato Y LEE la memoria eeprom interna de 16F877A */
/* mediante interrupcion externa */
/*---------------------------------------------------------------------------*/
#include <16f877a.h>
#fuses XT,NOWDT,NOPROTECT,NOLVP,PUT,BROWNOUT,NOCPD,NOWRT
#use delay (clock=4000000)
#use fast_io(a)
#use fast_io(b)
#byte port_a=0x05
#byte port_b=0x06
// Se graba en la localidad 01h de la EEPROM (usando la directiva #ROM)
#rom 0x2101={0xfd} // La localidad 01h de memoria EEPROM = 0fdh
#int_EXT
int dato;
EXT_isr() // rutina que atiende la interrupcion
{
dato = read_eeprom(0x01);
port_a = dato;
port_b = dato;
delay_ms(1000);
port_a = 0;
port_b = 0;
}
void main() // programa principal
{
set_tris_a(0x1e);
set_tris_b(0x01);
port_a=0x00;
port_b=0x00;
// write_eeprom(0x01,0xfd); // esta instruccion podria usarse en vez de #rom del
//encabezado
setup_adc_ports(NO_ANALOGS); // todos los pines analogicos son digitales, talvez no
//sea necesario
ext_int_edge(H_TO_L); //por defecto esta en L to H
enable_interrupts(INT_EXT); // habilitación de interrupcion por RB0
enable_interrupts(GLOBAL); // habilitadas interrupciones globales
while(TRUE)
{
sleep(); // micro en estado de bajo consumo
}
}
la primera vez que compile este programa y simulado en proteus todo bien, ningun problema, funcionaba a la perfección, pero despues ya no funciono, sucedio que estaba trabajando en eso en el proteus y con el compilador ccs tb, y de repente la rodilla de mi hermano apago mi pc y no tuve tiempo de guardar ni cerrar ni hacer nada, simplemente la computadora se apago, bueno, ahora cuando vuelvo a compilar el mismo codigo en la parte que indica cuanta memo se usa (RAM y ROM), ROM (es la eeprom verdad?) aparece en 0% y deberia estar en 3% (+ o -), porque eso aparecia antes, talvez ese no sea el problema la cosa es que en la simulacion todo bien armada, con los valores correctos, no funciona, mas bien comienza el tiempo a correr muy lento cundo se pulsa un pulsador en RB0 que sirve de interrupcion; aclaro nuevamente que el mismo codigo compliado antes del apagado involuntario de pc funcionaba de maravilla en el simulador. que fue lo que sudecio? no lo entiendo, talvez algo mal en mi codigo, una ayuda porfavor, estare muy agradecido, muchas gracias, adios.