Atmel 89C51CC03CA mit Atisp.dll programmieren

Gast #746123
Lesenswert?
• ▲
▼
Hallo,

ich programmiere unter Delphi ein Tool zum automatisierten Programmieren 
mehrerer 89C51 Controller. Dazu benutze ich die Atisp.dll, auf die auch 
FLIP aufsetzt. Allerdings habe ich folgendes Problem: sobald ein 
Controller programmiert ist, ist der CAN Port blockiert, obwohl 
ispClosePort und ispCancel erfolgreich aufgerufen wurden. Danach kann 
ich zwar ispInit aufrufen (gibt auch true zurück), alle anderen 
Funktionen (z.B. ispSelectDevice od. ispSelectCommHardware) werden aber 
mit false beendet. Hat jemand vielleicht das gleiche Problem gehabt, 
oder weiss eine Lösung?

MfG 2takt
Gast #746125
Lesenswert?
• ▲
▼
Hallo,

ich programmiere unter Delphi ein Tool zum automatisierten Programmieren
mehrerer 89C51 Controller. Dazu benutze ich die Atisp.dll, auf die auch
FLIP aufsetzt. Allerdings habe ich folgendes Problem: sobald ein
Controller programmiert ist, ist der CAN Port blockiert, obwohl
ispClosePort und ispCancel erfolgreich aufgerufen wurden. Danach kann
ich zwar ispInit aufrufen (gibt auch true zurück), alle anderen
Funktionen (z.B. ispSelectDevice od. ispSelectCommHardware) werden aber
mit false beendet. Hat jemand vielleicht das gleiche Problem gehabt,
oder weiss eine Lösung?

MfG 2takt
Gast #1190563
Lesenswert?
• ▲
▼
Hallo,

ich hatte das gleiche Problem. Meine Lösung:
Nur "ispClosePort" aufrufen, und nicht "ispCancel". Dann klappt's 
mehrfach hintereinander mit "ispInit" etc...

Is' komisch, ja. Funktioniert aber. Hope this helps...


Bye
Alexander
#1392966
Lesenswert?
• ▲
▼
Ich möchte dies auch programmieren, bekomme aber bei ispSelectDevice 
immer false zurück. IspInit kommt ist aber true.Die Funktion habe ich 
wie folgt deklariert:


function ispSelectDevice(device:LongInt):boolean;
stdcall; external 'AtJniIsp.dll';

Aufruf:

if ispInit then begin
    Memo1.Lines.Add('Init OK');
  end
  else begin
    Memo1.Lines.Add('Init failed');
    Exit;
  end;

  dev:=integer(AT89C51CC03);
  if ispSelectDevice(dev) then begin
    Memo1.Lines.Add('Device select OK');
  end
  else begin
    Memo1.Lines.Add('Device select failed');
    Exit;
  end;

Hat jemand ein Beispielprogramm, welches schon läuft?
#1393150
Lesenswert?
• ▲
▼
da es offensichtlich ein C DLL ist, muss man nicht stdcall, sondern 
cdecl nehmen. Damit geht es nun:

function ispSelectDevice(device:LongInt):Word; //boolean;
cdecl; external 'AtIsp.dll';


Nun macht aber der Aufruf Probleme:
status := ispOpenCanPort(250, 0, 1, 1, 0, 115200);

function ispOpenCanPort(bitrate: Longword; pTYpe: Byte; port:word; 
channel:Byte = 1; CRIS: Byte =0; baudrate:LongWord=115200):LongWord;
cdecl; external 'AtIsp.dll';

Am Ende des Aufrufes kommt dann immer Zugriff bei Adresse xxxxxx, 
Schreiben bei Adresse 0

Vielleicht soll ich aber in ein Delphiforum wechseln, da aber hier schon 
Experten sind, die das schon gelöst haben, wollte ich hier mal anfragen.

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.