Hallo Leute, ich habe hier einen alten(fremden) Assemblercode für einen PIC16F872. Beim Übersetzen gibt der Assembler(MPASMWIN.exe) folgende Meldung aus: Message[302] : Register in operand not in bank 0. Ensure that bank bits are correct. Das stimmt auch, an dieser Stelle im Quellcode wird der Befehl "MOVWF TRISB" ausgeführt, dabei ist aber die Bank 0 eingestellt. Es gibt mehrere Stellen auch mit anderen Befehlen, wo die falsche Bank eingestellt ist. Der Compiliervorgang wird aber trotzdem ausgeführt und ein Hex-File generiert. Das Gerät funktioniert aber auch. Was macht der Assembler in diesem Fall? Wird dann vom Assembler die richtige Bank ausgewählt oder wie geht das dann? Gruß Andi
Ein Blick ins Datenblatt verrät, dass an der Adresse von TRISB in Bank 0 das Register PORTB zu finden ist. Wenn zur Zeit des MOVWF also tatsächlich (so wie ich die Compiler-Ausgabe deute) Bank 0 ausgewählt ist, schreibt der Befehl nach PORTB und nicht nach TRISB. Ob das von dem Spezialisten, der den Code geschrieben hat, wohl beabsichtigt ist? Gruß David P.S. Datenblatt Seite 8, PDF-Seite 10.
Andi schrieb: > Wird dann vom Assembler die richtige Bank > ausgewählt oder wie geht das dann? bsf STATUS, RP0 ; auf Bank 1 umschalten bcf STATUS, RP0 ; auf Bank 0 zurückschalten für PIC16F87X Von selber macht Assembler garnicht ...
davon gehe ich auch aus. Es gibt insgesamt 12 Meldungen, wo die Bank falsch geschaltet ist. Was komisch ist, die Baugruppe läuft seit Jahre einwandfrei, und das finde ich komisch. Was ich noch komischer finde, dass der Assembler trotzdem ein Hex-File erzeugt, obwohl Fehler vorhanden sind.
>Message[302] : Register in operand not in bank 0. Ensure that bank bits >are correct. Kenn ich. Das ist nur ein Hinweis die Bank richtig zu setzen. Die Meldung kann man auch irgendwie abschalten.
>> Wird dann vom Assembler die richtige Bank >> ausgewählt oder wie geht das dann? >bsf STATUS, RP0 ; auf Bank 1 umschalten >bcf STATUS, RP0 ; auf Bank 0 zurückschalten Probier mal BANKSEL TRISB vor dem Zugriff auf Trisb
ich habe jetzt den Quellcode durchgenommen(so gut es bei 2000 Zeilen geht). Es sind zwar 12 Fehlermeldungen, aber nur an 2 Stellen war die Bank falsch gesetzt. Als ich das geändert habe, hat es an der Fehlermeldung nichts geändert. Ich glaube auch nicht, dass der Assembler so intelligent ist und irgenwelche Folgefehler ankreidet, wie beim C-Compiler. Aber es ist jetzt definitiv so, dass die Stellen, die als Fehlerhaft gekennzeichnet sind, da ist die Bank richtig gesetzt.
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.