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