Folgenden Code habe ich aus einem Buch(es soll mir LEDS mit ca 60Hz am Ausgang ausgeben)Hat nur den Zweck alles so weit zu kriegen, das ich das alles verstehe und auch wirklich funktioniert.Es ist also ein Lehrbuch. Hier mal der Assemblercode: ; TODO INSERT CONFIG CODE HERE USING CONFIG BITS GENERATOR ; PIC16F18877 Configuration Bit Settings ; Assembly source line config statements #include "p16f18877.inc" ; CONFIG1 ; __config 0xFFEE __CONFIG _CONFIG1, _FEXTOSC_ECM & _RSTOSC_HFINT1 & _CLKOUTEN_OFF & _CSWEN_ON & _FCMEN_ON ; CONFIG2 ; __config 0xFFFF __CONFIG _CONFIG2, _MCLRE_ON & _PWRTE_OFF & _LPBOREN_OFF & _BOREN_ON & _BORV_LO & _ZCD_OFF & _PPS1WAY_ON & _STVREN_ON ; CONFIG3 ; __config 0xFF9F __CONFIG _CONFIG3, _WDTCPS_WDTCPS_31 & _WDTE_OFF & _WDTCWS_WDTCWS_7 & _WDTCCS_SC ; CONFIG4 ; __config 0xFFFF __CONFIG _CONFIG4, _WRT_OFF & _SCANE_available & _LVP_ON ; CONFIG5 ; __config 0xFFFF __CONFIG _CONFIG5, _CP_OFF & _CPD_OFF LIST p=16f18877 #include <p16f18877.inc> RES_VECT CODE 0x0000 ; processor reset vector GOTO START ; go to beginning of program MAIN_PROG CODE ; let linker place main program START ;Set Bank 0, we never know BANKSEL TRISA MOVLW B'00000000' MOVWF TRISA BANKSEL ANSELA MOVLW B'00000000' MOVWF ANSELA BANKSEL PORTA MOVLW B'10101010' MOVWF PORTA udata_shr LoopC res 1 udata LoopUnneeded res 3 WORK MOVLW B'00000000' MOVWF PORTA NOP NOP MOVLW B'11111111' MOVWF LoopC LOOPA NOP NOP NOP NOP NOP DECF LoopC, 1 BTFFS STATUS, Z GOTO LOOPA MOVLW B'11111111' MOVWF PORTA MOVLW B'11111111' MOVWF LoopC LOOPB NOP NOP NOP NOP NOP DECF LoopC, 1 BTFFS STATUS, Z GOTO LOOPB GOTO WORK END Den Fehler habe ich zu allen Einträgen im Work-Teil!??
In dem Buch werden Variablen irgendwo mitten im Code angelegt? Hab ich je noch nie gesehen ;-) Das Verursacht wohl auch den Fehler, weil alles danach als Daten interpretiert wird! Schau dir mal ein paar Templates und Beispiele im MPLABX Installationsverzeichnis an.
Ganz ehrlich...das Buch ist eigentlich unmöglich geschrieben...ich muss da immer hin und her springen und habe nun die einzelnen Elemente der Reihe nach zusammen gefügt und hoffentlich auch die Variable an der richtigen Stelle angelegt? War mir nicht eindeutig an welcher Stelle das passieren muss? Also vor Work, weil Work ja damit arbeiten muss, dachte ich mir. Oder Muss ich vorher noch so die Variable dotieren, damit sie dann bereit ist?? MOVLW B'11111111' MOVWF LoopC
Hallo Volker, Du scheinst Recht zu haben, ich habe die Variablen jetzt gleich oben nach der Config gesetzt und habe nun nur noch 2 Fehlermeldungen zu den Status-Labels! BTFFS STATUS, Z (Error 122.Illegal Opcode)?? Danke erstmal!...mal gucken was da jetzt noch ist? LIST p=16f18877 #include <p16f18877.inc> udata_shr LoopC res 1 udata LoopUnneeded res 3 RES_VECT CODE 0x0000 ; processor reset vector GOTO START ; go to beginning of program MAIN_PROG CODE ; let linker place main program START ;Set Bank 0, we never know BANKSEL TRISA MOVLW B'00000000' MOVWF TRISA BANKSEL ANSELA MOVLW B'00000000' MOVWF ANSELA BANKSEL PORTA MOVLW B'10101010' MOVWF PORTA WORK MOVLW B'00000000' MOVWF PORTA NOP NOP MOVLW B'11111111' MOVWF LoopC LOOPA NOP NOP NOP NOP NOP DECF LoopC, 1 BTFFS STATUS, Z GOTO LOOPA MOVLW B'11111111' MOVWF PORTA MOVLW B'11111111' MOVWF LoopC LOOPB NOP NOP NOP NOP NOP DECF LoopC, 1 BTFFS STATUS, Z GOTO LOOPB GOTO WORK END
Ich habe den Fehler gefunden: Es muss BTFSS, statt BTFFS....toller Fehler! Jetzt habe ich 54,5Hz am Ausgang...theoretisch könnte man damit einen 230V Wechselrichter aufbauen, fällt mir gerade ein... nun ja.. Aber für Einsteiger die mit dem Buch "Elektronik gar nicht schwer - Mikrocontroller-Basics mit PIC" anfangen und ähnliche Fehler machen könnten meine Beiträge eine Hilfe sein!? Gibts hier einen reinen Anfängerthread, wo sich Anfänger vorerst gegenseitig helfen? Damit man Experten nicht gleich mit sowas kommen muss!? ;-) Ich habe aber auch was nettes gefunden, was für Anfänger auch ganz gut sein wird:https://rn-wissen.de/wiki/index.php/PIC_Assembler#Vorlage_f.C3.BCr_MPASM Fachbücher sind leider nicht immer so eindeutig wie man es gern hätte, habe ich feststellen müssen.
Rudi R. schrieb: > Ich habe aber auch was nettes gefunden, was für Anfänger auch ganz gut > sein wird Das <edit- der Code> ist leider auch schon ziemlich veraltet. Programmierstil aus der Zeit als noch nicht unbedingt ein Linker verwendet wurde <edit- und Programme mehr oder weniger aus einer Quelldatei erstellt wurden>. Man erkennt das an den Codewörtern (z.B. "ORG) für "absoluten" Programmierstil. Es werden auch nicht wirklich Variablen definiert und dafür Speicherplatz "reserviert", sondern es erfolgt lediglich eine Textersetzung (equ) Wenn man in der IDE innerhalb des Projektes ein neues File anlegt und dabei "newpic_8b_general" auswählt, bekommt man automatisch ein Grundgerüst inklusive Kommentare geliefert, mitsamt einer schrittweisen Anleitung...
:
Bearbeitet durch User
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.