Microcontroladores - Memoria eeprom en ccs PIC16f916

 
Vista:

Memoria eeprom en ccs PIC16f916

Publicado por Daniel (1 intervención) el 22/11/2018 18:38:30
Hola a todos,

Estoy intentando hacer un programa en ccs para el microcontrolador PIC16f916 que me permita guardar el valor de una variable en la memoria eeprom. En principio creia que seria facil de conseguir utilizando las funciones que aparecen en el manual de ccs:
read_eeprom(adress)
write_eeprom (address,value)

Sin embargo, no se que hago mal al utilizar estas instrucciones o si me falta por configurar algo en mi programa, pero no consigo utilizar efectivamente las instrucciones de la eeprom y con mis escasos conocimientos en c no he conseguido dar con la solución. Esta es la primera parte del código que estoy utilizando:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <16f916.h>
#fuses NOPROTECT,NOCPD,NOWDT,XT,BROWNOUT
#use delay (clock=4000000)
#use rs232 (BAUD=9600,XMIT=PIN_C6,RCV=PIN_C7)
 
#byte port_a=5
#byte port_b=6
#byte port_c=7
 
int serie;
int modo=0;
int reset=1;
int g;
 
#int_rda
Modo_leds()
{serie=getc();
if(modo<5)
{modo++;
reset=2;
}
if(modo>=5&reset==1)
{modo=0;
}
reset=1;
write_eeprom(0,modo);
write_eeprom(1,12);
}
 
main()
{
set_tris_a(0b00000000);
set_tris_b(0b00000000);
set_tris_c(0b00000001);
 
enable_interrupts (int_rda);
enable_interrupts (global);
 
g=read_eeprom(1);
if(save!=12)
modo=0;
else
modo=read_eeprom(0);

Como veis es un programa sencillo de una secuencia, despues de esto en el bucle modifico las salidas dependiendo del estado de la variable "modo", esa parte me funciona correctamente, así como la interrupción cuando no utilizo las instrucciones de la memoria. Sin embargo al añadir la parte del código para leer y escribir la eeprom, no solo no puedo guardar el valor y leerlo mas tarde, si no que la variable "modo" se queda bloqueada en el valor 0 y deja de cambiar con la interrupción externa.

Espero que alguien pueda echarme un cable con esto.

Muchas gracias de antemano.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder