/********************************************************** Projet : tpxx.prj Fichier(s) : TP_xx.c Objet : Introduction au C sur microcontroleur Gestion des entrees / sorties Auteurs : Hensinger Benoît / Cuenot Gaël Binome : 3 Groupe : RLI 1 Date création : **********************************************************/ // Fichiers à inclure : #include // Commandes du moniteur de mise au point #include // déclaration des registres interne au µC 80C535(SFR) #include // Commandes de l'afficheur LCD #include // Equivalences : #define OFF 0 #define ON 1 // Fonctions externes : // Fonctions locales (Prototypes) : void tempo(unsigned int); // Fonction temporisation (delai) void it_p10_start(void) interrupt 10 using 1; void it_p11_arret(void) interrupt 11 using 1; void it_can(void) interrupt 8 using 1; // Definitions particulières (zone SFR ou RAM externe) : at 0x90 sbit in_bpmode; // in_bpmode est le nom donné à la ligne P1.0 (adr. 0x90) at 0xFC sbit out_led; // out_led est le nom donné à la led P5.4 (jour) at 0x8000 xdata unsigned char low_BG; at 0x9000 xdata unsigned char high_BG; // Variables Globales : //unsigned char low_BG,high_BG; unsigned char i; code unsigned int Tab_Val[11]={0x0000,0x0001,0x0003,0x0007,0x000F,0x001F,0x003F,0x007F,0x00FF,0x01FF,0x03FF}; // ================ ZONE PROGRAMME ============================== /******************************************************** Nom : main() Objet : gestion de la led on/off P5.4 par le bouton mode P1.0 Paramètres : - d'appel : aucun - de retour : aucun *********************************************************/ void main () { clrscr(); low_BG=0; //extinction leds BG high_BG=0; //extinction leds BG P5=0; //extinction Afficheur 7 segments IEX4=0; //Reset flag IEX4 (P1.1) I3FR=0; //FD sur P1.0 IEX3=0; //Reset flag IEX3 (P1.0) EX3=1; //Autorisation EX4=0; //inhibition de P1.1 //Définition pour le CAN ADM=1; //CAN en mode continue //choix de l'entrée AN2 (P6.2) MX0=0; MX1=1; MX2=0; IADC=0; //Reset flag //EADC=1 //Autorisation individuelle EAL=1; //autorisation globale //Priorités Basse sur le CAN et haute sur Arret //IP0=(IP0&0xF2)|0x08; //IP1=(IP1&0xF2)|0x00; IP0=(IP0&0xF6)|0x08; //priorite maximum sur arret puis sur CAN IP1=(IP1&0xF6)|0x09; //Priorite 3 sur le CAN: //IP0=(IP0&0xF2)|0x0D; //IP1=(IP1&0xF2)|0x01; // IP0=(IP0&0xF6)|0x08; //priorite maximum sur arret puis sur CAN // IP1=(IP1&0xF6)|0x09; printf("---> TP_4.1 <---\n"); while(1); } // end main /******************************************************** Nom : it_p10_start Objet : Depart Paramètres : - d'appel : aucun - de retour : aucun *********************************************************/ void it_p10_start(void) interrupt 10 using 1 { tempo(100); //Anti rebonds printf("\n\n---> MARCHE <---"); DAPR=0x00; //Choix de conversion 0-5V +demarage IADC=0; //Reset du flag CAN EADC=1; //autorisation du CAN EX4=1; //Autorisation de P1.1 } /******************************************************** Nom : it_p11_arret Objet : Arret Paramètres : - d'appel : aucun - de retour : aucun *********************************************************/ void it_p11_arret(void) interrupt 11 using 1 { tempo(100); //Anti rebonds printf("\n\n---> ARRET <---"); EADC=0; //interdiction du CAN IEX4=0; //Reset flag pour P1.1 low_BG=0; high_BG=0; //IEX3=0; } /******************************************************** Nom : it_can Objet : Conversion Paramètres : - d'appel : aucun - de retour : aucun *********************************************************/ void it_can(void) interrupt 8 using 1 { IADC=0; //Reset du flag CAN i=ADDAT/25; low_BG=Tab_Val[i]; high_BG=Tab_Val[i]/256; printf("\n\n valeur de i: %d",i); // EX3=0; //interdiction P1.0 } /******************************************************** Nom : tempo Objet : base de temps logicielle de 1 ms Paramètres : - d'appel : durée de la tempo en ms - de retour : aucun *********************************************************/ void tempo(unsigned int t) { int ttempo; while (t != 0) { for (ttempo = 1;ttempo < 493;ttempo++); t--; // décrémentation de la variable de contrôle } } // end tempo