#include <16F628.h> #FUSES NOWDT, XT, PUT, NOPROTECT, NOBROWNOUT, NOLVP, NOCPD #use delay(clock=4000000) #use rs232(baud=9600,parity=N,xmit=PIN_B2,rcv=PIN_B1,bits=8,timeout=100) //Modifier vitesse, bits, parité si nécessaire #define Test 0 //mettre à un pour vérifier le fonctionnement sur la pin B3 #int_RDA void RDA_isr(void) { byte Bit1,Adress,Fct,Com1,Com2,Vit1,Vit2,Com3,Com4,AdressOut; byte CSIn,CSInCalc,CSOut; int choix,choix2,choix3; output_bit(PIN_B0,1);//LED ON if (getc()==160) //Octet1 { Bit1=getc();//Octet2 //if (Bit1==1) // { Adress=getc(); //Octet3 Fct=getc(); //Octet4 Com1=getc(); //Octet5 Com2=getc(); //Octet6 Vit1=getc(); //Octet7 Vit2=getc(); //Octet8 CSIn=getc(); //Octet9 switch (Adress) // changement des adresses { case 24: AdressOut = 47; break; case 27: AdressOut = 48; break; case 28: AdressOut = 49; break; case 29: AdressOut = 50; break; default: AdressOut = Adress; } // AdressOut=Adress; // Pas de changement d'adresse if (Fct==1) { choix = 11*Com1 + Com2; switch (choix) { case 0: Com4 = 0; Com3 = 0; break; //Rien case 1: Com4 = 4; Com3 = 0; break; //Pan left case 2: Com4 = 2; Com3 = 0; break; // Pan right case 4: Com4 = 8; Com3 = 0; break; //Tilt up case 5: Com4 = 12; Com3 = 0; break; // Tilt up et Pan left case 6: Com4 = 10; Com3 = 0; break; // Tilt up et Pan right case 8: Com4 = 16; Com3 = 0; break; //Tilt down case 9: Com4 = 20; Com3 = 0; break; //Tilt down et Pan left case 10: Com4 = 18; Com3 = 0; break; //Tilt down et Pan right case 11: Com4 = 128; Com3 = 0; break; //Focus far case 22: Com4 = 0; Com3 = 1; break; //Focus near case 88: Com4 = 0; Com3 = 2; break; //Iris open case 176: Com4 = 0; Com3 = 4; break; //Iris close case 352: Com4 = 32; Com3 = 0; break; //Zoom tele case 353: Com4 = 36; Com3 = 0; break; //Zoom tele et Pan left case 354: Com4 = 34; Com3 = 0; break; //Zoom tele et Pan right case 356: Com4 = 40; Com3 = 0; break; //Zoom tele et Tilt up case 357: Com4 = 44; Com3 = 0; break; //Zoom tele et Tilt up et Pan left case 358: Com4 = 42; Com3 = 0; break; //Zoom tele et Tilt up et Pan right case 360: Com4 = 48; Com3 = 0; break; //Zoom tele et Tilt down case 361: Com4 = 52; Com3 = 0; break; //Zoom tele et Tilt down et Pan left case 362: Com4 = 50; Com3 = 0; break; //Zoom tele et Tilt down et Pan right case 704: Com4 = 64; Com3 = 0; break; //Zoom wide case 705: Com4 = 68; Com3 = 0; break; //Zoom wide et Pan left case 706: Com4 = 66; Com3 = 0; break; //Zoom wide et Pan right case 708: Com4 = 72; Com3 = 0; break; //Zoom wide et Tilt up case 709: Com4 = 76; Com3 = 0; break; //Zoom wide et Tilt up et Pan left case 710: Com4 = 74; Com3 = 0; break; //Zoom wide et Tilt up et Pan right case 712: Com4 = 80; Com3 = 0; break; //Zoom wide et Tilt down case 713: Com4 = 84; Com3 = 0; break; //Zoom wide et Tilt down et Pan left case 714: Com4 = 82; Com3 = 0; break; //Zoom wide et Tilt down et Pan right //default: Com4 = 0; Com3 = 0; } } //CSInCalc = (255 - Adress - Fct - Com1 - Com2 - Vit1 - Vit2); //Calcul de la checksum de la trame entrante CSInCalc = CSIn; //bidon, uniquement pour test, le CSInCalc doit être calculé avec les différents octets reçus if (Fct==3) //Gestion des fonctions { if (Com1==80) { Com3 = 0; Com4 = 03; Vit2 = Com2; //Enregistrer une prépo } if (Com1==25) { Com3 = 0; Com4 = 07; Vit2 = Com2; //Lire une prépo } choix2 = Com1 + Com2; switch (choix2) { case 24: Com3 = 0; Com4 = 07; Vit2 = 95; break; //accès au menu case 23: Com3 = 0; Com4 = 07; Vit2 = 96; break; //sortir du menu } if (Com1==26) { Choix3 = (60 + Com2); Com3 = 0; Com4 = 07; Vit2 = Choix3; // Lancer un auto scan } Vit1 = 0; } CSOut = (AdressOut + Com3 + Com4 + Vit1 + Vit2) %256; //calcul de la checksum de la trame de sortie if (CSIn==CSInCalc) //envoi uniquement si le Checksum est ok { putc(255); //Octet1 putc(AdressOut); //Octet2 putc(Com3); //Octet3 putc(Com4); //Octet4 putc(Vit1); //Octet5 putc(Vit2); //Octet6 putc(CSOut); //Octet7 } //} } output_bit(PIN_B0,0);//LED OFF } void main() { enable_interrupts(INT_RDA); enable_interrupts(GLOBAL); while (TRUE) { if (Test) { output_bit(PIN_B3,1); delay_ms(250); output_bit(PIN_B3,0); delay_ms(250); } } }