dujardin stephane
/
DUJ4-F401
programme de test pour envoyer du DUJ4 vers processing
serie.h@0:84f30b3eb83b, 2021-01-14 (annotated)
- Committer:
- dujardin
- Date:
- Thu Jan 14 10:01:51 2021 +0000
- Revision:
- 0:84f30b3eb83b
programme de test
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
dujardin | 0:84f30b3eb83b | 1 | // DUJ4 en version limitée |
dujardin | 0:84f30b3eb83b | 2 | // en emission D comme Départ |
dujardin | 0:84f30b3eb83b | 3 | // 2 variables 16bits DK et DL |
dujardin | 0:84f30b3eb83b | 4 | // 3 tableaux de 100 12bits tabDR , tabDS , tabDT |
dujardin | 0:84f30b3eb83b | 5 | // ordres en emission .. a vous de jouer avec un pc.putc('f'); ordre 'f' |
dujardin | 0:84f30b3eb83b | 6 | // en Reception A comme Arrivée |
dujardin | 0:84f30b3eb83b | 7 | // 3 variables 16 bits AK et AL |
dujardin | 0:84f30b3eb83b | 8 | // 3 tableaux de 100 12 bits tabAR , tabAS , tabAT |
dujardin | 0:84f30b3eb83b | 9 | // ordres en reception .. a vous de jouer au debut de void interrup ... |
dujardin | 0:84f30b3eb83b | 10 | |
dujardin | 0:84f30b3eb83b | 11 | // VARIABLES |
dujardin | 0:84f30b3eb83b | 12 | // variables pde reception et de décodage propres à DUJ4 pas au main |
dujardin | 0:84f30b3eb83b | 13 | int hex3 ='1' ; int hex2 = 0 ; int hex1 = 0 ; int hex0 = 0; |
dujardin | 0:84f30b3eb83b | 14 | int val3 =0 ; int val2=0 ;int val1 = 0; int val0 = 0; int res=0; |
dujardin | 0:84f30b3eb83b | 15 | int val = 0; // lieu de passage des char arrivés en port com |
dujardin | 0:84f30b3eb83b | 16 | int point = 0; // pointeur dans le tableau des char arrivés |
dujardin | 0:84f30b3eb83b | 17 | int rec[10]; // tableau des char en arrivée pure |
dujardin | 0:84f30b3eb83b | 18 | int ou ; int quoi ; // ou et quoi dans les tableaux tabAX[] |
dujardin | 0:84f30b3eb83b | 19 | int tempo = 0; |
dujardin | 0:84f30b3eb83b | 20 | //nom des tableaux servant de tampons de décodage en arrivée |
dujardin | 0:84f30b3eb83b | 21 | int tabAH[101] ;int tabAI[101] ; int tabAJ[101] ; |
dujardin | 0:84f30b3eb83b | 22 | |
dujardin | 0:84f30b3eb83b | 23 | // nom des variables 16 bits en Depart utilisables dans le main |
dujardin | 0:84f30b3eb83b | 24 | int DK = 1000 ; int DL = 5000; // depart |
dujardin | 0:84f30b3eb83b | 25 | int AK = 0 ; int AL = 0; // arrivée |
dujardin | 0:84f30b3eb83b | 26 | // nom des tableaux de variables UTILISABLES dans le main |
dujardin | 0:84f30b3eb83b | 27 | int tabDR[101] ; int tabDS[101] ; int tabDT[101] ;// en Depart |
dujardin | 0:84f30b3eb83b | 28 | int tabAR[101] ; int tabAS[101] ; int tabAT[101] ;// en Arrivée |
dujardin | 0:84f30b3eb83b | 29 | |
dujardin | 0:84f30b3eb83b | 30 | //SOUS PROGRAMMES |
dujardin | 0:84f30b3eb83b | 31 | int HEXit ( int valc ) |
dujardin | 0:84f30b3eb83b | 32 | {// traduction d'une valeur 0 à 15 en Ascii O à F |
dujardin | 0:84f30b3eb83b | 33 | int asc; |
dujardin | 0:84f30b3eb83b | 34 | if ( valc > 16 ) valc = 16 ; if (valc < 1 ) valc = 0 ; |
dujardin | 0:84f30b3eb83b | 35 | if ( valc == 0 ) asc = '0'; if ( valc == 1 ) asc = '1'; |
dujardin | 0:84f30b3eb83b | 36 | if ( valc == 2 ) asc = '2'; if ( valc == 3 ) asc = '3'; |
dujardin | 0:84f30b3eb83b | 37 | if ( valc == 4 ) asc = '4'; if ( valc == 5 ) asc = '5'; |
dujardin | 0:84f30b3eb83b | 38 | if ( valc == 6 ) asc = '6'; if ( valc == 7 ) asc = '7'; |
dujardin | 0:84f30b3eb83b | 39 | if ( valc == 8 ) asc = '8'; if ( valc == 9 ) asc = '9'; |
dujardin | 0:84f30b3eb83b | 40 | if ( valc == 10) asc = 'A'; if ( valc == 11) asc = 'B'; |
dujardin | 0:84f30b3eb83b | 41 | if ( valc == 12) asc = 'C'; if ( valc == 13) asc = 'D'; |
dujardin | 0:84f30b3eb83b | 42 | if ( valc == 14) asc = 'E'; if ( valc == 15) asc = 'F'; |
dujardin | 0:84f30b3eb83b | 43 | return asc; |
dujardin | 0:84f30b3eb83b | 44 | } |
dujardin | 0:84f30b3eb83b | 45 | |
dujardin | 0:84f30b3eb83b | 46 | void INTtoHEX( int valI) // calcul les 4 valeurs en hexa d'un INT |
dujardin | 0:84f30b3eb83b | 47 | { |
dujardin | 0:84f30b3eb83b | 48 | val3 =valI/4096 ;hex3 = HEXit( val3) ; |
dujardin | 0:84f30b3eb83b | 49 | valI =valI - 4096*val3 ; val2 = valI/256 ;hex2 = HEXit( val2) ; |
dujardin | 0:84f30b3eb83b | 50 | valI =valI - val2*256 ; val1 = valI/16 ;hex1 = HEXit( val1) ; |
dujardin | 0:84f30b3eb83b | 51 | valI =valI - val1*16 ; val0 = valI ;hex0 = HEXit( val0) ; |
dujardin | 0:84f30b3eb83b | 52 | } |
dujardin | 0:84f30b3eb83b | 53 | |
dujardin | 0:84f30b3eb83b | 54 | void THextabDR( int nb ) // transfert tableau de 12bits DR |
dujardin | 0:84f30b3eb83b | 55 | { |
dujardin | 0:84f30b3eb83b | 56 | for (int pt = 0 ; pt < nb ; pt++) |
dujardin | 0:84f30b3eb83b | 57 | { |
dujardin | 0:84f30b3eb83b | 58 | int can = tabDR[pt] * 4; //passe a 4096 |
dujardin | 0:84f30b3eb83b | 59 | INTtoHEX(can); |
dujardin | 0:84f30b3eb83b | 60 | pc.putc(hex2); pc.putc(hex1); pc.putc(hex0); |
dujardin | 0:84f30b3eb83b | 61 | pc.putc('H'); |
dujardin | 0:84f30b3eb83b | 62 | } |
dujardin | 0:84f30b3eb83b | 63 | wait_ms(10); |
dujardin | 0:84f30b3eb83b | 64 | pc.putc('R'); // |
dujardin | 0:84f30b3eb83b | 65 | wait_ms(10); |
dujardin | 0:84f30b3eb83b | 66 | } |
dujardin | 0:84f30b3eb83b | 67 | |
dujardin | 0:84f30b3eb83b | 68 | void THextabDS( int nb )// transfert en 12 bits DS |
dujardin | 0:84f30b3eb83b | 69 | { |
dujardin | 0:84f30b3eb83b | 70 | for (int pt = 0 ; pt < nb ; pt++) |
dujardin | 0:84f30b3eb83b | 71 | { |
dujardin | 0:84f30b3eb83b | 72 | int can = tabDS[pt] * 4 ; // passe à 4096 |
dujardin | 0:84f30b3eb83b | 73 | INTtoHEX(can); |
dujardin | 0:84f30b3eb83b | 74 | pc.putc(hex2); pc.putc(hex1); pc.putc(hex0); |
dujardin | 0:84f30b3eb83b | 75 | pc.putc('I'); |
dujardin | 0:84f30b3eb83b | 76 | } |
dujardin | 0:84f30b3eb83b | 77 | wait_ms(10); |
dujardin | 0:84f30b3eb83b | 78 | pc.putc('S'); // |
dujardin | 0:84f30b3eb83b | 79 | wait_ms(10); |
dujardin | 0:84f30b3eb83b | 80 | } |
dujardin | 0:84f30b3eb83b | 81 | |
dujardin | 0:84f30b3eb83b | 82 | void THextabDT( int nb )// transfert en 12 bits DT |
dujardin | 0:84f30b3eb83b | 83 | { |
dujardin | 0:84f30b3eb83b | 84 | for (int pt = 0 ; pt < nb ; pt++) |
dujardin | 0:84f30b3eb83b | 85 | { |
dujardin | 0:84f30b3eb83b | 86 | int can = tabDT[pt] ; |
dujardin | 0:84f30b3eb83b | 87 | INTtoHEX(can); |
dujardin | 0:84f30b3eb83b | 88 | pc.putc(hex2); pc.putc(hex1); pc.putc(hex0); |
dujardin | 0:84f30b3eb83b | 89 | pc.putc('J'); |
dujardin | 0:84f30b3eb83b | 90 | } |
dujardin | 0:84f30b3eb83b | 91 | wait_ms(10); |
dujardin | 0:84f30b3eb83b | 92 | pc.putc('T'); // |
dujardin | 0:84f30b3eb83b | 93 | wait_ms(10); |
dujardin | 0:84f30b3eb83b | 94 | } |
dujardin | 0:84f30b3eb83b | 95 | |
dujardin | 0:84f30b3eb83b | 96 | void sendDK ( )// envoie DK en 16 bits hexa |
dujardin | 0:84f30b3eb83b | 97 | { |
dujardin | 0:84f30b3eb83b | 98 | INTtoHEX(DK); |
dujardin | 0:84f30b3eb83b | 99 | pc.putc(hex3); pc.putc(hex2); pc.putc(hex1); pc.putc(hex0); |
dujardin | 0:84f30b3eb83b | 100 | pc.putc('K'); |
dujardin | 0:84f30b3eb83b | 101 | } |
dujardin | 0:84f30b3eb83b | 102 | void sendDL( )// envoie DL en 16 bits |
dujardin | 0:84f30b3eb83b | 103 | { |
dujardin | 0:84f30b3eb83b | 104 | INTtoHEX(DL); |
dujardin | 0:84f30b3eb83b | 105 | pc.putc(hex3); pc.putc(hex2); pc.putc(hex1); pc.putc(hex0); |
dujardin | 0:84f30b3eb83b | 106 | pc.putc('L'); |
dujardin | 0:84f30b3eb83b | 107 | } |
dujardin | 0:84f30b3eb83b | 108 | |
dujardin | 0:84f30b3eb83b | 109 | int readval12() // traduc en 12 bits des 3 hexa arrivés |
dujardin | 0:84f30b3eb83b | 110 | {int cal; |
dujardin | 0:84f30b3eb83b | 111 | cal = 256*rec[0]+ 16 *rec[1]+ rec[2]; |
dujardin | 0:84f30b3eb83b | 112 | return cal; } |
dujardin | 0:84f30b3eb83b | 113 | int readval16() // traduc en 16 bits des 4 hexa arrivés |
dujardin | 0:84f30b3eb83b | 114 | {int cal; |
dujardin | 0:84f30b3eb83b | 115 | cal = 4096*rec[0]+ 256*rec[1]+ 16 *rec[2]+ rec[3]; |
dujardin | 0:84f30b3eb83b | 116 | return cal; } |
dujardin | 0:84f30b3eb83b | 117 | |
dujardin | 0:84f30b3eb83b | 118 | // COEUR du PROCESSUS DE RECEPTION |
dujardin | 0:84f30b3eb83b | 119 | void interrupt() // chaque carractère reçut ce programme est appelé |
dujardin | 0:84f30b3eb83b | 120 | { val = pc.getc(); // sauvegarder le dernier carractère arrivé |
dujardin | 0:84f30b3eb83b | 121 | // on a 100 µS pour faire la suite |
dujardin | 0:84f30b3eb83b | 122 | // detection ordres et actions prevues ( sans delai) |
dujardin | 0:84f30b3eb83b | 123 | if ( val == 'f' ) {led= !led; } |
dujardin | 0:84f30b3eb83b | 124 | if ( val == 'g' ) {flag = 1; } //*******test duj4 |
dujardin | 0:84f30b3eb83b | 125 | |
dujardin | 0:84f30b3eb83b | 126 | //if ( val == 'z') { ; } |
dujardin | 0:84f30b3eb83b | 127 | // reception de l'héxa et placement dans le tableau intermediaire rec[] |
dujardin | 0:84f30b3eb83b | 128 | if ( val == '0'){rec[point]=0 ; point++;} if(val=='1'){rec[point]=1;point++;} |
dujardin | 0:84f30b3eb83b | 129 | if ( val == '2'){rec[point]=2 ; point++;} if(val=='3'){rec[point]=3;point++;} |
dujardin | 0:84f30b3eb83b | 130 | if ( val == '4'){rec[point]=4 ; point++;} if(val=='5'){rec[point]=5;point++;} |
dujardin | 0:84f30b3eb83b | 131 | if ( val == '6'){rec[point]=6 ; point++;} if(val=='7'){rec[point]=7;point++;} |
dujardin | 0:84f30b3eb83b | 132 | if ( val == '8'){rec[point]=8 ; point++;} if(val=='9'){rec[point]=9;point++;} |
dujardin | 0:84f30b3eb83b | 133 | if ( val == 'A'){rec[point]=10; point++;} if(val=='B'){rec[point]=11;point++;} |
dujardin | 0:84f30b3eb83b | 134 | if ( val == 'C'){rec[point]=12; point++;} if(val=='D'){rec[point]=13;point++;} |
dujardin | 0:84f30b3eb83b | 135 | if ( val == 'E'){rec[point]=14; point++;} if(val=='F'){rec[point]=15;point++;} |
dujardin | 0:84f30b3eb83b | 136 | if ( point > 8 ) point = 8; |
dujardin | 0:84f30b3eb83b | 137 | // detection des transferts de datas .. |
dujardin | 0:84f30b3eb83b | 138 | if ( val == 'H') { tabAH[ou]= readval12(); point = 0 ; ou++;} //empilage tampon |
dujardin | 0:84f30b3eb83b | 139 | if ( val == 'I') { tabAI[ou]= readval12(); point = 0 ; ou++;} //empilage |
dujardin | 0:84f30b3eb83b | 140 | if ( val == 'J') { tabAJ[ou]= readval12(); point = 0 ; ou++;} //empilage |
dujardin | 0:84f30b3eb83b | 141 | if ( val == 'K') { AK= readval16(); point = 0 ; } // // AK |
dujardin | 0:84f30b3eb83b | 142 | if ( val == 'L') { AL= readval16(); point = 0 ; } // |
dujardin | 0:84f30b3eb83b | 143 | // ASCII libres // |
dujardin | 0:84f30b3eb83b | 144 | if ( val == 'R') { for(int i=0; i<100; i++)tabAR[i]=tabAH[i];ou=0;} // util |
dujardin | 0:84f30b3eb83b | 145 | if ( val == 'S') { for(int i=0; i<100; i++)tabAS[i]=tabAI[i];ou=0;} // |
dujardin | 0:84f30b3eb83b | 146 | if ( val == 'T') { for(int i=0; i<100; i++)tabAT[i]=tabAJ[i];ou=0;} // >AT |
dujardin | 0:84f30b3eb83b | 147 | // ASCII libres |
dujardin | 0:84f30b3eb83b | 148 | |
dujardin | 0:84f30b3eb83b | 149 | } |
dujardin | 0:84f30b3eb83b | 150 |