Hallo, habe diese Zeilen in mplab geschrieben clrf PORTB ; clear PORTB clrf TRISB ; configure PORTB as all outputs clrf testmin2 loop1 clrf min2 loop2 incf min2,F ;increment min2 movf min2,W ;min2 ins Wreg movwf PORTB ;Wreg ins PORTB movlw 0xA ;10 in Wreg andwf min2,0 ;min2=10? movwf testmin2 ;control bit btfss testmin2,0 ;skip if min2=10 goto loop2 goto loop1 Port B soll von 0-10 zählen, bei 10 wieder auf Null gehen! Beim debuggen wird allerdings nur das Workregister inkrementiert, nicht aber das PortB! Warum? Danke im voraus...
Hm, habe jetzt auf Bank 0 geschaltet, hm, auf welcher Adresse speichere ich am besten die Variablen?
Beim PIC16F876 liegt PORTB auf Speicherbank 0 und TRISB auf Speicherbank 1. Du musst vor dem Zugriff auf die Register auf die entsprechende Speicherbank umschalten. ;nach Reset ist Bank 0 aktiv clrf PORTB ;clear PORTB BANKSEL TRISB ;auf Bank1 umschalten clrf TRISB ;configure PORTB as all outputs BANKSEL PORTB ;auf Bank0 umschalten Beim Compilieren ersetzt MPLAB den Befehl BANKSEL [Register] mit den entsprechenden Bit-Set und Bit-Clear Befehlen, die die Bits RP0 und RP1 im Statusregister auf die Bank einstellen, auf der sich [Register] befindet. In Bank 0 stehen dir (beim PIC16F876) ab Adresse 20Hex 96 Bytes zur Verfügung. Weitere in Bank 2-3 -> Siehe Datenblatt. Gruß John
Was ist der pseudobefehl clear, ? ab welcher version sollte es den geben. Ansonsten sollte es so sein, damit die pins outputs werden: clrf STATUS clrf PORTB ; ;clear PORTB bsf STATUS,RP0 clrf TRISB ; configure PORTB as all outputs bcf STATUS,RP0
hm, noch ne frage, wie kann ich im "Watch" Fenster Variablen, z.B. testmin2 anzeigen?
Ich sehe das Zeitmodell des Programmierens für mich etwa so: ca 1/3 programmieren ca 1/3 Fehler suchen + lernen ca 1/3 Doku lesen Mit Letzterem beginnen.
1.)das clear sollte eigentlich hinter dem ; stehen!!! 2.)Hab die Doku gelesen(durchgeflogen), dort können Variablen mit Add Symbol im Watch Window hinzugefügt werden, allerdings kann ich das bei mir nicht machen(grau markiert)!???
Ist "Add Symbol" grau oder das PopUpMenue? Deine Variablen sollten sich nach dem Compilieren im rechten PopUpMenue befinden. -> Auswählen und "Add Symbol" klicken.
Ich habe das mal in MPLAB eingegeben, bei mir zählt PORTB folgendermassen: 0x00 0x00 0x02 0x02 0x04 0x04 0x06 etc ....
@Tom Wie sieht die Deklaration deiner Variablen aus? Sind Leerzeichen oder TABs vor den Namen, oder beginnen die Namen ganz link?
hhhh? wie denn das? bei mir zählt es richtig! Allerdings geht er nicht von 10 auf 0! Um dieses Problem zu beheben bräuchte ich die Variablen im Watchwindow. ...??
Versuch es man mit ein paar Leerzeichen von den Variablennamen, sonst denkt der Compiler es sind Labels. Hab ich gerade mit Google gefunden. Ich weiß nicht ob es daran liegt. Probier es einfach mal aus.
Hi um einfach mal ein Problem zu beseitigen Grade am Anfang zu entfernen setze die Var ab 0x70 dann sind sie in beiden BANKEN vorhanden.
dein code: movlw 0xA ;10 in Wreg andwf min2,0 ;min2=10? movwf testmin2 ;control bit btfss testmin2,0 ;skip if min2=10 richtiger code: xorlw 0xA ;10 in Wreg skpz
das mit dem "watch" window funzt jetzt, variablen einfach mit RES 1 deklarieren... google ist ein wunder...
Hab das Problem jetzt so gelöst... clrf PORTB ;clear PORTB BANKSEL TRISB ;auf Bank1 umschalten clrf TRISB ;configure PORTB as all outputs BANKSEL PORTB ;auf Bank0 umschalten clrf testmin_2 loop1 clrf min_2 loop2 incf min_2,F ;increment min2 movf min_2,W ;min2 ins Wreg movwf PORTB ;Wreg ins PORTB movlw 0x9 ;10 in Wreg subwf min_2,w ;min2=10? movwf testmin_2 ;control bit decfsz testmin_2,0 ;skip if min2=10 goto loop2 goto loop1
Hallo Tom, Du machst das etwas umständlich: vom Zählerstand 9 abziehen, Ergebnis speichern, dann 1 abziehen. Und wenn das Ergebnis dann null ist war der Zähler auf 10. movlw 0x9 ;9 in Wreg subwf min_2,w ;min2=10? movwf testmin_2 ;control bit decfsz testmin_2,0 ;skip if min2=10 Einfacher: 10-Zählerstand. Das ist praktisch identisch mit dem was pic_user vorgeschlagen hat. sublw 0x0A ; 10 - Wreg (min_2) -> Wreg btfss STATUS,Z ; Zero-bit=1 wenn Ergebnis=0 Gruß John
Korrektur, es muss sublw 0x0B ; 11 - Wreg (min_2) -> Wreg heißen, sonst ist die Ausgabe auf Port B nur 0..9. Tom schrieb: > Port B soll von 0-10 zählen, bei 10 wieder auf Null gehen!
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.