#define F_CPU 8000000UL #include #include #include #include #include //************************************************************************ // Definebereich V2DIP1 //************************************************************************ #define R_SCLK PORTA &= ~(1<>= 1 ) { if (wr_byte & stelle) S_SDI; else R_SDI; S_SCLK; R_SCLK; // L/H Flanke } // Statusbit einlesen status = SDO_VNC; // Statusbit (0=Accept, 1=Reject) // hier sollte jetzt Prüfung von status erfolgen!!! S_SCLK; R_SCLK; // L/H Flanke // End Sequenz R_CS_VNC;; // SPI-Interface inaktiv S_SCLK; R_SCLK; // L/H Flanke _delay_ms(100); // Pause nur zum Test return status; } // *********************************************************************** // VNC1L - Empfangen eines Zeichens // SPI Mode // Rückgabe: Datenbyte // *********************************************************************** byte vnc_rd_byte(void) { byte stelle, daten, status; daten = 0; S_CS_VNC; // SPI-Interface aktiv S_SDI; // Startbit (immer 1) S_SCLK; R_SCLK; // L/H Flanke S_SDI; // RW-Bit (1=Read) S_SCLK; R_SCLK; // L/H Flanke R_SDI; // ADDR (0=Daten, 1=SPI-Statusinformation) S_SCLK; R_SCLK; // L/H Flanke // 8 Datenbits empfangen (MSB zuerst) for ( stelle = 0x80; stelle; stelle >>= 1 ) { if (SDO_VNC) daten |= stelle; S_SCLK; R_SCLK; // L/H Flanke } // Statusbit einlesen status = SDO_VNC; // Statusbit (0=New Data, 1=Old Data) // hier sollte jetzt Prüfung von status erfolgen!!! S_SCLK; R_SCLK; // L/H Flanke // End Sequenz R_CS_VNC; // SPI-Interface inaktiv S_SCLK; R_SCLK; // L/H Flanke _delay_ms(100); // Pause nur zum Test return daten; } // ******************************************************************** // Hauptprogramm // ******************************************************************** int main (void) { PORT_DEFS; // Portdefinition vnc_init(); // VNC1L-Initialisierung // VNC1L Bereitschaft abwarten indem auf > und CR geprüft wird while(vnc_rd_byte() != '>'); vnc_rd_byte(); // CR nach dem > jetzt noch abholen // VNC1L hat Promptzeichen > gesendet und kann jetzt neue Kommandos annehmen while(1) { S_LED_D1; // LED aus vnc_wr_byte('E'); // Echo senden vnc_wr_byte(0x0D); // CR senden _delay_ms(500); // Pause read_e = vnc_rd_byte(); // Echo empfangen read_cr = vnc_rd_byte(); // CR empfangen if ((read_e == 'E') && (read_cr == 0x0D)) R_LED_D1; // LED ein wenn Echo empfangen wurde _delay_ms(1000); // Pause } }