/********************************************************************** ** Programma: S1DEB7.C - Versione : 1.1 - 04 Agosto 1999 ** ** Compilatore : HI-TECH C for 8051 V. 7.60 ** ** Scheda : GPC(r) 323 ** ** 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 fa scorrere l'accensione di un LED in una direzione o nell'altra a seconda dello stato dello switch 1; se questo e' OFF scorre dai LED rossi verso quelli gialli, se e' ON scorre nella direzione opposta. Per facilitare la visualizzazione dello stato delle linee è necessario collegare con un cavo flat a 20 poli, il connettore CN7 della GPC(r) 323 al connettore CN15 della DEB 01. */ #include<8051.h> #include // // ******************** Direttive del compilatore ************************** // // Sono incorporate nel file S1DEB7.PRJ // // ******************** Dichiarazione delle costanti *********************** // volatile far unsigned char Pda @ 0xFFFC; // Registro dati del portA volatile far unsigned char Pdb @ 0xFFFD; // Registro dati del portB volatile far unsigned char Pdc @ 0xFFFE; // Registro dati del portC volatile far unsigned char Cnt @ 0xFFFF; // Registro di controllo volatile far unsigned char Dsw1 @ 0xFFF9; // Mappatura del dip switch // // *************************** Programma main ****************************** // void main() { unsigned int shifter; unsigned int delay; printf(" Programma dimostrativo 7 per la sezione 1 della scheda DEB(r) 01\n\n"); printf(" Fa scorrere un LED verso sinistra se lo switch 1 e' OFF, altrimenti\n\n"); printf(" lo fa scorrere verso destra.\n\n"); printf(" Esecuzione in corso...\n\n"); Cnt=0x82; // Configura in ingresso il port B, // In uscita i port A e C do { if(Dsw1 & 0x80) // Se il Dip 8 e' OFF { shifter=1; // Inizia a scorrere dai LED rossi verso gli altri } else { shifter=0x8000; // Altrimenti fai viceversa } while(shifter!=0) { shifter=~shifter; // I led funzionano in logica negata Pda=shifter & 0x00FF; // Sui LED rossi vanno i primi 8 bits Pdc=shifter>>8; // Sui LED gialli vanno gli ultimi 8 bits shifter=~shifter; // Ripristina il valore della variabile if(Dsw1 & 0x80) // Anche il banco dei Dip Switch funziona in { // Logica negata. Se Dip 8 e' OFF (il bit e' 1) shifter=shifter<<1; // Fa scorrere a sinistra i bits di shifter } else { shifter=shifter>>1; // Fa scorrere a sinistra i bits di shifter } for(delay=0; delay<20000; delay++) ; // Ritardo per limitare ad un valore visibile // Il numero di scorrimenti } } while(1); // Ripeti all'infinito } // // ************************* Fine del programma *************************** //