Bonjour
SVP j'ai besoin de votre aide, pour mon projet je dois gérer les appels d'un ascenseur de 4 étages j'ai utilisé un programme d’interruption pour la gestion de l'appel celui-ci .
il y a 4 boutons(button1 étage1 button2 étages2... etc.) qui sont connectés en port RB0.
Lors de deux ou trois ou quatre appels successifs de l'ascenseur le programme doivent exécute le premier appel et doit enregistrer le deuxième troisième etc . afin de l'exécuté après qu'il se termine du premier appel ...et ça pour les quatre buttons
dans mon programme il ne fait pas l'enregistrement est-ce qu'il y a quelqu'un qui peut m'aider.
voici le programme en miKroc ;
merci d'avance
Code:char keypadPort at PORTD; //declaration du Port D en temps que clavier int pDestination[5]; int n=0; int etage1(int i) //fonction de convertion de l'etage du BCD-->decimal { switch(i) { case 0 : return -1; case 3 : return 0; case 5 : return 1; case 9 : return 2; case 17 : return 3; case 33 : return 4; } } int Capteur(int i) { switch(i) { case 0 : return -1; case 1 : return 0; case 2 : return 1; case 4 : return 2; case 8 : return 3; case 16 : return 4; } } void interrupt(void) //fonction interruption de INT pour la gestion des demandes des etages //l'ascenseur { INTCON.GIE=0; if(INTCON.INTF) { pDestination[n]=etage1(PORTB); n++; INTCON.INTF=0; } INTCON.GIE=1; } void main() { int i=0,kp=0,demande=-1,capteur,etage=0,capt=-1,choix[5],c,j,k,l,m,z; Keypad_Init(); //Initialisation du clavier TRISA=0x1F; //Port A en entré( INPUT) TRISC=0x00; //Port C en sortie TRISB=0xFF; TRISE=0x00; ADCON1=0x06; //Declaration u port A en entré numerique PORTC=0; /* Initialisation du afficheur 7 seg */ PORTE=0x00; INTCON.GIE=1; //Autorisation total des interruption INTCON.INTE=1; INTCON.INTF=0; //Autorisation de l'interruption INT for(i=0;i<5;i++) pDestination[i]=-1; while(1) { for(l=0;l<5;l++) choix[l]=5; if(pDestination[0]!=-1) // là on test si il y'a eu une interruption ou pas { demande=pDestination[0]; if(demande>etage) while(demande!=capt) { PORTC.F7=1; delay_ms(1000); PORTC.F7=0; PORTE=0x01; etage++; PORTC=etage; delay_ms(1000); capt=capteur(PORTA); } if(demande<etage) while(demande!=capt) { PORTC.F6=1; delay_ms(1000); PORTC.F6=0; PORTE=0x01; etage--; PORTC=etage; delay_ms(1000); capt=capteur(PORTA); } PORTE=0x00; delay_ms(1000); PORTC.F4=1; delay_ms(2000); PORTC.F4=0; delay_ms(5000); demande=-1; j=0; while(j<4 && i<4) { c=0; do{ kp = Keypad_Key_Click(); c++; }while (!kp && c<500); switch(kp) { case 0 : break; case 1 : choix[i]=0;i++;break; case 2 : choix[i]=1;i++;break; case 3 : choix[i]=2;i++;break; case 5 : choix[i]=3;i++;break; case 6 : choix[i]=4;i++;break; case 7 : PORTE.F2=1; delay_ms(2000); PORTE.F2=0; break; } kp=0; j++; } PORTC.F5=1; delay_ms(2000); PORTC.F5=0; i=0; for(k=0;k<4;k++) for(l=k;l<5;l++) if(choix[l]<choix[k]) { m=choix[l]; choix[l]=choix[k]; choix[k]=m; } k=0; while(k<5) { if(choix[k]<5) { if(choix[k]>etage) while(choix[k]!=capt) { PORTC.F7=1; delay_ms(1000); PORTC.F7=0; PORTE=0x01; etage++; PORTC=etage; delay_ms(1000); capt=capteur(PORTA); } if(choix[k]<etage) while(choix[k]!=capt) { PORTC.F6=1; delay_ms(1000); PORTC.F6=0; PORTE=0x01; etage--; PORTC=etage; delay_ms(1000); capt=capteur(PORTA); } PORTE=0x00; delay_ms(1000); PORTC.F4=1; delay_ms(2000); PORTC.F4=0; delay_ms(5000); PORTC.F5=1; delay_ms(2000); PORTC.F5=0; delay_ms(2000); } k++; } demande=-1; for(z=0;z<n;z++) pDestination[z]=pDestination[z+1]; pDestination[n]=-1; n--; } } }
-----