AtmelISP, AT89S52

Gast #721866
Lesenswert?

Hallo,

ich versuche gerade, mit U. Bangerts Programm AtmelISP (Aktuelle Version 
vom 21.5.2005) den AT89S52 zu programmieren. Beim Laden einer 
(minimalen) Datei erhalte ich jedoch die Meldung "The Hexfile you are 
going to load contains addresses beyond the buffer capacity...", obwohl 
die Datei passen müsste.

Beim Versuch, den Buffer zu editieren, kommt die Meldung "Invalid 
SelStart". Wähle ich zum Laden eine anderes Device und wähle danach den 
89S52, dann lässt er sich programmieren, aber das kann ja nicht im Sinne 
des Erfinders sein.

Code:
1
/*-----------------------------------------------------------------------------
2
Definitions for P1 (8 bits), P1.0, and P1.1.
3
-----------------------------------------------------------------------------*/
4
sfr P1 = 0x90;        /* SFR for P1 */
5

6
sbit P1_0 = P1^0;     /* SFR for P1.0 */
7
sbit P1_1 = P1^1;     /* SFR for P1.1 */
8

9
/*-----------------------------------------------------------------------------
10
MAIN C function
11
-----------------------------------------------------------------------------*/
12
void main (void)
13
{
14
P1_0 = 1;                  /* Configure P1.0 as an input */
15

16
/*-----------------------------------------------
17
This loop reads P1.0 and writes the value read
18
to P1.1.
19

20
Open the Port 1 Dialog from the Peripherals Menu
21
and change the value of the P1.0 Pin.  When you
22
set P1.0 LO, P1.1 outputs LO.  When you set 
23
P1.0 HI, P1.1 outputs HI.
24
-----------------------------------------------*/
25
while (1)
26
  {
27
  P1_1 = P1_0;            /* Copy P1.0 to P1.1 */
28
  }
29
}
30

31
/*-----------------------------------------------------------------------------
32
-----------------------------------------------------------------------------*/

(Ist ein Beispielcode von Keil)


Weiß jemand Rat?

Grüße Alex
Gast #721921
Lesenswert?

Ja habs mit dem Demo von Keil compiliert.
Wo kann ich das einstellen, auf welche Adresse ich das Programm gelinkt 
haben möchte?
Muss ich das schon in Keil einstellen, bevor ich compilier?
In AtmelISP hab ich nämlich nichts gefunden, wo ich einstellen könnte, 
wohin das Programm geladen wird.

Grüße Alex
Gast #721948
Lesenswert?

Also der Hex-Code sieht ok aus. Dein Programm wird ab Adresse 0800H 
geladen. Das ist ok, weil die Demoversion von Keil einen 2KByte Offset 
generiert. Auf Adresse 0000H (Startvector) steht auch der richtige 
Einsprungpunkt. An Keil sollte es nicht liegen.
Gast #730996
Lesenswert?

Dane,
So habe MIDE heruntergeladen.
Compilen, downloaden klappt alles super, aber ...

Folgendes problem:
Ich will ein ganzen Port auf ein setzen, nur es passiert nichts.

Programmcode:
1
#include <at89x52.h>
2

3
void main (void) {
4
  P1 = 0xFF;             
5

6
  while (1) {
7
      P1 |= 0xFF;          
8
  }
9
}

Hex-Code:
:03000000020003F8
:03005C0002005F40
:05005F0012006480FEA8
:030064007590FF95
:07006700E5907590FF80F9A0
:06003200E478FFF6D8FDA2
:080010007900E94400601B7A4D
:05001800009000727869
:03001D000075A0CB
:0A00200000E493F2A308B800020503
:08002A00A0D9F4DAF275A0FF81
:080038007800E84400600A7939
:030040000075A0A8
:0600430000E4F309D8FC03
:080049007800E84400600C7926
:0B00510000900000E4F0A3D8FCD9FAF6
:03000300758107FD
:0A00060012006EE582600302005F45
:04006E007582002275
:00000001FF


Ich bin mir auch nicht sicher, ob das HEX-File richtig in den 
Mikroconroller geladen wird. Wenn ich, nachdem ich das HEX-File 
downgeloadet habe, Read Code Memory to Buffer anwähle, stehen im Buffer 
nur F's, was aber nicht meinem HEX-Code entspricht.

Bitte um Hilfe.

Grüße Alex
Gast #731057
Lesenswert?

Jo mach ich. Ich verwende ATMEL ISP.

Ich beschreibe mal kurz meine Vorgangsweise:

Ich compiliere den c Code mit dem SDCC Compiler (Als grafische Umgebung 
verwende ich MIDE).

C-Code:
1
#include <at89x52.h>
2

3
void main (void) {
4
  P0 = 0xFF; 
5
  P1 = 0xFF;   
6
  P2 = 0xFF;
7
  P3 = 0xFF;          
8

9
  while (1) {
10
      P0 |= 0x00;   
11
      P1 |= 0x00; 
12
      P2 |= 0x00; 
13
      P3 |= 0x00;        
14
  }
15
}

Nun habe ich das Hex-File.

Ich lade nun das Hex-File in den Buffer (Buffer -> Load from Disk -> As 
a Intel HEX File). Danach überprüff ich ob alles ordnngsgemäß in den 
Buffer geladen wurde (Buffer -> Edit). Wenn alles passt, lad ich nun den 
ganzen Kram in den Speicher des Mikrocontrollers (Device -> Write Buffer 
to Code Memory). Danach öffne ich das Terminal um das Programm zu 
starten (Terminal). Nur passiert nichts.

Grüße Alex
#731069
Lesenswert?

Mit dem Terminal kannst du über UART mit deinem Controller 
kommunizieren, das hat mit dem Programmieren erstmal nix zu tun.

Bei Device->Verify Code-Memory kriegst du immer noch nen Fehler und der 
Bufferinhalt entspricht nicht deinem hex-file, oder?

Dann nochmal: Welche Programmierhardware (Board, Anschluss, 
evtl.Schaltplan) und wie ist der ATMELISP denn eingestellt(Parameters) ?
Gast #731080
Lesenswert?

Parameter:
http://www.imgwelt.de/show.php?code=41488P5V243

Bei meinem AT89S52 ist esg gar nicht möglich "Read Code Memory to 
Buffer" auszführen.
Zitat: "Simply choose the second entry if the <Device> menu, as shown 
above. Note that this option is only available if the current device is 
an AT89S8252 or an AT89S8253."
Also denke ich auch, dass es nicht möglich ist "Verify Code Memory 
auszuführen. Oder doch?

Wie starte ich dann das ganze Programm?

Ich verwende die STK500 zum prgrammieren.
Gast #731084
Lesenswert?

> P0 |= 0x00;
> P1 |= 0x00;
> P2 |= 0x00;
> P3 |= 0x00;

Das bringt nix, weil verodern mit 0 den Wert nicht ändert. Wie wärs mit 
P0++ o.ä. dann siehst du was am Port zucken. Ist nur so ne Idee.

Ralf
#731093
Lesenswert?

Alex wrote:
> Parameter:
> http://www.imgwelt.de/show.php?code=41488P5V243
>
> Bei meinem AT89S52 ist esg gar nicht möglich "Read Code Memory to
> Buffer" auszführen.
> Zitat: "Simply choose the second entry if the <Device> menu, as shown
> above. Note that this option is only available if the current device is
> an AT89S8252 or an AT89S8253."
> Also denke ich auch, dass es nicht möglich ist "Verify Code Memory
> auszuführen. Oder doch?
>
autsch... ich hab nen 8253 und daher nie sonderlich drauf geachtet ;)
>

> Ich verwende die STK500 zum prgrammieren.

Das STK500 tut nur für AVR-µC, für deinen '51 brauchst du ne andere 
Schaltung (Google fragen).
Gast #731104
Lesenswert?

Also mir wurde gesagt, es müsse mit der STK500 auch gehen.
Die Pins RESET, MOSI, SCL, MISO vom Prozessor sind ja an der richitgen 
Stelle.
Atmel ISP lädt das Programm ja ohne Probleme rüber.

P.S. Wie start ich das Programm denn, wenn nicht mit dem Terminal...

Grüße
#731123
Lesenswert?

Alex wrote:
> Also mir wurde gesagt, es müsse mit der STK500 auch gehen.
> Die Pins RESET, MOSI, SCL, MISO vom Prozessor sind ja an der richitgen
> Stelle.

Dann frag mal nach, wie das genau gehen soll- mir ist da nix bekannt.

> Atmel ISP lädt das Programm ja ohne Probleme rüber.

Steck mal das serielle Kabel vom stk ab und mach dann noch nen 
Programmierversuch... ;)



> P.S. Wie start ich das Programm denn, wenn nicht mit dem Terminal...


Naja, sobald der Reset nach dem Proggen weg ist, läuft das Ding los.

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