Bonjour,
Je suis nouveau ici et je viens direct vous embêter avec une question certainement simple pour les addicts mais cela fais maintenant plusieurs jours que je reste bloqué là dessus.
Je souhaite donc faire intéragir un DS1302 avec mon PIC16F877A.
Je me suis basé sur un code d'exemple, mais ce dernier semble pas fonctionner, même après quelques modifications.
Je n'arrive pas bien à saisir cette déclaration:
(CC5X ne reconnait pas le 'volatile')Code:unsigned char time_rx @ 0x30; //define receive reg. static volatile bit time_rx7 @ (unsigned)&time_rx*8+7; //receive reg highest.
Donc ma question est pourquoi l'on souhaite attribuer l'adresse &time_rx*8+7 qui si je calcule est 0x187 (391) ?
Je suppose qu'à la base c'est pour un décalage binaire mais ces deux adresses ne sont pas juxtaposé...
La variable time_rx7 est ensuite utilisé ici:
Code:unsigned char time_read_1() { int j; //set the loop counter. TRISB4=1; //continue to write 8bit for(j=0;j<8;j++) { sclk=0; //pull low clk time_rx=time_rx>>1; //judge the send bit is 0 or 1. time_rx7=i_o; //put the received bit into the reg's highest. sclk=1; //pull high clk } TRISB4=0; //finished 1 byte,pull low clk sclk=0; return(time_rx); }
J'ai aussi essayé par une autre methode que j'ai vu sur le net afin de ce passer de cette variable ne la saisissant pas bien:
Code:unsigned char time_read_1() { int j; //set the loop counter. TRISB.4=1; //continue to write 8bit for(j=0;j<8;++j) { sclk=0; //pull low clk if(i_o == 0) { time_rx = time_rx & 127; } else { time_rx = time_rx & 128; } time_rx=time_rx>>1; sclk=1; //pull high clk } TRISB.4=0; //finished 1 byte,pull low clk sclk=0; return(time_rx); }
Dans les deux cas l'affichage retourne toujours 000000.
Vous pouvez voir le code de base à cette adresse:
http://pastebin.com/f66cfc69c
Le même code que j'ai modifié pour le rendre compatible avec CC5X:
http://pastebin.com/f6a624640
Notez que la routine d'affichage fonctionne correctement.
Je vous remercie pour toute l'aide que vous pourriez m'apporter
-----