Bonjour,
j'ai récupéré un bout de programme que j'ai adapté à ma sauce en langage C. Ce programme écrit dans l'eeprom de mon pic (16f) et lit une valeur qui se traduit par un allumage de led (sur une carte "PICDEM 2 PLUS").
Ce que je voudrais faire c'est d'arriver à écrire dans l'eeprom et de lire la valeur écrite dans l'eeprom grâce à un autre programme...
Je pense que ce qui se passe c'est que:
1. le programme est exécuté
2. une valeur est écrite dans la mémoire
3. l'autre programme s'exécute (et écrase la valeur qui est inscrite en mémoire)
4. la valeur est lu (mais cette valeur est fausse car le programme à inscrit par défaut "FF" dans la case mémoire)
je vous livre mon programme mais je pense qu'il me faut un registre avec un bit qui "verrouille" cette saleté d'eeprom, si quelqu'un sait faire autrement ou connait le registre en question je suis preneur !!!
#include "int16CXX.h"
#pragma origin 4
/**********test led*************************/
void initled (void)
{
TRISB=0x00; //port B en sortie
PORTB=0xFF; //toutes led alumées
}
/**********ecriture EEPROM******************/
void ecrire_EEPROM (uns16 adresse,uns8 valeur)
{ //adresse sur 16 bits et valeur sur 8 bits
while(WR==1); //flag
EEADR=adresse; //passage du paramètre "adresse" dans le buffer
EEDATA=valeur; //passage du paramètre "valeur" dans le buffer
EEPGD=0; //acces EEPROM
WREN=1; //autorise ecriture
GIE=0; //dévalide les IT
EECON2=0x55; //???
EECON2=0xAA; //???
WR=1; //cycle d'écriture
GIE=1; //permet d'activer toutes les interruptions
WREN=0; //désactivation de l'écriture
}
/**********lecture EEPROM*******************/
uns8 lire_EEPROM (uns16 adresse)
{
EEADR=adresse; //passage du paramètre "adresse" dans le buffer
EEPGD=0; //acces data EEPROM
RD=1; //cyle de lecture
return(EEDATA); //retourne la valeur EEDATA lu à "adresse"
}
/**********MAIN**************** *************/
void main (void)
{
uns8 data; //"data" sur 8 bits
uns16 i; //"i" sur 16 bits
initled(); //initialise les leds
ecrire_EEPROM(0x0130, 0x41); //écrit la valeur 41 dans l'EEPROM à l'adresse 0130
data=lire_EEPROM(0x0130); //lit l'adresse 0130, dans ce cas allumage de la première led
PORTB=data; //la variable data est affectée au port B
}
un grand merci d'avance !!
-----