Forum: Mikrocontroller und Digitale Elektronik Verständnis-Problem beim ASM (PIC)


von keine ahnung (Gast)


Lesenswert?

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

von TK (Gast)


Lesenswert?

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

von keine ahnung (Gast)


Lesenswert?

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

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
Noch kein Account? Hier anmelden.