/********************************************************** Projet : tp41.prj Fichier(s) : TP_41.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 : // 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 0x8000 xdata unsigned char low_BG; //definition partie basse barregraphe at 0x9000 xdata unsigned char high_BG; //definition partie haute barregraphe // Variables Globales : int indice,val_graphe; unsigned int tab_val[]={0x0000,0x0001,0x0003,0x0007,0x000F,0x001F,0x003F,0x007F,0x00FF,0x01FF,0x03FF}; //tableau pour mise on Leds barregraphe // ================ ZONE PROGRAMME ============================================================== /******************************************************** Nom : main() Objet : Paramètres : - d'appel : aucun - de retour : aucun *********************************************************/ void main () { clrscr(); printf("TP41 BARREGRAPHE\n"); printf("ARRET\n\n"); // affichage LCD // phase d'initialisation : P5 = 0; // Reset des afficheurs 7 segments low_BG=0; //reset partie basse barregraphe high_BG=0; //reset partie haute barregraphe I3FR=0; //Front montant sur P1.0 (marche) IEX3=0; //Reset drapeau EX3=1; //Autorisation IRQ IEX4=0; //Reset drapeau EX4=1; //Autorisation IRQ ADM=1; //mode continu sur CAN MX2=0 , MX1=1 , MX0=0; //choix du canal P6.2 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 { } // 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 indice=ADDAT/25; val_graphe=tab_val[indice]; low_BG=val_graphe; high_BG=val_graphe/256; } //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("MARCHE \n\n"); //affichage IADC=0; //reset flag CAN EADC=1; //autorise IRQ CAN DAPR=0x00; // demarrage conversion } /******************************************************** 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("ARRET \n\n"); //affichage IEX4=0; //reset Flag EADC=0; //blocage des IRQ du CAN }