#include #include #include // Registres UART port COM2 #define ESC 0x1b #define THR_RBR 0x2F8 #define IER 0x2F9 #define IIR 0x2FA #define LCR 0x2FB #define MCR 0x2FC #define LSR 0x2FD #define MSR 0x2FE // ParamŠtres de la liaison #define DONNE_7 0x02 #define DONNE_8 0x03 #define STOP_1 0x00 #define STOP_2 0x04 #define NONE 0x00 #define IMPAIRE 0x08 #define PAIRE 0x18 #define DLAB 0x80 // AccŠs au diviseur de fr‚quence #define RAZ_DLAB 0x7F #define _600_BAUDS 192 #define _1200_BAUDS 96 #define _2400_BAUDS 48 #define _4800_BAUDS 24 #define _9600_BAUDS 12 #define INTR 0x23 // interruption interface s‚rie num‚ro 2 void interrupt ( *oldhandler)(void); unsigned char init_liaison; unsigned char car_recu; void interrupt handler(void) { puts("OK=OK=OK=OK=OK=OK"); } void main() { unsigned char car_lu; clrscr(); /* Initialisation du port s‚rie 7 bits de donn‚es, i bit de stop, parit‚ paire, 9600 bauds. */ outportb(IER,0x01); init_liaison = DONNE_7|STOP_1|PAIRE|DLAB; //DLAB positionn‚ pour //faire la s‚lection //de la vitesse de transmission. outportb(LCR,init_liaison); // Configuration de la vitesse 9600 bauds outportb(THR_RBR,_9600_BAUDS); //Puis, RAZ bit 7 du LCR init_liaison &= RAZ_DLAB; //Envoyer … nouveau la configuration au LCR avec le bit 7 (DLAB) … 0 outportb(LCR,init_liaison); /* sauvegarde l'ancien vecteur d'interruption */ oldhandler = getvect(INTR); /* installe le nouveau gestionnaire d'interruption*/ setvect(INTR, handler); // Boucle d‚mission et de r‚ception do { car_lu = getch(); // V‚rifier que le bit 5 du LSR, signifiant que le // tampon d'‚mission est vide, est … 1 while(!(inportb(LSR)&0x20)); // Emetre le caractŠre car_lu outportb(THR_RBR,car_lu); // V‚rifier que le bit 0 du LSR, signifiant qu'un // caractŠre est arriv‚, est … 1 while(!(inportb(LSR)&0x01)); car_recu = inportb(THR_RBR); // On vide aussi le tampon printf("%c",car_recu); } while(car_lu !=ESC); /* restaure l'ancien gestionnaire d'interruption */ setvect(INTR, oldhandler); }