Forum: Mikrocontroller und Digitale Elektronik ISD51: Problem mit der "ISDwait()" Funktion (uC AT89C51AC3)


von Denis (Gast)


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

von Ralf (Gast)


Lesenswert?

ist ISDwait() eine Lib-Funktion oder gibts den Sourcecode?

Ralf

von Denis (Gast)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.