Hallo Miteinander,
ich habe ein kleines Testprogramm für eine schnelle bidirektionale Kommunikation zwischen ASURO und PC geschrieben.
Drückt man die Space-Taste im Terminalprogramm, liefert der ASURO bei jedem Dastendruck einen aufsteigenden Zählerwert zurück. Wird eine andere Taste gedrückt, schickt der Asuro das Zeichen 'E' für Error zurück.
Beim Einschalten des Asuro meldet sich der Asuro mit
-- ASURO Ready --
Connection OK
und jetzt das Problem:
sendet man die Einschaltmeldungen 3 Mal hintereinander, hängt sich der ASURO auf. Ich habe alles probiert, aber jetzt fällt mir nichs mehr ein. Gibt es Probleme mit dem mitgelieferten Makefile ? Ich habe keine Idee mehr.
Hier das Programm:
Code:
#include "asuro.h"
typedef unsigned char byte;
/*******************************************************************************
Kommandos zur Ansteuerung der Test-LED
*******************************************************************************/
void toggle_led()
{
static byte k=0;
if (k==0)
{
StatusLED(GREEN);
k=1;
}
else
{
StatusLED(YELLOW);
k=0;
}
}
void blink_led(byte n)
{
int k;
do
{
for (k=1;k<10000;k++); /* Verz�erung */
toggle_led();
}while(n--);
}
void chputchar(byte zeichen)
{
UCSRB = 0x08; // enable transmitter
UCSRA=UCSRA | TXC; // clear transmitter flag
while (!(UCSRA & 0x20)); // wait for empty transmit buffer
UDR = zeichen;
while (!(UCSRA & 0x40));
}
byte receive()
{
byte c;
/* Warten auf ein Zeichen von der seriellen Schnittstelle */
// c=ser_getchar();
SerRead(&c, 1, 0);
toggle_led();
return c;
}
void send(byte zeichen)
{
SerWrite(&zeichen,1);
// chputchar(zeichen);
}
#define TEST 0x20 /* Space als Testzeichen */
unsigned int uiBuffer[10];
int main(void)
{
byte command,n;
byte temp=0,temp2,temp3;
Init();
SerWrite("\n\r-- ASURO Ready --\n\r",21);
SerWrite("Connection OK\n\r",15);
// SerWrite("\n\r-- ASURO Ready --\n\r",21);
// SerWrite("Connection OK\n\r",15);
// SerWrite("\n\r-- ASURO Ready --\n\r",21);
// SerWrite("Connection OK\n\r",15);
while(1)
{
/* Warten auf ein Kommando der seriellen Schnittstelle */
command = receive();
switch(command)
{
case TEST:
{
/* sehr ntzliches Testkommando, sendet bei jedem 'Space' drcken
einen um Eins erh�ten Wert */
send(n++);
}
break;
default:
{
StatusLED(RED);
send('E'); /* Falls kein bekanntes Kommando, 'E' fr Error senden */
}break;
}
}
return 0;
}
Lesezeichen