dujardin stephane
/
DUJ4-F401
programme de test pour envoyer du DUJ4 vers processing
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 }