ISD51: Problem mit der "ISDwait()" Funktion (uC AT89C51AC3)

Gast #1700378
Lesenswert?

Hallo,

kennt sich hier jemand mit dem ISD51 Debugger von der Fa. Keil aus?
Ich versuche meinen Mikrokontroller AT89C51AC3 mit dem ISD51 zu 
debuggen, aber in dem Debugging-Modus bleibt mein Programm stehen und 
will nicht aus der Funktion „ISDwait()“ raus springen.

Auf diese Weise funktioniert das Debuggen:

main(){
  …
  initUART();
  ISDinit();
  …
  while(1){
    ISDcheck();
    …
  }
}

Problem: Auf diese Weise funktioniert das Debuggen nicht:

main(){
  …
  initUART();
  ISDwait();  // hier bleibt das Prog. immer stehen!!!
  …
  while(1){
    …
  }
}

In der Funktion „ISDwait()“ wird (über die RS232 Schnittstelle) der Wert 
0xA5 von meiner IDE (Keil Debugger) erwartet, diesen konnte ich mit 
Hyperterminal empfangen. Wenn dieser HEX-Wert vom Mikrokontroller 
empfangen wird, muss folgendes passieren:
 - Die Kommunikation mit der IDE ist aufgebaut
 - ISD wird initialisiert
 - Programm muss weiter laufen

In meinem Fall wird 0xA5 wird empfangen, aber das Programm läuft nicht 
weiter.

(Info: MON51 kann ich als Alternative nicht verwenden)

Vielen Dank im Voraus.

Gruß
Denis
Gast #1700428
Lesenswert?

Hallo Ralf,

diese Funktion liegt in der ISD51.H Headerdatei, welche im Verzeichnis 
„C:\Keil\C51\ISD51“ liegt.


Dateiausschnitt:
...
define ISDinit()                                                      \
  if (ES == 0)  {        /* Is ISD51 UART already initialized?     */  \
    __isd_init ();       /* Init ISD51 core & enable ISD interrupt */  \
  }

#define ISDwait()                                                      \
  while (1)  {                                                         \
    if (RI)  {           /* wait until Debugger sends 0xA5 */          \
      if (SBUF == 0xA5)  break;                                        \
      RI = 0;                                                          \
    }                                                                  \
  }                                                                    \
  __isd_init ();         /* Init ISD51 core & enable ISD interrupt */

#define ISDcheck()                                                     \
  if (ES == 0)  {        /* Is ISD51 UART already initialized?     */  \
    if (RI)  {           /* wait until Debugger sends 0xA5 */          \
      if (SBUF != 0xA5) RI = 0;                                        \
      else              __isd_init (); /* Init core & ISD interrupt */ \
    }                                                                  \
  }
...

Diese wird in mein Programm eingebunden.

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