1: #include "biosdem.h" 2: #include 3: #include 4: #include 5: #include 6: 7: /*mot de configuration pour 8: rendre le programme autonome*/ 9: __CONFIG (0x3D39); 10: 11: //#define MODE_PC 12: /*on définit si on travaille sur le PC 13: ou si l'on travaille directement sur le robot: 14: si cette ligne est mise en commentaire, on travaille sur 15: le robot, sinon on travaille sur le PC*/ 16: void serial_init(void); 17: void serial_putchar(unsigned char x); 18: 19: /* ce tableau va servir à définir les seuils des capteurs*/ 20: const char tabseuil[8]={115,72,72,72,72,72,72,72}; //de droite a gauche 21: 22: /*commande est le mot qui va etre émis par ce PIC, ce mot de 8bits va 23: permettre de donner les informations sur les capteurs, 24: c'est-à-dire de savoir quel capteur(s) capte la piste. Ce mot sera traité 25: par la suite dans le PIC de la carte principale pour donner 26: l'ordre aux moteurs de ralentir ou d'accélerer*/ 27: unsigned char commande=0,resultat=0; 28: 29: 30: void main (void) 31: { 32: 33: unsigned char x=1,n=0; // Modif en uchar 34: /*cette partie du programme permet de maintenir 35: un niveau 1 en direction de l'autre PIC afin de ne pas 36: mettre la liason série en erreur*/ 37: TRISC6=0; 38: RC6=1; 39: DelayMs(100); 40: TRISB=0; 41: 42: /*configuration du module de conversion analogique/numérique*/ 43: ADCON1= 0x00; 44: ADCS1=0; 45: ADCS0=1; 46: ADON=1; 47: TRISD=0; 48: 49: /*initialisation de la liaison série*/ 50: serial_init(); 51: for(;;) 52: { 53: 54: ADCON0= ADCON0 & 0xC7; 55: 56: ADCON0= ADCON0 | (n<<3); 57: PORTD=x; 58: DelayUs(300); //Attente entre éclairage Led et Acquisition 59: ADGO=1; 60: while(ADGO==1); 61: 62: // cette partie du programme va lire la tension sur la voie n 63: // et la comparer à tabseuil[n], en fonction du résultat, 64: // supérieur ou inférieur au seuil 65: // le PIC fabrique un mot binaire de 8 bit qui sera envoyé 66: // au PIC de la carte principale 67: resultat=ADRESH; 68: if(tabseuil[n]>resultat) 69: {commande=commande|x;} 70: resultat=0; 71: if(x!=0x80) 72: { 73: x=x<<1; 74: n = n + 1 ; 75: } 76: else 77: { PORTB=commande; 78: x=1; 79: n = 0 ; 80: DelayUs(50); 81: serial_putchar(commande); 82: commande=0; 83: } 84: 85: 86: 87: } 88: } 89: 90: 91: /*cette fonction permet d'initialiser 92: la liaison série entre les deux PIC*/ 93: void serial_init(void) 94: { 95: BRGH=1; 96: SPBRG=25; 97: SYNC=0; 98: SPEN=1; 99: TXEN=1; 100: CREN=1; 101: } 102: 103: /*cette fonction permet d'emettre un caractère 104: à l'aide de la liaison série*/ 105: void serial_putchar(unsigned char x) 106: { 107: while(TRMT==0) 108: ; 109: TXREG=x; 110: } 111: 112: 113: 114: