Programm für PIC18F4420

OP #2028268
Lesenswert?

Hallo, ich bräuchte mal hilfe bei einer Aufgabe. Zuvor habe ich mit 
einem 8051 gearbeitet. Jetzt versuche ich den Umgang mit einem PIC zu 
lernen. Ich steige aber nicht durch
Programmieren Sie ein Assembler Programm, welches einen Datenblock 
(20kB) im Internen Datenspeicher von Adressse 0x0 nach Adresse 0x80 
kopiert. Kodieren sie die Kopierfunktion in ein Universelles Programm, 
welches die Parameter (Blocklänge und Adresse) in geeigneten Registern 
übergeben bekommt.

Vielen Dank für die Hilfe
Gast #2028907
Lesenswert?

Morgen, danke erst einmal für die Schnelle Auskunft. Wie wäre denn die 
generelle Vorgehensweise einen Datenblock zu kopieren?
Bei dem 8051 hat man mit ISEG AT zuerst speicherplatz reserviert und 
dann in einer schleife daten an eine Adresse geschrieben und 
anschließend mit dem Datenpointer an Adresse X kopieret.
Könnten Sie mir ein Programm beispiel geben?
Mit freundlichen Grüßen
rammi
Gast #2028956
Lesenswert?

> Wie wäre denn die generelle Vorgehensweise einen Datenblock zu kopieren?

hast Du denn schon mal irgendwas programmiert?

-------------------------------------------------------
Variante 1 (für Hochprachen):

1 variabler Pointer, 2 Basisadressen (source und target)
Start mit Pointer=0

lese Data von Source+Pointer (+ steht für plus)
schreibe Data nach Target+Pointer
incrementiere Pointer
Ende erreicht ?
wenn nein, dann von vorne

z.B. mit DO-LOOP oder FOR-NEXT

-------------------------------------------------------
Variante 2 (macht man eher in Assembler):

1 variabler Pointer, 2 Basisadressen (source und target)
Start mit Pointer=Endpointer

lese Data von Source+Pointer (+ steht für plus)
schreibe Data nach Target+Pointer
incrementiere Pointer
Pointer=0 ?
wenn nein, dann von vorne

-------------------------------------------------------
Die 2. Variante macht man in Assembler lieber, weil die Nullabfrage da 
etwas einfacher ist als die Pointer=Wert Abfrage, das sind aber 
Marginalien (1-2 Befehle weniger).
Gast #2028975
Lesenswert?

Mark Rammenstein schrieb:
> welches einen Datenblock
> (20kB) im Internen Datenspeicher von Adressse 0x0 nach Adresse 0x80
> kopiert

tt2t schrieb:
> Variante 1 (für Hochprachen):
> 1 variabler Pointer, 2 Basisadressen (source und target)
> Start mit Pointer=0
> lese Data von Source+Pointer (+ steht für plus)
> schreibe Data nach Target+Pointer
> incrementiere Pointer
> Ende erreicht ?
> wenn nein, dann von vorne
> z.B. mit DO-LOOP oder FOR-NEXT

Wenn der Datenblöck größer ist als der Abstand von Source zu Target, 
dann überschreibt man irgendwann den Source-Bereich. Das kann man 
umgehen, indem man mit dem letzten Byte anfängt und die Pointer 
decremetiert.

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