Verständnis-Problem beim ASM (PIC)

Gast #2769816
Hallo Leute
habe mir die sprut.de Seite durchgelesen da diese für Anfänger sehr 
hilfreich ist, und bin da auf ein Lernbeispiel gestoßen das ich nicht 
ganz so verstehe.
Es handelt sich um ein Programm das das Thema PWM behandelt. hier der 
Link http://www.sprut.de/electronic/pic/programm/rotpwm/rotpwm.html
Und den Part verstehe ich nicht ganz :

; pruefen ob dc zwischen 0 und 1F liegt
Limits
        BTFSC   dc, 7           ; negativ?
        CLRF    dc              ; dc = 0
        MOVLW   B'11100000'
        ANDWF   dc, w           ; > 0x1F ?
        BTFSC   STATUS, Z
        GOTO    LimitsEnd
        MOVLW   0x1F
        MOVWF   dc
LimitsEnd

was macht der da genau und warum ?
warum dc , 7 ?

Hoffe ihr könnt mir par Tipps geben .
Danke schon mal im Voraus
Gast
Die Info steht doch schon im Kommentar.
Wenn 'dc' (bezeichnet wohl den Duty-Cycle) <0 ist, dann wird 'dc' auf 0 
gesetzt. Da es sich um ein 8bit Register handelt kann das Ergebnis einer 
vorherigen Berechnung immer nur innerhalb dieser 8bit liegen. Wenn Du 
also eine Berechnung 0-1 durchführst, wird das Ergebnis 0xFF werden, was 
einer -1 entspricht. Hierbei wird das höchste Bit (=bit7) gesetzt. Daher 
auch die Abfrage mit 'btfsc dc,7'.
Als nächstes wird noch geprüft, ob 'dc' zwischen 0 und 0x1F liegt und in 
diesem Fall wird 'dc' dann fest auf 0x1F gesetzt (Untergrenze). Man 
könnte diesen Part etwas umschreiben:
movlw 0x20
subwf dc,w        ;ist dc < 0x20?
movlw 0x1F
btfss STATUS,C
movwf dc          ;Ja - dann dc auf 0x1F setzen

Gruß
TK
Gast
Oki einigermaßen verstanden :-)
Danke TK.
Wobei der Wert A und der Wert der in PR2 Steht, müssen 255 ergeben, habe 
ich beim experimentieren festgestellt.

Limits
        BTFSC   dc, 7           ; negativ?
        CLRF    dc              ; dc = 0
        MOVLW   B'01111101'                         <---------------A
        ANDWF   dc, w           ; > 0x1F ?
        BTFSC   STATUS, Z
        GOTO    LimitsEnd
        MOVLW   0x7D
        MOVWF   dc
LimitsEnd

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 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.