mikrocontroller.net

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


Autor: Denis (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ist ISDwait() eine Lib-Funktion oder gibts den Sourcecode?

Ralf

Autor: Denis (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.