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.

