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
Da muss ein Missverständnis oder Tippfehler vorliegen, dieser PIC hat nur 768 Byte Datenspeicher, damit lassen sich keine 20kB kopieren.
In der 18er-Serie der PICs gibt es keinen einzigen Chip, der mehr als 4 kByte RAM hat. Für 20 kByte und mehr musst Du schon auf PIC24xxx oder PIC32xxx ausweichen.
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
> 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).
KORREKTUR - KORREKTUR - KORREKTUR - KORREKTUR in der 2. Variante muss es natürlich "DECREMENTIERE Pointer" heissen
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.
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.