/* ********************************************************************** * File S1deb7.C - Rel. 1.1 con uC/51 V. 1.10.10 * * GRIFO(R) via Dell'Artigiano 8/6 40016 S. Giorgio di Piano (BO) * * Schede: GPC 554 d.s. 100997 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 26.09.03 * ********************************************************************** Rel. 1.1 - 26.09.2003 by Graziano Gaiba Con un flat a doppia intestazione 20 vie si collega il CN5 della GPC554 con un connettore a scatolino da 26 vie e al CN15 della DEB01 o al CN1 della TIO16 con un connettore da 20 vie. Tale programma fa scorrere l' accensione di un LED in una direzione o nell' altra, a seconda della posizione dello switch 1 di DSW1. */ #include #include #include // Frequenza di clock della CPU usata #define FCLOCK 22118400 // Indirizzi allocazione registri delle periferiche di bordo near unsigned char P4 @ 0xC0; near unsigned char P5 @ 0xC4; static unsigned char RUNDEB @ 0xFFFF; /********* 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 rendere visibile il movimento del LED void ritardo(void) { unsigned int i; for(i=0xffff; i!=0; i--) ; } // Imposta il valore del port A void setPortA(unsigned char v) { P4=v; } // Imposta il valore del port C void setPortC(unsigned char v) { P1=v; } // Restituisce il valore del port A unsigned char getPortA(void) { return P4; } // Imposta il valore del port C unsigned char getPortC(void) { return P1; } // Legge lo stato del jumper J2. // Restituisce 0x01 se J2 e' connesso // 0x00 se J2 e' non connesso unsigned char getJ2(void) { return (RUNDEB & 0x80 ? 0x00: 0x01); } // Legge lo stato del jumper J27. // Restituisce 0x01 se J7 e' connesso // 0x00 se J7 e' non connesso unsigned char getJ7(void) { return (P5 & 0x80 ? 0x00 : 0x01); } // Legge lo stato del jumper J8. // Restituisce 0x01 se J8 e' connesso // 0x00 se J8 e' non connesso unsigned char getJ8(void) { return (P5 & 0x40 ? 0x00 : 0x01); } // ************************** Programma principale *************************** void main(void) { unsigned char c; 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 puts("********************* Demo S1DEB7 **********************"); puts(""); puts("Fa scorrere l' accensione di un LED in una direzione o nell'altra a"); puts("seconda dello stato del jumper J2"); for (;;) // Loop infinito. { if(getJ2()) { c=1; } else { c=0x80; } setPortC(0xff); // Pulisce Port C while(c) { setPortA(~c); if(getJ2()) { c<<=1; } else { c>>=1; } // Ritardo per rendere visibile il movimento del LED ritardo(); } if(getJ2()) { c=1; } else { c=0x80; } setPortA(0xff); // Pulisce Port A while(c) { setPortC(~c); if(getJ2()) { c<<=1; } else { c>>=1; } // Ritardo per rendere visibile il movimento del LED ritardo(); } } }