Gast
#7829
Das folgende Programm ist in AVR-GCC geschrieben und für AT90S2333 oder kompatibie. macht nichts anderes als: Wenn das Zeichen 'a' geschickt wird, geht die LED an Port P0 aus, wenn das Zeichen 's' empfangen wurde geht die LED wieder an. Hervorragend zum Testen geeignet. #define CPU_CLOCK 4000000 // Frequenz in Hertz, ggf ändern #include <io.h> // Für allgemeine I/O Funktionen #include <sig-avr.h> // Für interrupts notwendig #include <interrupt.h> // --''-- void init_serial(void) { // Das UART für den Empfang aktivieren sbi(UCSRB, RXEN); sbi(UCSRB, RXCIE); // Baudrate einstellen (ich weiss, geht über outp besser) asm volatile("ldi r16,4000000/(9600*16)-1" "\n\t" "out 0x09,r16"); } SIGNAL(SIG_UART_RECV) { switch(inp(UDR)) { case 'a': outp(0xFF, PORTB); break; case 's': outp(0x00, PORTB); break; default: break; } } void init_io(void) { // Alle Pins von Port B als Ausgänge konfigurieren outp(0xFF, DDRB); } int main(void) { init_serial(); // Alle seriellen Sachen initialisieren init_io(); // I/O Ports konfigurieren sei(); // Interrupts einschalten while(1); // Warteschleife return(0); }