CommentCaMarche
Recherche
Posez votre question Signaler

Programmation carte à puce

johpascal 17Messages postés mercredi 4 avril 2007Date d'inscription 16 août 2013Dernière intervention - Dernière réponse le 10 juin 2008 à 14:21
Bonjour,
je ss entrain de realiser un lecteur de carte à puce. la partie electroniqe est dejà terminee, mais ss coincé au nivo prog car je m'y connais pas vraiment. je plus grand soucis c'est comment ecrire le code de comparaison ( par ex: pascal) ds l'EEPROM 24c02 par ex. g mm achete un programmateur de carte à puce. le fichier à charger ds la carte est de ".HEX" blocage encoreà ce nivo car je sais pas koi y charger.
g eu un prog de lecteur de carte à puce (ci dessous) qq part mais jusque là ss coincé au nivo de la procedure pr ecrire ds l'eeprom (24cxx)...et je comprend pas aussi o nivo de la comparaison des codes.
mon gros soucis c vrmnt cmt ecrire mon code ds l'eeprom.
merci d'avance pr vos reponses.
#include "KENF AUR.h"
#include EEPROM_SDA PIN_C4
#include EEPROM_SCL PIN_C3
#use delay(clock=20000000)
#fuses HS,NOWDT,NOPROTECT,NOPUT,NOBROWNOUT
#use i2c(master, sda=EEPROM_SDA,scl=EEPROM_SCL)
#use rs232(baud=9600,Xmit=PIN_C6,Rcv=PIN_C7
#define EEPROM_ADDRESS byte
#define EEPROM_SIZE 256
#define pres_carte input(PIN_B0)
#define Led_verte_0 output_bit(PIN_C1,0)
#define Led_verte_1 output_bit(PIN_C1,1)
#define gache_0 output_bit(PIN_C2,0)
#define gache_1 output_bit(PIN_C2,1)
#define Led_rouge_0 output_bit(PIN_C0,0)
#define Led_rouge_1 output_bit(PIN_C2,1)
#define NB 4 //nombre de codes autorisés possible
void init_ ext_eeprom()
}
output_float(eeprom_scl);
output_float(eeprom_sda);
}
void write_ext_eeprom(byte data)
{
i2c_start();
i2c_write(0xa0);
i2c_write(0x05);
i2c_write(data);
i2c_stop();
delay_ms(11);
}
byte read_ext_eeprom(void)
byte data;
{
i2c_start();
i2c_write(0xa0);
i2c_write(0x05);
i2c_start();
i2c_Write(0xa1);
data=i2c_read(0);
i2c_stop();
return(data);
}
int8 lecture (void)
{
return(read_ext_eeprom();
}
int8 comparaison(code)
{
int8 code_ init[NB]={'m','i','c','o'}; /*liste de code valides */
int n;
for(n=0;n<NB;n++) if(code==code_init[n]) return(1);
return(0);
}
void programme(void)
{
int8 code;
printf("donne le code à stocker dans la carte à puce");
getch();
code=getch();
printf(code);
write_ext_eeprom(code);
}
void main(void) /*ce programme permet de programmer et de lire la carte à puce i2c
*/
{
unsigned int8 code; /*code contenue sur la carte à puce sur 8 bits */
int1 Rxp;
do
{
set_tris_b(0x01); /* confuguration du bit RBO/INT en entrée */
init_ext_eeprom(); //initialisation de la carte à puce
while(pres_carte==0); //détection de la carte à puce
Rxp=kbhit(); //Rxp=0 si pas réception de la RS232 sinon Rxp=1
if(Rxp==o)
{
code =lecture();
if(comparaison(code)==o)
{
Led_rouge_1;
while(pres_carte==1);
Led_rouge_0;
}
else
{
Led_verte_1;
while(pres_carte==1);
led_verte_0;
gache_1;
delay_ms(2000);
Gache_0;
}
else
{
programme();
while(pres_carte==1);
}
}while(1);
}
}
Lire la suite 
Réponse
+0
moins plus
Bonjour,
je ss entrain de realiser un lecteur de carte à puce. la partie electroniqe est dejà terminee, mais ss coincé au nivo prog car je m'y connais pas vraiment. je plus grand soucis c'est comment ecrire le code de comparaison ( par ex: pascal) ds l'EEPROM 24c02 par ex. g mm achete un programmateur de carte à puce. le fichier à charger ds la carte est de ".HEX" blocage encoreà ce nivo car je sais pas koi y charger.
g eu un prog de lecteur de carte à puce (ci dessous) qq part mais jusque là ss coincé au nivo de la procedure pr ecrire ds l'eeprom (24cxx)...et je comprend pas aussi o nivo de la comparaison des codes.
mon gros soucis c vrmnt cmt ecrire mon code ds l'eeprom.
merci d'avance pr vos reponses.



#include "KENF AUR.h"

#include EEPROM_SDA PIN_C4
#include EEPROM_SCL PIN_C3
#use delay(clock=20000000)
#fuses HS,NOWDT,NOPROTECT,NOPUT,NOBROWNOUT
#use i2c(master, sda=EEPROM_SDA,scl=EEPROM_SCL)
#use rs232(baud=9600,Xmit=PIN_C6,Rcv=PIN_C7

#define EEPROM_ADDRESS byte
#define EEPROM_SIZE 256

#define pres_carte input(PIN_B0)
#define Led_verte_0 output_bit(PIN_C1,0)
#define Led_verte_1 output_bit(PIN_C1,1)
#define gache_0 output_bit(PIN_C2,0)
#define gache_1 output_bit(PIN_C2,1)
#define Led_rouge_0 output_bit(PIN_C0,0)
#define Led_rouge_1 output_bit(PIN_C2,1)

#define NB 4 //nombre de codes autorisés possible

void init_ ext_eeprom()
}
output_float(eeprom_scl);
output_float(eeprom_sda);
}

void write_ext_eeprom(byte data)
{
i2c_start();
i2c_write(0xa0);
i2c_write(0x05);
i2c_write(data);
i2c_stop();
delay_ms(11);
}

byte read_ext_eeprom(void)

byte data;
{
i2c_start();
i2c_write(0xa0);
i2c_write(0x05);
i2c_start();
i2c_Write(0xa1);
data=i2c_read(0);
i2c_stop();
return(data);
}

int8 lecture (void)

{
return(read_ext_eeprom();
}

int8 comparaison(code)

{

int8 code_ init[NB]={'m','i','c','o'}; /*liste de code valides */

int n;

for(n=0;n<NB;n++) if(code==code_init[n]) return(1);
return(0);
}
void programme(void)

{
int8 code;

printf("donne le code à stocker dans la carte à puce");
getch();
code=getch();
printf(code);
write_ext_eeprom(code);
}


void main(void) /*ce programme permet de programmer et de lire la carte à puce i2c
*/

{

unsigned int8 code; /*code contenue sur la carte à puce sur 8 bits */
int1 Rxp;

do
{
set_tris_b(0x01); /* confuguration du bit RBO/INT en entrée */

init_ext_eeprom(); //initialisation de la carte à puce

while(pres_carte==0); //détection de la carte à puce

Rxp=kbhit(); //Rxp=0 si pas réception de la RS232 sinon Rxp=1
if(Rxp==o)

{

code =lecture();
if(comparaison(code)==o)

{

Led_rouge_1;
while(pres_carte==1);
Led_rouge_0;
}
else
{

Led_verte_1;
while(pres_carte==1);
led_verte_0;
gache_1;
delay_ms(2000);
Gache_0;
}

else

{
programme();
while(pres_carte==1);
}

}while(1);

}

}
Ajouter un commentaire
Ce document intitulé «  programmation carte à puce  » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.