Ich werde anfangen, an einem Projekt zu arbeiten, wo ich ein gutes Verständnis der Assemblersprache für die PIC-Mikrocontroller haben muss. Ich bin vertraut mit C / C ++, deshalb kann ich größtenteils Code schreiben, und ich habe schon viele Projekte für den PIC gemacht, also verstehe ich die Architektur, habe aber alle meine Programmierung dafür in 'C' gemacht.
Gibt es ein gutes Buch oder eine Website, die einen guten Job macht und erklärt, was alle Assemblerbefehle bedeuten und wie man relativ einfache Aufgaben (blinkende LEDs, Grundrechenarten usw.) für den PIc-Mikrocontroller ausführt?
Bearbeiten: Der Hauptzweck dieses Beitrags besteht darin, Ressourcen für das Lernen von Assembly anzufordern, nicht die Vorzüge von C gegenüber Assembly in den PICs zu diskutieren, oder ob der PIC ein "guter" Mikrocontroller ist, den man verwenden kann. Ich verwende einen PIC18 Mikrocontroller, wenn das einen Unterschied macht.
Es gibt mehr als eine PIC-Architektur mit signifikant unterschiedlichen Befehlssätzen. Microchip haben nicht die architektonische Konsistenz von Atmel AVR zum Beispiel. Sie müssen also angeben, was Sie verwenden - PIC12, 16, 24, 32 zum Beispiel.
Zuerst würde ich vorschlagen, den PIC-Assembler zu meiden, weil das, was Sie lernen, ein PIC12 ist, das für einen PIC24 nicht sehr gut anwendbar ist. Zweitens würde ich es vermeiden, überhaupt einen PIC zu verwenden, wenn ich das als Softwareentwickler hätte - obwohl ich einräume, dass es andere Überlegungen gibt und Sie möglicherweise keine andere Wahl haben.
Was Sie möglicherweise wählen können, ist nicht mit Assembler. Während die unteren Ende PICs vielleicht nicht am besten für die C-Code-Generierung geeignet sind, ist das Problem des Compiler-Schreibers; In Bezug auf die Entwicklungszeit ist es noch kostengünstiger, wenn möglich C zu verwenden. Auf der anderen Seite, für Produkte mit hohem Volumen, wenn Sie den Code in einen kleineren Teil mit Assembler passen können, kann das ein Faktor sein. Die Entscheidung, dass Sie Assembler benötigen, bevor Sie eine C-Lösung getestet haben, ist oft eine "vorzeitige Optimierung". Selbst wenn die C-Implementierung die Größen- oder Zeitbeschränkungen nicht erfüllt, können Sie sie einfach als Prototyp bezeichnen und sie so umschreiben, dass sie Constraints erfüllt. Doing als immer noch schneller als Assembler Codierung von Grund auf neu zu starten und gleichzeitig mit Design und Befehlssatz zu kämpfen. Sagen Sie Ihrem Chef, dass Sie es in C prototypieren werden, und wenn es die Anforderungen erfüllt, wird niemand mehr Geld verschwenden wollen, um es neu zu kodieren. Es ist ein nicht portabler, nicht überwachbarer Assembler-Code.
Beantworten Sie Ihre Frage mit der Annahme, dass Sie die Arbeit schnell und effizient erledigen müssen, verwenden Sie möglichst viele Beispiele und Anwendungshinweise von Microchip und machen Sie sich mit den Anweisungen aus der Referenz des Herstellers vertraut. Der Befehlssatz für die unteren Teile ist nicht groß. Für die tägliche Arbeit verwende ich gerne eine "Instruction Set Reference Card" als Aide-Mémoire - sie fasst alle wesentlichen Details jeder Anweisung zusammen, meist auf ein paar Seiten - doppelseitig bedrucken und laminieren! ;). Hier ist ein PIC16-Beispiel
Es könnte eine ziemlich späte Antwort sein, aber Sie könnten von diesem Praktikum profitieren, das hauptsächlich für das Erlernen der PIC-Montage durch Anwendungen geschrieben wurde.
Überprüfen Sie: Ссылка
Überprüfen Sie die Registerkarte "Tests", einschließlich:
Experiment 0 - (Einführung in MPLAB)
Experiment 1 - (Einführung in PIC Assembly Instruction Set)
Experiment 2 - (Mehr über Befehlssatz und modulare Programmiertechniken)
Experiment 3 - (Grundlegende Systemanalyse und Design)
3.1. Anleitung zu Hardware I
Experiment 4 - (LCD - HD44780)
Experiment 5 - (Tastatur)
Experiment 6 - (Verwendung des HI-TECH C Compilers in MPLAB) 6.1. PIC-Programmierung mit ICD2 Guide.
Experiment 7 - (Timer (Timer0 und Timer2))
Experiment 8 - (USART)
Experiment 9 - (Software PWM & amp; A / D)
Es basiert auf der PIC 16-Reihe, vor allem 16f84A, 16F877A und 16F917 .. Die Beispiele sind vollständig kommentiert und die Experimente vollständig erklärt.
Ich glaube daran, einen Disassembler zu schreiben. Beginnen Sie mit einem sehr einfachen ein- oder zweizeiligen Programm, das vielleicht ein Register mit einer Konstanten lädt (muss ein Tutorial lesen oder etwas, um diesen Schritt zu lernen). Montieren Sie es. Speichern Sie die Binärdatei in einem Format, das Sie schreiben können oder wollen, um ein Programm zu lesen (intel hex vielleicht oder elf, wenn sie dies unterstützen).
Schreiben Sie ein Programm, um die Binärdatei zu lesen und das Programm zu extrahieren, nehmen Sie diese Bytes und schreiben Sie einen Disassembler (selbst wenn der Hersteller einen Disassembler hat, sollten Sie immer noch einen schreiben).
Beginnen Sie nun, den Prozess zu iterieren, lernen Sie eine neue Anweisung oder eine neue Art, diese Anweisung zu verwenden, jeweils eine Anweisung. Schreiben Sie Code, um diese Anweisung oder Option zu demontieren. Versuchen Sie, Assembler zu schreiben, um jedes der Bits in der Anweisung zu bearbeiten.
Wenn Sie den Befehlssatz durchlesen, werden Sie den Befehlssatz besser kennen als die meisten Leute, die ihn jeden Tag benutzen. Sie werden wissen, wie man Assembler für jede der Optionen für jeden der Opcodes schreibt Warum kann dieser Befehl nur N Bytes von seinem Standort adressieren und andere können auf irgendetwas zugreifen, oder dieser Befehl kann nur ein N-Bit unmittelbar verwenden und andere können einen beliebigen Wert verwenden. So etwas.
Ich habe diesen Prozess viele Male benutzt und viele Befehlssätze gelernt, ymmv. Nach dem ersten Paar-drei kann der obige Prozess nur einen Nachmittag dauern, um abzuschließen.
BEARBEITEN:
Das Ziel ist hier Bildung, nicht das nächste große Sourceforge-Projekt. Die Ausgabe kann so hässlich oder unvollständig sein, wie Sie möchten, Sie sind der einzige, der es lesen wird.
Hinweis: Ein generischer Disassembler für Befehlssätze mit variabler Länge kann etwas schwierig sein. Sie möchten die Binärdatei nicht linear zerlegen, wenn Sie in diesem Fall allen Ausführungspfaden folgen möchten. Ich würde es vermeiden. Es ist nicht schwierig, einfache Programme zu verwenden, die etwas linear zusammenbauen und dann zerlegen, selbst bei einem Befehlssatz variabler Länge. Sie können einiges über einen Befehlssatz lernen, indem Sie die Ausgabe eines C-Compilers (oder einer anderen Hochsprache) disassemblieren und untersuchen, wenn der Compiler keine Assembler-Ausgabeoption hat oder keinen Disassembler hat, den Sie nicht erhalten um dies zu nutzen (es sei denn, es handelt sich um einen Befehlssatz fester Länge).
Beachten Sie auch, sobald Sie Assembler für einen Prozessor lernen, ist der zweite viel einfacher und so weiter. Die Dinge, die du von einer zur anderen lernen musst, werden oft, wie groß dieser Sprung sein kann, was die Regeln für sofortige, indirekte Adressierung sind, im Grunde all die Dinge, die direkt mit der Untersuchung der Opcodes verbunden sind. Sie können es lernen, ohne auf die Opcodes zu schauen, aber Sie müssen sich darauf verlassen, dass die Dokumentation oder die Assembler-Fehlermeldungen von hoher Qualität sind.
Tags und Links assembly embedded microcontroller pic microchip