pic programmierung

Gast #2145326
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...
Gast #2145388
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
#2145392
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
Gast #2145435
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.
Gast #2145445
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)!???
Gast #2145457
Ist "Add Symbol" grau oder das PopUpMenue?

Deine Variablen sollten sich nach dem Compilieren im rechten PopUpMenue 
befinden. -> Auswählen und "Add Symbol" klicken.
Angehängte Dateien:
Gast #2145503
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. ...??
Gast #2145533
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.
Gast #2147139
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
Gast #2147409
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 15 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.