programme de test pour envoyer du DUJ4 vers processing

Dependencies:   mbed

serie.h

Committer:
dujardin
Date:
2021-01-14
Revision:
0:84f30b3eb83b

File content as of revision 0:84f30b3eb83b:

// DUJ4 en  version limitée 
// en emission D comme  Départ
// 2 variables 16bits         DK et DL  
// 3 tableaux de 100 12bits   tabDR  , tabDS  , tabDT
// ordres en emission .. a vous de jouer avec un  pc.putc('f');  ordre 'f'
// en Reception A comme Arrivée 
// 3 variables  16 bits       AK et AL 
// 3 tableaux de 100 12 bits  tabAR  , tabAS  , tabAT 
// ordres en reception .. a vous de jouer au debut de void interrup ... 

// VARIABLES 
// variables pde reception et de décodage propres à  DUJ4 pas au main 
int hex3 ='1' ; int hex2 = 0 ; int hex1 = 0 ; int hex0 = 0;
int val3 =0 ; int val2=0   ;int val1 = 0; int val0 = 0; int res=0;
int val = 0;                    // lieu de  passage des char arrivés en port com
int point = 0;                  // pointeur dans le tableau des char arrivés
int rec[10];                    // tableau des char en arrivée pure
int ou ; int quoi ;             // ou et quoi dans les tableaux tabAX[]
int tempo = 0;
//nom des tableaux servant de tampons  de décodage en arrivée  
int tabAH[101] ;int tabAI[101] ; int tabAJ[101] ;  

// nom des variables 16 bits en Depart utilisables dans le main 
int DK = 1000 ; int DL = 5000;  // depart
int AK = 0    ; int AL = 0;     // arrivée                    
// nom des tableaux de variables UTILISABLES dans le main  
int tabDR[101] ; int tabDS[101] ; int tabDT[101] ;// en Depart            
int tabAR[101] ; int tabAS[101] ; int tabAT[101] ;// en Arrivée
  
//SOUS PROGRAMMES       
int HEXit ( int valc )
        {// traduction d'une valeur 0 à 15 en Ascii  O à F
        int  asc; 
        if ( valc > 16 ) valc = 16 ; if  (valc < 1 ) valc = 0 ; 
        if  ( valc == 0 ) asc = '0'; if  ( valc == 1 ) asc = '1';
        if  ( valc == 2 ) asc = '2'; if  ( valc == 3 ) asc = '3';
        if  ( valc == 4 ) asc = '4'; if  ( valc == 5 ) asc = '5';
        if  ( valc == 6 ) asc = '6'; if  ( valc == 7 ) asc = '7';
        if  ( valc == 8 ) asc = '8'; if  ( valc == 9 ) asc = '9';
        if  ( valc == 10) asc = 'A'; if  ( valc == 11) asc = 'B';
        if  ( valc == 12) asc = 'C'; if  ( valc == 13) asc = 'D';
        if  ( valc == 14) asc = 'E'; if  ( valc == 15) asc = 'F';
        return asc;
        } 
        
void INTtoHEX( int valI)  // calcul les 4 valeurs en hexa  d'un INT 
       {
        val3 =valI/4096                           ;hex3 = HEXit( val3) ;
        valI =valI - 4096*val3 ; val2 = valI/256  ;hex2 = HEXit( val2) ;
        valI =valI - val2*256  ; val1 = valI/16   ;hex1 = HEXit( val1) ;
        valI =valI - val1*16   ; val0 = valI      ;hex0 = HEXit( val0) ;      
       }      
                          
void THextabDR( int nb )  // transfert tableau de 12bits DR
       {
        for (int pt = 0 ; pt < nb ; pt++)  
            {  
            int can = tabDR[pt] * 4; //passe a 4096
            INTtoHEX(can);
            pc.putc(hex2);  pc.putc(hex1);  pc.putc(hex0); 
            pc.putc('H');       
            }
        wait_ms(10);    
        pc.putc('R');   // 
        wait_ms(10);  
       }
       
void THextabDS( int nb )// transfert en 12 bits DS
       {
        for (int pt = 0 ; pt < nb ; pt++)  
            {  
            int can = tabDS[pt] * 4 ; // passe à 4096
            INTtoHEX(can);
            pc.putc(hex2);  pc.putc(hex1);  pc.putc(hex0); 
            pc.putc('I');       
            }
        wait_ms(10);    
        pc.putc('S');   // 
        wait_ms(10);  
       }
       
void THextabDT( int nb )// transfert en 12 bits DT
       {
        for (int pt = 0 ; pt < nb ; pt++)  
            {  
            int can = tabDT[pt] ;
            INTtoHEX(can);
            pc.putc(hex2);  pc.putc(hex1);  pc.putc(hex0); 
            pc.putc('J');       
            }
        wait_ms(10);    
        pc.putc('T');   // 
        wait_ms(10);  
       }
       
void sendDK ( )// envoie DK en 16 bits  hexa
        {
        INTtoHEX(DK);
        pc.putc(hex3);  pc.putc(hex2);  pc.putc(hex1);  pc.putc(hex0); 
        pc.putc('K');     
        }   
void sendDL( )//  envoie DL en 16 bits
        {
        INTtoHEX(DL);
        pc.putc(hex3);  pc.putc(hex2);  pc.putc(hex1);  pc.putc(hex0); 
        pc.putc('L');     
        }  
            
int  readval12()  // traduc en 12 bits des 3 hexa arrivés
     {int cal;
      cal = 256*rec[0]+ 16 *rec[1]+  rec[2]; 
      return cal; }
int  readval16()  // traduc en 16 bits des 4 hexa arrivés
     {int cal;
      cal = 4096*rec[0]+ 256*rec[1]+ 16 *rec[2]+  rec[3]; 
      return cal; }
      
// COEUR du PROCESSUS DE RECEPTION 
void interrupt()   //  chaque carractère reçut ce programme est appelé
{ val = pc.getc(); //  sauvegarder  le  dernier carractère arrivé 
  // on a 100 µS pour faire la suite 
  // detection ordres et actions prevues ( sans delai) 
  if ( val == 'f' ) {led= !led; }
  if ( val == 'g' ) {flag = 1;    } //*******test duj4

  //if ( val == 'z')  { ; }  
  // reception de l'héxa et placement dans le  tableau intermediaire rec[]
  if ( val == '0'){rec[point]=0 ; point++;} if(val=='1'){rec[point]=1;point++;} 
  if ( val == '2'){rec[point]=2 ; point++;} if(val=='3'){rec[point]=3;point++;} 
  if ( val == '4'){rec[point]=4 ; point++;} if(val=='5'){rec[point]=5;point++;} 
  if ( val == '6'){rec[point]=6 ; point++;} if(val=='7'){rec[point]=7;point++;} 
  if ( val == '8'){rec[point]=8 ; point++;} if(val=='9'){rec[point]=9;point++;} 
  if ( val == 'A'){rec[point]=10; point++;} if(val=='B'){rec[point]=11;point++;} 
  if ( val == 'C'){rec[point]=12; point++;} if(val=='D'){rec[point]=13;point++;} 
  if ( val == 'E'){rec[point]=14; point++;} if(val=='F'){rec[point]=15;point++;} 
  if ( point > 8 ) point = 8; 
  // detection des transferts de datas  ..  
  if ( val == 'H') { tabAH[ou]= readval12(); point = 0 ; ou++;} //empilage tampon 
  if ( val == 'I') { tabAI[ou]= readval12(); point = 0 ; ou++;} //empilage 
  if ( val == 'J') { tabAJ[ou]= readval12(); point = 0 ; ou++;} //empilage 
  if ( val == 'K') { AK= readval16(); point = 0 ; }  // // AK
  if ( val == 'L') { AL= readval16(); point = 0 ; }  // 
  // ASCII libres  // 
  if ( val == 'R') { for(int i=0; i<100; i++)tabAR[i]=tabAH[i];ou=0;} // util
  if ( val == 'S') { for(int i=0; i<100; i++)tabAS[i]=tabAI[i];ou=0;} // 
  if ( val == 'T') { for(int i=0; i<100; i++)tabAT[i]=tabAJ[i];ou=0;} // >AT
  // ASCII libres
 
  }