Forum: Mikrocontroller und Digitale Elektronik Atmel 89C51CC03CA mit Atisp.dll programmieren


von 2takt (Gast)


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

von 2takt (Gast)


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

von softwareservice (Gast)


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

von Matthias 2. (zeras)


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?

von Matthias 2. (zeras)


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.

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.