/********************************************************** Projet : tp4S.prj Fichier(s) : TP_4S.c Objet : Convertisseur analogique numérique Auteurs : VILLERMIN Julien / SCHULLER Fabien Groupe : Auto Date création : 04/12/2000 **********************************************************/ // Fichiers à inclure : #include // Commandes du moniteur de mise au point : pour cible XEVA + XEVA_DEMO #include // Fichier de déclaration des registres interne au µC 80C535 (SFR) #include // Commandes le l'afficheur LCD #include // E/S standard (ex. printf...) // Equivalences : #define ON 1 #define OFF 0 // Fonctions locales (Prototypes) : void it_CAN(void)interrupt 8 using 2; // Fonction interruption CAN void it_P10_MARCHE(void) interrupt 10 using 1; // Fonction marche void it_P11_ARRET(void) interrupt 11 using 3; // Fonction arret // Definitions particulières (zone SFR ou RAM externe) : at 0x9000 xdata unsigned char high_BG; //definition partie haute barregraphe + leds vertes, oranges, rouges at 0x8000 xdata unsigned char low_BG; //definition partie basse barregraphe // Variables Globales : long signal, consigne,comp,mesure; int indice,etat; unsigned int tab_val[]={0x0C,0x08,0x10,0x30,0x20,0x40,0xC0}; //tableau pour mise on Leds // ================ ZONE PROGRAMME ============================================================== /******************************************************** Nom : main() Objet : Affichage a intervalle de confiance Paramètres : - d'appel : aucun - de retour : aucun *********************************************************/ void main () { clrscr(); printf("TP4s ARRET\n\n"); // affichage LCD // phase d'initialisation : P5 = 0; // Reset des afficheurs 7 segments signal=0; consigne=0; //reset etat=OFF; //etat initial arret high_BG=0; //extinction leds low_BG=0; //extinction leds I3FR=0; //Front montant sur P1.0 (marche) IEX3=0; //Reset drapeau EX3=1; //Autorisation IRQ IEX4=0; //Reset drapeau EX4=1; //Autorisation IRQ MX2=0,MX1=1,MX0=0; //conversion canal 0 ADM=0; //conversion monocoup DAPR=0x00; //lancement premiere conversion EADC=1; //autorisation interruption CAN IADC=0; //Reset Flag CAN IP0=(IP0&0xF6)|0x08; //priorite maximum sur arret puis sur CAN IP1=(IP1&0xF6)|0x09; EAL=1; //autorisation globale // PROGRAMME PRINCIPAL : while(1) // boucle infinie { if(etat==ON) //Test si etat marche { DAPR=0x00; //lance une conversion signal=mesure; //copie la mesure dans la variable signal } else //si etat arret { DAPR=0x00; //lance conversion consigne=mesure; //copie la mesure dans la variable consigne } comp=signal-consigne; //calcul difference entre signal etconsigne //printf("%ld-%ld=%ld \n\n",signal,consigne,comp); //affichage difference if(etat==ON) //si etat marche se place dans un des cas du tableau { if(comp<-1000) indice=0; if(comp>-1000&comp<-500) indice=1; if(comp>-500&comp<-100) indice=2; if(comp>-100&comp<100) indice=3; if(comp>100&comp<500) indice=4; if(comp>500&comp<1000) indice=5; if(comp>1000) indice=6; } high_BG=tab_val[indice]; //allume les leds adequates } // end while(1) } // end main /******************************************************** Nom : can Objet : analyse resultat conversion Paramètres : - d'appel : aucun - de retour : aucun *********************************************************/ void it_CAN(void)interrupt 8 using 2 { IADC=0; //reset flag mesure=ADDAT; //copie resultat conversion dans variable mesure mesure=mesure*196/10+1; //mets la mesure en mV } //Retour /******************************************************** Nom : Sous programme marche Objet : Mise en marche Paramètres : - d'appel : aucun - de retour : aucun *********************************************************/ void it_P10_MARCHE(void)interrupt 10 using 1 { printf("\nTP4s MARCHE \n"); //affichage etat=ON; IADC=0; //Reset flag CAN MX2=0,MX1=1,MX0=1; //conversion canal 3 ADM=0; //conversion continue } /******************************************************** Nom : Sous programme arret Objet : Arret conversion Paramètres : - d'appel : aucun - de retour : aucun *********************************************************/ void it_P11_ARRET(void)interrupt 11 using 3 { printf("\nTp4s ARRET \n"); //affichage etat=OFF; IEX4=0; //Rest flag MX2=0,MX1=1,MX0=0; //conversion sur P6.2 ADM=0; //Conversion monocoup }