Hallo Ich habe in einem anderen Forum was gefunden und es mal ausprobiert. Der Code ist: mov tmod, #00100000b mov tcon, #01000000b mov th1, #-1 ;57.6kbaud at 11.0592MHz mov pcon, #10000000b mov scon, #01110010b mov dptr, #0 loop: jnb ti, $ clr ti movx a, @dptr mov sbuf, a inc dptr mov a, dpl orl a, dph jnz loop sjmp $ end Nun habe ich mal eine Frage: Dieses kleine Programm erzeugt eine genau 64kB Große Datei und man kann sehr gut Eproms damit auslesen. (27C512, 87C510...) Genutzt wird ja der Port0 und 2 vom µC. Ist es denn möglich das man den Port 1 mit einbeziehen kann um noch größere Eproms auszulesen?? Und könnte man den µC so programmieren das folgende Konfiguration möglich ist: P0.0 = AD0 P0.1 = AD1 P0.2 = AD2 P0.3 = AD3 P0.4 = AD4 P0.5 = AD5 P0.6 = AD6 P0.7 = AD7 P2.0 = A8 P2.1 = A9 P2.2 = A10 P2.3 = A11 P2.4 = A12 P2.5 = A13 P2.6 = A14 P2.7 = A15 P1.0 = A16 P1.1 = A17 P1.2 = A18 P1.3 = A19 P1.4 = A20 P1.5 = A21 P1.6 = A22 P1.7 = Doppel so schnelle Taktung wie auf P0.0 = AD0?? Ist das möglich?? Vielen Dank Rolf
Um exakt auf die Fragestellung zu antworten: Ja, es ist möglich. Ein klein wenig größer wird das Programm dann aber schon...
Hallo Rolf, was meinst du mit P1.7 ??? doppelt so schnell ? Ansonsten läßt du alle 64k einfach das Port 1 ebenfalls soweit zählen wie du es brauchst. Dann geht das ganze bis zur 256*64kB = 16385 kB oder 131MBit (E)proms, die ich bishe rnoch nicht kenne. Gruß Thomas
mov p1, #0 ... ;alter Code ohne "sjmp $" inc p1 cjne p1, #endwert, loop sjmp $ Das mit dem p1.7 mußt Du selber machen. Peter
Hallo Wow mit solch einen Feedback hätte ich nicht gerechnet. Also wenn ich Peter richtig verstanden habe sollte der Source so mov p1, #0 mov tmod, #00100000b mov tcon, #01000000b mov th1, #-1 ;57.6kbaud at 11.0592MHz mov pcon, #10000000b mov scon, #01110010b mov dptr, #0 loop: jnb ti, $ clr ti movx a, @dptr mov sbuf, a inc dptr mov a, dpl orl a, dph jnz loop inc p1 cjne p1, #endwert, loop sjmp $ end aussehen??? Was bitte ist mit Endwert gemeint??? Hexdezimal?? Also bei 22 Adressleitungen 7FFFFF??? Vielen Dank Rolf
Hallo Also in der Zeile cjne p1, #endwert, loop sagt er mir das ein Fehler drinn wäre. Statt den Endwert habe ich mal Hex oder 11111111b eingesetzt. Kommt immer wieder das der sagt Invalid Register!!! Was könnte das sein?? Danke Rolf
Du darfst offensichtlich p1 nicht in verbindung mit cjne verwenden. Das sind so einer der nachteile der 51'er, die mich zu den mega-Bauteilen von atmel getrieben haben. Ich bin auch jetzt im 51'er bereich nicht mehr so fit; entweder lautet die lösung inc p1 mov a,p1 cjne a,#0ffh,loop oder inc p1 mov r0,p1 cjne r0,#0ffh,loop Zum erlernen von Assembler empfehle ich übrigens die Mega-Serie z.B. ATmega8. Benötigt für den einfachen Betrieb keine aussenbeschaltung und man wird von sochen gotcha's verschont.
Hallo inc p1 mov a,p1 cjne a,#0ffh,loop Damit funktioniert es. Könnte mir denn jemand den Ansatz geben wie ich das mit dem P1.7 lösen kann?? Gruß Rolf
Binärdaten sollte man nicht "einfach so" über die serielle Schnittstelle schicken, besonders bei 57kbaud. Bei einem EPROM kann ein einzelnes falsch übertragenes Bit die Daten unbrauchbar machen. Also entweder CRC berechnen und zum Schluß separat ausgeben, oder die Daten gleich z.B. im Intel-Hex Format übertragen.
Ich würde gerne helfen, hab aber nicht verstanden, was p1.7 machen soll? Doppelt so schnelle Taktung wie P0.0? P0.0 isn Adress- bzw Datenbit. Da taktet nix!
Hallo Niels Der Zähler an P0.0 (AD0) geht ja immer L H L H L H L H L H..... Und der Port 1.7 soll wenn P0.0 Low ist L H machen dann geht P0.0 auf High und der P1.7 soll wieder L H machen. Ich habe mal ein Bild mit drann wie es aussehen sollte. Vielen Dank Rolf
Es gibt Leute, die wollen erst wissen, wozu etws nütze ist, ehe sie sich mit einem Problem beschäftigen. Also wozu soll der P1.7 gut sein ? Peter P.S.: Füge irgendwo "setb p1.7", "clr p1.7" ein
Hallo Achso!!!!!!!!!! Ich möchte auch gern 16 Bit Flash's z.B lesen können. Wenn ich diese Funktion auf P1.7 habe kann ich mir einen Adapter erstellen der erst das low Byte und dann das Highbyte liest und dann zur nächsten Adresse geht. Und ich kann immer noch 23 Adressleitungen benutzen. Viele Grüße Rolf
jetzt, wo man weiss, was du machen möchtest, ist es definitiv einfacher, dir zu helfen. Um es mal technisch zusammenzufassen: Du hättest dann 23 Adressbits und einen h/l-Byte-selektor. Um den Programmcode so einfach wie möglich wie möglich zu halten, würde ich dir vorschlagen, für den h/l-Byte-selektor auf einen anderen Port zu legen. Hättest du da nochn pinchen offen? Ansonsten würde es etwas kompliziert: In R0 den Adresszähler für p1 auslagern und anfangs mit 0 initialisieren. dann bei jedem schleifendurchlauf: mov p1,r0 ;adresse A16-A22 auf p1 legen clr p1.7 ; h/l-selektor auf low movx a,@dptr ; byte lesen ..... ; und seriell ausgeben set p1.7 ; h/l-selektor auf high movx a,@dptr ; byte lesen ...... ; und seriell ausgeben und weiter mit der schleife
Hallo Ich hätte noch P3.2 - P3.6 frei. Wenn das einfacher ist dann machen wir doch auf P1.7 A23!!! Wie müsste denn dann das Programm aussehen?? Gruß Rolf
wenn du p3.2 nimmst, dann müssstest du deine schleife nur um einen movx erweitern: clr ti (+) clr p3.2 movx a, @dptr mov sbuf, a (+) set p3.2 (+) movx a,@dptr (+) mov sbuf,a (+)-gekennzeichnete Zeilen sind hinzugefügte zeilen.... Frage an einen 51'er spezialist: muss man nach einem 'mov sbuf,a' nicht eigentlich warten, bis sbuf gesendet worden ist?
ok, hab mich gerade selber mal schlau gemacht vor jedem "mov sbuf,a" muss ein "clr ti" und unmittelbar danach ein "jnb ti,$", damit die programmausführung solange unterbrochen ist, solange das interace das byte sendet. d.h. deine schleife sähe so aus: clr p3.2 clr ti movx a,@dptr mov sbuf,a jnb ti,$ set p3.2 movx a,@dptr clr ti mov sbuf,a jnb ti,$ ich hoffe, das kommt als codefragment einigermaszen verständlich an.
Hallo Muss das jetzt noch unter das Programm drunter?? mov p1, #0 mov tmod, #00100000b mov tcon, #01000000b mov th1, #-1 ;57.6kbaud at 11.0592MHz mov pcon, #10000000b mov scon, #01110010b mov dptr, #0 loop: jnb ti, $ clr ti movx a, @dptr mov sbuf, a inc dptr mov a, dpl orl a, dph jnz loop inc p1 clr p3.2 clr ti movx a,@dptr mov sbuf,a jnb ti,$ set p3.2 movx a,@dptr clr ti mov sbuf,a jnb ti,$ cjne p1, #endwert, loop sjmp $ end
nein...das kommt in die schleife... Ausserdem funktioniert cjne p1 doch nicht Der vollständigecode müsste so ausehen: mov p1, #0 mov tmod, #00100000b mov tcon, #01000000b mov th1, #-1 ;57.6kbaud at 11.0592MHz mov pcon, #10000000b mov scon, #01110010b mov dptr, #0 loop: clr p3.2 movx a, @dptr clr ti mov sbuf, a jnb ti,$ set p3.2 movx a, @dptr clr ti mov sbuf, a jnb ti,$ inc dptr mov a, dpl orl a, dph jnz loop inc p1 mov a,p1 cjne a, #endwert, loop sjmp $ end
Hallo Hmmm. Das lässt nich nicht kompilieren!!! Der hat 2 Error's Ich habe mal ein Bild mit den Fehlern als Dateianhang. Gruß Rolf
Hallo Habe mal ein bisschen probiert. Kann es sein das es setb p3.2 sat set p3.2 heisen muss?? Dann kan ich es auch kompilieren!!! Habe auch mal nen andere Software genommen. Gruß Rolf
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.