hppp Serveur@home | Bonsoir,
Je suis en train de faire un programme en C pour récupérer des données du port série. Il y a un module XBee connecté dessus.
Je reçois normalement des octes de cette forme pour une trame xbee :
Code :
- 7E 00 12 90 00 7D 33 A2 00 40 62 A9 25 61 6B 01 32 37 2E 35 30 00 81
|
Mais mon problème c'est qu'a la reception et à l'affichage je reçois defois plus de 8bits comme par exemple :
Code :
- 0x13 0xffffffa2 0 0x40 0x62 0xffffffa9 0x25
|
au lieu de
Code :
- 0x13 0xa2 0 0x40 0x62 0xa9 0x25
|
Quand je fais une analyse de trame avec le programme de digi X-CTU il n'y a pas de problème.
Savez vous pourquoi je reçois des fois les octes avec des bits de poids fort à 1 au lieux de 0 ? Comment faire pour résoudre le problème?
Merci
Mon code :
Code :
- do
- {
- ReadCOM(portnum,1,readbuffer);
- printf("donnees : %#x\n",readbuffer[0]);
- if(readbuffer[0]==0x7E)
- {
- // Récupération du nombres d'octes que compose la tram
- ReadCOM(portnum,2,readbuffer);
- printf("donnees : %#x %#x\n",readbuffer[0], readbuffer[1]);
- nombres_octes=(int)readbuffer[1];
- printf( "longueur de la frame : %d \n",nombres_octes );
- //readbuffer[0]=0;
- // Récupération du type de la trame
- ReadCOM(portnum,1,readbuffer);
- if(readbuffer[0]==0x90)
- {
- // Lecture caractère echapement
- ReadCOM(portnum,2,readbuffer);
- // Application Xor 0x20 sur l'octect suivant
- ReadCOM(portnum,1,readbuffer);
- addr64[0]= readbuffer[0]^0x20;
- // lecture du reste de l'adresse 64Bits
- //printf("donnees : %#x \n",readbuffer[0]);
- for(i=1; i<7; i++)
- {
- ReadCOM(portnum,1,readbuffer);
- addr64[i]=readbuffer[0];
- }
- printf( "L'adresse est : " );
- for(i=0; i<7; i++)
- {
- printf("%#0.2x ",addr64[i]);
- }
- // lecture de l'adresse 16Bits
- ReadCOM(portnum,2,readbuffer);
- // Lecture option
- ReadCOM(portnum,1,readbuffer);
- // Lecture data
- nombre_hexa -= 12;
- //printf( "decimal=%d \n",nombre_hexa );
- ReadCOM(portnum,nombre_hexa,readbuffer);
- //char temp = readbuffer[0]
- // Lecture checksum
- ReadCOM(portnum,1,readbuffer);
- }
- fin_trame=0;
- }
- }
- while(fin_trame==0);
|
|