/********************************************************************** ** Programma: S1DEB5.BAS - Versione : 1.1 - 11 Novembre 1999 ** ** Compilatore : GCTR V. 1.1 ** ** Scheda : GPC(r) 188F ** ** Ditta: grifo(r) ITALIAN TECHNOLOGY ** ** Via Dell' Artigiano 8/6 40016 San Giorgio di Piano (BO) ** ** Tel.+39 051 892 052 Fax +39 051 893 661 ** ** http://www.grifo.com http://www.grifo.it ** ** sales@grifo.it tech@grifo.it grifo@grifo.it ** ** ** ** Realizzato da: Graziano Gaiba ** ********************************************************************** Questo programma scrive sul port A il valore del port C se lo switch 1 del dip switch della GPC(r) 188F e' OFF, il valore negato del port C in caso contrario. */ #include #include #include // // ******************* Dichiarazione delle costanti ************************ // // Registri del port ppi 8255 const unsigned int PA = 0x0F200; // Valore del port A const unsigned int PB = 0x0F201; // Valore del port B const unsigned int PC = 0x0F202; // Valore del port C const unsigned int RS = 0x0F203; // Registro di controllo const unsigned int SW = 0x0F300; // Banco dei Dip Switch // Registri linea seriale B const unsigned int RSB = 0x0F080; // Registro di controllo const unsigned int RDB = 0x0F081; // Registro dati // // ******************** Dichiarazione delle procedure *********************** // // Inizializza la seriale B void iniserb (unsigned long baud,unsigned char bitxchr,unsigned char stopbit,unsigned char parity); // Pulisce lo schermo void clrscr (void); // // *************************** Programma main ****************************** // void main() { iniserb(19200, 8, 1, 0); //Inizializza la seriale B clrscr(); cprintf(" Programma dimostrativo 5 per la sezione 1 della scheda DEB(r) 01\r\n\n"); cprintf(" Riporta sul port 0 lo stato del port 1 se lo switch 1 e' ON, altrimenti\r\n\n"); cprintf(" riporta sul port 0 lo stato del port 1 negato.\r\n\n"); cprintf(" Esecuzione in corso...\r\n\n"); outportb(RS, 0x8B); // Configura in ingresso i port B e C // In uscita il port A do { if(inportb(SW) & 0x01) // Testa il valore dello switch 8 { // Se il bit e' 1 lo switch e' OFF (logica negata) outportb(PA, ~inportb(PC)); // Quindi poni in uscita il port 1 complementato } else // Altrimenti { outportb(PA, inportb(PC)); // Copia il port 1 sul port 0 } } while(1); // Ripete all'infinito } // // ****************************** Fine del main ****************************** // void iniserb (unsigned long baud,unsigned char bitxchr,unsigned char stopbit,unsigned char parity) /* Inizializza la linea seriale ser con il protocollo definito nei parametri baud (150 - 115200), bitxchr (5,6,7,8), stopbit (1,2) e parity (0=none, 1=odd, 2=even). */ { unsigned int timec; unsigned char d; outportb(RSB,0x00A); // seleziona funzionamento standard outportb(RSB,0x000); outportb(RSB,0x00B); // TxC = RxC = Baud Rate generator interno outportb(RSB,0x050); timec=(345600/baud)-2; // Programma Baud Rate con quarzo da 11.0592 MHz outportb(RSB,0x00C); outportb(RSB,(timec & 0x000FF)); outportb(RSB,0x00D); outportb(RSB,(timec >> 8)); outportb(RSB,0x00E); // no local loopback, no auto echo, abilita baud outportb(RSB,0x003); // rate generator interno outportb(RSB,0x00F); // disabilita alcune sorgenti interrupt outportb(RSB,0x000); d=0x040; // clock x 16 if (stopbit==1) d=d | 0x004; // 1 stop bit else d=d | 0x00C; // 2 stop bit switch (parity) { case 0: d=d; // No parity break; case 1: d=d | 0x001; // Odd parity break; case 2: d=d | 0x003; // Even parity break; } outportb(RSB,0x004); outportb(RSB,d); switch (bitxchr) { case 5: d=0x008; // 5 Bit x chr, Tx enable break; case 6: d=0x048; // 6 Bit x chr, Tx enable break; case 7: d=0x028; // 7 Bit x chr, Tx enable break; case 8: d=0x068; // 8 Bit x chr, Tx enable break; } outportb(RSB,0x005); outportb(RSB,d); switch (bitxchr) { case 5: d=0x001; // 5 Bit x chr, Rx enable break; case 6: d=0x081; // 6 Bit x chr, Rx enable break; case 7: d=0x041; // 7 Bit x chr, Rx enable break; case 8: d=0x0C1; // 8 Bit x chr, Rx enable break; } outportb(RSB,0x003); outportb(RSB,d); outportb(RSB,0x001); // Disabilita interrupts outportb(RSB,0x000); } void clrscr(void) /* Effettua la funzione di clear screen per una generica console */ { unsigned char r; putch('\r'); for (r = 0; r < 25 ; r++) { putch('\n'); // Trasmette 25 Line Feed } } // // ************************ Fine del programma *************************** //