/************************************************************************/ /**************** DIALOGUE AVEC L'INTERFACE RS232 ***********************/ /** UTILISATION DE L'INTERRUPTION BIOS N°14: 'Gestion des ports série' **/ /*************** Ecrit par I. Mouangue *********************************/ #include #include #include #include #include #define PORT_SERIE 0x14 /*********************************************************************/ int num_capt; /*********************************************************************/ void tempo(int duree) // durée en secondes: 1 = une seconde { long debut, fin = 0; debut = time(NULL); do { fin = time(NULL); } while (fin < debut+duree); } void initialisation_port(void) { union REGS registre; registre.h.ah = 0; /* N° de la fonction: Initialisation du Port */ registre.h.dh = 0; /* N° du Port dans DX: 0 = COM1 et 1 = COM2 */ registre.h.dl = 1; registre.h.al = 0xFF; /* Configuration du Port */ /* 9600 baud - 8 Bits - 2 Bits de Stop - Pas de parité */ int86(PORT_SERIE,®istre,®istre); } void etat_port(void) { union REGS registre; registre.h.ah = 3; /* N° de la fonction: Initialisation du Port */ registre.h.dh = 0; /* N° du Port dans DX: 0 = COM1 et 1 = COM2 */ registre.h.dl = 1; int86(PORT_SERIE,®istre,®istre); } void emission_port(int mot) { union REGS registre; registre.h.ah = 1; /* N° de la fonction: Initialisation du Port */ registre.h.dh = 0; /* N° du Port: 0 = COM1 et 1 = COM2 */ registre.h.dl = 1; registre.h.al = mot; /* Donnée à émettre */ int86(PORT_SERIE,®istre,®istre); } int lecture_port(void) { union REGS registre; registre.h.ah = 2; /* N° de la fonction: Initialisation du Port */ registre.h.dh = 0; /* N° du Port: 0 = COM1 et 1 = COM2 */ registre.h.dl = 1; int86(PORT_SERIE,®istre,®istre); return(registre.h.al); // Réception caractère. } int valeur_capteur(void) { static int valeur_capt; int numero = 1; cin >> numero; if (numero > 8 || numero < 1) { numero = 1; } switch (numero) { case 1: valeur_capt = 0; break; case 2: valeur_capt = 32; break; case 3: valeur_capt = 64; break; case 4: valeur_capt = 96; break; case 5: valeur_capt = 128; break; case 6: valeur_capt = 160; break; case 7: valeur_capt = 192; break; case 8: valeur_capt = 224; break; } num_capt = numero; return(valeur_capt); } void lecture_des_capteurs(void) { char suite; do { clrscr(); cout << "\n\t\t***** LECTURE DES CAPTEURS *****"; cout << "\n\n\tEntrée le Numéro du Capteur: "; emission_port(valeur_capteur()); cout << "\n\t\tCapteur N°"< Lecture = "<> suite; } while (suite != 'N' && suite != 'n'); } void commandes_des_relais(void) { int valeur = 1; char suite_rel; do { clrscr(); cout << "\n\t\t***** COMMANDE DES RELAIS *****"; cout << "\n\n\tValeur envoyé = "<> suite_rel; } while (suite_rel != 'N' && suite_rel != 'n' && valeur < 32); emission_port(0); } void main(void) { char choix; do { clrscr(); initialisation_port(); etat_port(); cout << "\n\t\t\t***** INTERFACE RS232 *****"; cout << "\n\n\t\t Lecture des Capteurs et Commande des Relais"; cout << "\n\n\t1- Lecture des capteurs: Taper ---> 'L' + Entrée"; cout << "\n\n\t2- Commande des relais : Taper ---> 'C' + Entrée"; cout << "\n\n\t3- Fin du programme : Taper ---> 'F' + Entrée"; cout << "\n\n\t\t Votre choix ? "; cin >> choix; switch (choix) { case 'L','l': lecture_des_capteurs(); break; case 'C','c': commandes_des_relais(); break; } } while (choix != 'F' && choix != 'f'); clrscr(); cout << "\n\n\n\n\t\t*** FIN DU PROGRAMME. A BIENTOT ! ***"; }