/* ********************************************************************** * File S1deb2.C - Rel. 1.1 con uC/51 V. 1.10.7 * * GRIFO(R) via Dell'Artigiano 8/6 40016 S. Giorgio di Piano (BO) * * Schede: GPC 552 d.s. 180796 e DEB01 o TIO16 * * Tel. +39 051 892052 Fax. +39 051 893661 * * http://www.grifo.com http://www.grifo.it * * sales@grifo.it tech@grifo.it grifo@grifo.it * * by Graziano Gaiba del 10.09.03 * ********************************************************************** Rel. 1.1 - 10.09.2003 by Graziano Gaiba Con un flat da 20 vie si collega il CN2 della GPC552 al CN15 della DEB01 o al CN1 della TIO16. Tale programma visualizza sul terminale lo stato dei PORT A e C del PPI 8255. */ #include #include #include // Frequenza di clock della CPU usata #define FCLOCK 22118400 // Indirizzi allocazione registri delle periferiche di bordo. static unsigned char PORTA @ 0xFFF8, PORTB @ 0xFFF9, PORTC @ 0xFFFA, CNT @ 0xFFFB; /********* Funzioni di utility generale e di gestione sezioni hw ***********/ void iniser(unsigned long baud) /* Inizializza la linea seriale con: Bit x chr = 8 Stop bit = 1 Parity = None Baud rate = baud usando come baud rate generator il timer 1. */ { SCON=0x052; // Modo 1, abilita ricevitore TMOD&=0x00F; // Timer 1 in modo auto-reload TMOD|=0x020; TR1=0; // Stop al TIMER 1 TH1=256-((2*FCLOCK)/(384*baud)); // baud a 14.7456 MHz PCON=PCON|0x080; // Setta SMOD=1 per baud rate alti TR1=1; // Start al TIMER 1 } // Attesa di assestamento dei segnali void setup(void) { unsigned int i; for(i=10000; i!=0; i--) ; } // Ritardo per non saturare la porta seriale void ritardo(void) { unsigned int i; for(i=0xffff; i!=0; i--) ; } // Inizializza l'82c55 con il valore passato nel parametro void init8255(unsigned char c) { CNT=c; } // Legge il valore del port A dell'82c55 unsigned char getPortA(void) { return PORTA; } // Legge il valore del port B dell'82c55 unsigned char getPortB(void) { return PORTB; } // Legge il valore del port C dell'82c55 unsigned char getPortC(void) { return PORTC; } // ************************** Programma principale *************************** void main(void) { setup(); // Attesa di assestamento dei segnali iniser(19200); TI=0; RI=0; // Commentare se si usa la seriale in polling (SIOTYPE=p oppure k) ES=1; // Abilita interrupt porta seriale EA=1; // Abilitazione interrupt // Inizializzazione del PPI 8255. init8255(0x9B); // PORT A, B, C in INPUT. puts("********************* Demo S1DEB2 **********************"); puts(""); puts("Lo stato dei port A e C viene stampato continuamente in esadecimale."); puts(""); for (;;) // Loop infinito. { printf("Stato del Port A: %2X Stato del Port C : %2X\r", getPortA(), getPortC()); ritardo(); // Latenza per non saturare la porta seriale } }