mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Programm für PIC18F4420


Autor: Mark Rammenstein (rammi)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Dieter Werner (dds5)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da muss ein Missverständnis oder Tippfehler vorliegen, dieser PIC hat 
nur 768 Byte Datenspeicher, damit lassen sich keine 20kB kopieren.

Autor: Stephan S. (uxdx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: rammi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: tt2t (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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).

Autor: tt2t (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
KORREKTUR - KORREKTUR - KORREKTUR - KORREKTUR

in der 2. Variante muss es natürlich "DECREMENTIERE Pointer" heissen

Autor: Rainer Unsinn (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.