AT89S52 programmieren

Hallo,

ich versuche einen AT89S52 µC zu programmieren, habe dabei jedoch so meine Probleme... Das programmiergerät hierfür will ich mir selber bauen. Als ersten Schritt wollte ich den Programming Enable Befehl an den µC senden und testen, ob dieser dann "0110 1001" zurück gibt (sollte er doch, oder?). Das ist mir aber noch nicht so richtig gelungen. Um das Signal zu senden, benutze ich einen von mir programmierten AT89C2051, der dann so ca. 2Bit pro Sekunde sendet, damit ich das Ganze besser beobachten kann.

Der MISO-Port vom Zielcontroller bleibt jedoch immer auf high. Ich bin mir auch nicht ganz sicher ob ich das Prinzip der seriellen Schnitstelle wirklich richtig verstanden habe. Z.Z. versuche ich es folgendermaßen: Nach dem Einschalten sind MOSI und SCK low. Dann wird MOSI je nach dem zu sendenden Bit eingestellt. SCK wird auf high gesetzt und nach einiger Zeit (im Moment zum testen noch 0.5s) wieder auf low. Dann wird das ganze mit dem nächsten Bit wiederholt. Für das 4. Byte, das ja nur gelesen werden soll werden dann beliebige Daten gesendet und MISO überwacht. Der Port bleibt jedoch immer auf high.

Was könnte ich falsch machen? Ich hab noch nicht all zu viel Erfahrung (keine :-) ) mit der Programmierung von µC. Es könnte also ein einfacher Fehler sein.

Gibt es ggf. auf der Seite von Atmel eine genaue Beschreibung der ISP Programmierung?

Gruß + Vielen Dank schon mal, Peter

Reply to
Peter
Loading thread data ...

Hallo Peter,

hat der Controller einen Takt? Für die Programmierung muß ausserdem RST aktiv (5V) sein.

ja, im Datenblatt:

formatting link

Gruß Ernst

Reply to
Ernst Schwab

Hi,

juchhu, jetzt klappts! Ich habe den 22.11840 MHz Quarz gegen einen mit 12MHz ausgetauscht und jetzt läufts! Ich verstehe zwar nicht, warum, da es beides (laut Reichelt) Grundwellenquarze waren, aber das ist jetzt erstmal sekundär für mich :-)

Trotzdem nochmal vielen Dank für deine Hilfe

Gruß Peter

Reply to
Peter

Nur nochmal zur Info: Am Quarz lag es doch nicht. Ich hatte die beiden Controller in der falschen Reihenfolge resettet, wodurch ein unbeabsichtigtes SCK-Signal erzeugt wurde.

Reply to
Peter

Sowas hab ich schom mal gemacht. Der Compiler ist der SDCC, loc steht für Daten oder Programmspeicher beim 8252

#define SCK _P1_6 #define MISO _P1_4 #define MOSI _P1_5 #define RES _P1_3

uchar shout(unsigned char c) {

c=c; _asm mov dph,#8 mov a,dpl $00091: mov c,MISO rlc a mov MOSI,c nop nop setb SCK nop nop nop nop clr SCK nop djnz dph,$00091 _endasm;

return ACC; }

uchar shin(void) { _asm

mov dph,#8 mov a,dpl $00081: setb SCK nop nop mov c,MISO rlc a nop nop nop clr SCK nop nop nop djnz dph,$00081 _endasm; return ACC; } unsigned char shinit(void) { unsigned char tmp; vorb(); _asm clr RES _endasm; wait(50);

_asm setb MOSI; setb MISO; clr SCK; _endasm;

_asm setb RES _endasm;

wait(250); tmp=0; shout(0xac);shout(0x53);shout(0x55); shout(0xac);shout(0x53);if(shin()!=0x53)tmp=255; wait(50); return tmp; }

void iwriterom(uchar loc) { register unsigned int count,pos=0; int ch; shinit();

for(count=chiplen.word;count;count--) { ch=ser_getb(); if(ctlch)break; shout(loc+2+8*(pos>>8));shout(pos&255);shout(ch); wait(30); if((count&15)==1)ser_putc(43); pos++; } }

void ireadrom(uchar loc) { register unsigned int count,pos=0; shinit(); ser_putc(CTL); for(count=chiplen.word;count;count--) { shout(loc+1+8*(pos>>8));shout(pos&255);ser_putb(shin()); pos++; } }

void ileertest(void) { ser_putc(CTL); wait(100); ser_putc(43); } void iderase(void) { shinit(); shout(0xac);shout(0x04);shout(0x55); wait(100); }

void ilock1(void) { shinit(); shout(0xac);shout(0x07);shout(0x55); wait(100); }

--
MFG Gernot
Reply to
Gernot Fink

Hi,

Danke für den Quellcode, aber ich hab das jetzt schon so hinbekommen, indem ich meinen AT89C2051 als Seriell zu Parallel Konverter verwende und den Rest dann über den Computer steuer. Zumindest den Programmiermodus konnte ich so aktivieren, da sollte der Rest auch kein Problem sein ;-)

Gruß Peter

Reply to
Peter

Hallo, es gab mal ein Errata von Atmel wonach manche Chips ISP nur bis 12 MHz unterstützen. War aber eigentlich für den 89S8252.

Wieso eigentlich bauen: Schon mal nach PonyProg gesucht?

mfg Claus

Reply to
Claus Giebert

Hi,

Ganz einfach: Ich bin Mac-User, und beim Macintosh gibt es keine Parallele Schnittstelle. Außerdem finde ich das so zum erlernen der µC-Technik ganz spannend :-)

Gruß Peter

Reply to
Peter

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.