Probleme de calcul de checksum dans une trame STX...ETX
Répondre à la discussion
Affichage des résultats 1 à 1 sur 1

Probleme de calcul de checksum dans une trame STX...ETX



  1. #1
    invite638ca161

    Probleme de calcul de checksum dans une trame STX...ETX


    ------

    Bonjour a tous,

    Apres plus de 1 semaine dessus,je craque!!

    Je realise un project menant a transferer une trame de donne( STX-ADDRESSE-DATA-CHECKSUM-ETX) de mon pc a une carte de development via une communication RS232(dc via USART du PIC) cette carte est ensuite constitue de 2 microcontroleur(18f4680). Je dois faire passer cette trame d'un PIC a un autre via une communication SPI.
    Donc j'utilise mon 1er pic comme "maitre" et mon 2eme comme "esclave".
    La communication entre les 2 pic marche parfaitement mais mon probleme et qu'une fois que le pic numero recoit la donnee,il doit effectuer un checksum,c'est a dire, qu'il doit additionner tous les bits entre les delimiteurs(STX et ETX).
    Et c'est la que je m'embrouille et bloque litteralement.
    voici la data des donnee:

    STX = 0x02 sur 8 bit
    Addr = ? sur 8 bit
    Data =? sur n bit
    Checksum =? sur 8 bit
    ETX = 0x03.

    J'ecris mon code sur Mplab(c18 compileur) Et voici un brouillon de mon code,pourriez vous m'eclairer s'il vous plait
    ------------------------------------------------------------------------------------------
    Code:
    void main()
    { 	 
          unsigned char result[32];
          unsigned char sum = 0; 
          int i;
          int j = 0;
          int k;
        
    	 init_spi();						 // init SPI module.
    	 init_uart();						 // init UART module
    	 init_interrupt();
    
    while(1) 
    {
    
    while (!DataRdyUSART());                  // attendre si il y'a une donne
    result[j] = ReadUSART();              	// attrapper les donnee venant de l' USART
    	if (result[j]  == 0x02)			  	// est ce le bon debut de trame?(STX)
    		{							  	
    		j++;
         	 while(1)
    		{	
    		 while (!DataRdyUSART()); 			// attendre qu'il y ait une donne
    		 result[j] = ReadUSART(); 			// Get the character received from the USART 
    								   			// 1. ETX detecte.
    			while (result[j] != 0x03)
    				{				
    				sum = sum + result[j]; 		//Les additionner ensemble
    				}
    				  if (sum != 0)  // Si differents de zero
    					{
    					 for(k=0;k<200;k++);     
            					OpenUSART(USART_TX_INT_OFF & USART_RX_INT_OFF & USART_ASYNCH_MODE &
            					USART_EIGHT_BIT & USART_CONT_RX & USART_BRGH_LOW, 64);
    							putrsUSART("ERROR\r\n");  // Envoyer un message sur hyperterminal;
    					}
    					else
    					{
    					spi_data_ready = 1; // Donnee prete a etre envoyer a SPI
    					break;
    				    }
    		}
    		}
    				else if ((result[j] != 0x03) && ((j+1) > 31))
    	{
    	break;
    	}
    	j++;
    	}

    -----
    Dernière modification par Jack ; 01/11/2012 à 13h32. Motif: Les balises code, bon sang, il faut mettre ces balises !!!

Discussions similaires

  1. Méthode pour calculer une checksum sur 8 bits
    Par JOE56 dans le forum Électronique
    Réponses: 10
    Dernier message: 13/12/2011, 12h46
  2. Problème pour trouver une démarche dans un calcul de MRU
    Par invitef0e6ff2f dans le forum Physique
    Réponses: 0
    Dernier message: 26/10/2011, 18h54
  3. Problème:CMOS checksum error
    Par invite94a4f345 dans le forum Matériel - Hardware
    Réponses: 13
    Dernier message: 24/11/2010, 23h45
  4. Son saturé ,webcam Logitech STX
    Par invite1ec24902 dans le forum Matériel - Hardware
    Réponses: 3
    Dernier message: 31/08/2006, 19h46
  5. Calcul Checksum pour Transfert RS232
    Par invitee9004dcd dans le forum Matériel - Hardware
    Réponses: 1
    Dernier message: 30/08/2006, 19h40
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...