TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: dapi28 en 25 de Marzo de 2014, 02:42:03
-
Saludos, mi problema es el siguiente y espero me puedan ayudar:
Estoy programando en ccs el pic 16f877A, durante el funcionamiento del programa recibo datos constantemente por el puerto serial para lo que estoy utilizando la interrupcion por recepcion ( INT_RDA) y aparte necesito almacenar ciertos datos en la eeprom. El problema es que luego de almacenar los datos en la eeprom (Si reinicio el micro puedo comprobar que en efecto los datos se almacenaron en la eeprom correctamente) la interrupcion del puerto serial queda "desactivada" es decir el micro nunca vuelve a entrar en la funcion de interrupcion por puerto serial, por lo que mi programa se daña al no poder recibir mas datos.
Alguien Podria ayudarme con este error?
Gracias de antemano.
-
Según el datasheet, antes de comenzar la escritura hay que deshabilitar las interrupciones (esto es en asm), tal vez las funciones de CCS deshabiliten las interrupciones y nunca las vuelva a habilitar y por ello no te ingresa a la interrupción del UART
-
podrias poner tu código para darle una revisada
-
Dos posibles problemas:
1) el modificador ERRORS en la declaración del #USE RS232. Sin eso si el buffer RX de la UART se desborda, la UART deja de recibir datos hasta ser reiniciada. Es problable que la rutina de EEPROM esté deshabilitando las interr durante la grabación y pudiendo generarte eso.
2)utilizar #DEVICE WRITE_EEPROM = NOINT
De esa manera, las interrupciones (como la de la UART) pueden ocurrir durante el grabado de la EEPROM. La contra es que al activarla, tenés que asegurarte que no ocurra nunca una grabación de la EEPROM dentro de la ISR.
Te recomendaría que agregues ambas características a tu código si no las estás usando. Seguramente solucione el problema.
Saludos.