So habe jetzt mal etwas herumgebastelt und möchte wissen ob die Abfrageschleife so funktioniert wie ich es mir vorgestellt habe und ob die Kommunikation zwischen I2C -> MAX -> PIC -> LEDs so geht ?
Zu der Abfrage
Also je höher die Spannung=Abstand desto mehr (+1 weitere LED) leuchtet dazu auf.
Im Anhang der Code, für jeden Tipp & Hilfe bin ich sehr dankbar!
Keine Ahnung was ich falsch mache, aber jetzt wird mir selbst "Init" als "illegal" deklariert -.-*.
Wäre echt super wenn sich jemand bissle Zeit nehmen könnte und mir helfen!
Als Voraussetzung für Erstellung ASM Programmen ist fast perfektes Kennen non MPASM, sonst verliert man nur Zeit für unnötige Suche von Fehler die vermieden werden könnten.
Jeder Quellcode wegen Assemblerprogram z.B. MPASM muss sich nach sehr strengen Regeln halten und kann nicht beliebig strukturiert werden.
Im Wiki befindet sich ein Muster der angehalten werden muss, weil andere Struktur vom MPASM nicht akzeptiert wird. Bei jedem Quelcode ist jedes Zeichen und seine Positin wichtig. Z.b. in der Zeile:
#include <p16f887.inc> ; .inc Datei des PIC16F887
ist das Zeichen "#" nicht zulässig, weil sie nur fur "#define" Anweisungen reserviert ist.
Als nächster Fehler in deinem Quelcode finde ich im Unterprogram "Init" diese Zeile,
die als Definition vom Register an Anfang der Listing gehört. Weiter habe ich nicht gesucht. Wer Programme schreiben möchte muss sich leider an alle Regel des MPASM halten, damit sein Programm vom MPASM überhaupt in ".hex" Datei übersetzt werden könnte.
also das dies nicht geht wundert mich nun sehr:
#include <p16f887.inc> ; .inc Datei des PIC16F887
Habe meine bisherigen Programme immer auf diese Weise geschreiben und er hatte deshalbt nie herumgemeckert oder die .inc Datei nicht erkannt.
Und das mit RDATA habe ich mal in die Init reingestellt, da ich schonmal probleme mit solchen Anweisungen hatte wenn ich diese direkt im Listing erwähne. Es war dann so.
Im Listing: nicht erkannt
In der Init: erkannt
Ist jedenfalls grad alles sehr seltsam. Dennoch schonmal Danke!
Gruss
Ich habe noch nie Probleme mit Assemblerprogrammen, obwohl ich schon früher verschiedene Prozessoren und µC's programmiert habe. Jedes Assemblerprogram ist eben wie ein Befehlsatz für die CPU.
Was für dich sehr seltsam ist, ist für mich einfach normal ...
Leider sitze ich grad am "falschen" PC, auf dem kein MPLAB installiert ist. Darum kann ich nur ein paar intuitive Dinge von mir geben.
1) Wenn's Probleme mit der Syntax gibt, lohnt sich bestimmt der Griff zur Hilfefunktion: Suche nach den Begriffen 'init' und 'rdata'; vielleicht sind das reservierte Wörter des Assemblers oder des Präprozessors für die Objektcodeerzeugung. Ich selber arbeite bis dato auch nur auf der einfachsten Ebene (genau wie du: keine Code/Daten/sonstige Segmente, nur eine .ASM-Datei), aber "RDATA" riecht nach Speicherreservierung, Datensegment oder sowas.
2) Ich bin beim Wechsel von Win2k nach Linux etwas auf die Nase gefallen, weil die in der zweiten Nachkommastelle erhöhte Präprozessorversion einige Unsauberkeiten meiner "freien Syntaxauslegung" nicht mehr schlucken wollte: das waren Berechnungen mit Adresslabels, die Klammern bei den Includedateien und vielleicht auch noch irgendwas mit dem Hash #. Sieh also bei den fraglichen Stellen nochmal genau in der Dokumentation nach, falls du einen Releasewechsel, z.B. durch Neuinstallation von MPLAB, mitgemacht haben könntest.
Dann sind mir noch ein paar potentielle Fehlerquellen aufgefallen:
- gemischte Verwendung von BANKSEL und expliziter STATUS-Bit RP0-Manipulation
- Default-Destination z.B. bei xorwf
- der größer/kleiner-Vergleich in der Kaskade sollte m.E. mit Subtraktion und dem Carry-Bit gemacht werden statt mit Zero. Vll. hab ich deinen Sourcecode aber noch nicht richtig verstanden.
Lesezeichen