UART Empfang in C (AT90S2333), ohne STK

Gast #7829
Lesenswert?

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);
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren