PIC macht Rechenfehler?

OP #4382161
Folgendes: Ein PIC (24EP128MC202) von mir macht mal wieder 
'Rechenfehler'

mov  #20000,W1
mov  #10000,W2
CPSGT  W1,W2    ; skip if W1 > W2
goto  LED_ON    ; if W1 < W2
goto  LED_OFF         ; if W1 > W2

LED_OFF wird ausgeführt, bis hier hin stimmts

mov  #40000,W1
mov  #20000,W2
CPSGT  W1,W2    ; skip if W1 > W2
goto  LED_ON    ; if W1 < W2
goto  LED_OFF         ; if W1 > W2

und hier müsste ebenfalls zu LED_OFF gesprungen werden, allerdings geht 
er auf LED_ON..

SPLIM und SPINIT sind korrekt initialisiert..

Ich hatte das Problem früher schonmal bei einem anderen PIC und habe es 
aber irgendwie in den Griff bekommen.
OP #4382209
A. K. schrieb:
> Ge E. schrieb:
>> und ich hatte definitiv schon PICs die konnten mit dem Befehl ein
>> unsigned 16 Bit Compare machen
>
> Aber vmtl. keine, die einen bedingten Skip mit drin hatten.

Habe immer mit diesem Befehl gearbeitet, aber habe langsam den Eindruck 
das ich bisher nur 15 Bit Zahlen miteinander verglichen habe und bis 
dahin funzt es ja ^^'
Gast #4382744
Bin ich froh, dass ich mich (zufällig) auf AVR eingeschossen
habe. - Neulich gab es auch schon eine Frage bezüglich der 
Vergleichsoperation beim PIC über mehrere Bytes (WORD, LONG
etc.)

Beim AVR ist alles gut in der HILFE zum AVR-Studio
beschrieben. Und auch sonst im NET leicht zugänglich.

Beim PIC sind wohl entweder die Rechen- und Vergleichs-Befehle
dürftig, oder zumindest deren nachvollziehbare Dokumentation...

Naja, dafür kann man beim PIC direkt mit Werten im Speicher
arbeiten. Hat wohl jeder seine Vor- und Nachteile.

Ich bevorzuge es jedenfalls, mit einem gut dokumentierten
System zu arbeiten!

Wenn nächstes Mal die Anfänger-Frage kommt: "WELCHEN µC???"
- Habe ich jetzt Argumente!
#4382763
Oldie schrieb:
> Beim PIC sind wohl entweder die Rechen- und Vergleichs-Befehle
> dürftig,

Im Gegenteil, die 16-Bit PICs 24/30/33 haben eine recht ordentliche 
Architektur, was Asm-Programmierbarkeit und Zielmaschine für Compiler 
angeht. Dass der TO sich damit schwer tut ist nicht Microchip 
anzulasten.

> oder zumindest deren nachvollziehbare Dokumentation...

Im Datasheet steht kaum was, aber das ist bei den AVRs auch nicht 
anders. Dafür gibts aber ein mehrere hundert Seiten langes Programmer’s
Reference Manual, das die komplette Architektur mitsamt Befehle 
ausführlich beschreibt, während Atmels Pendant die Register im Datasheet 
beschreibt und die Befehle getrennt davon in der Referenz.

> Neulich gab es auch schon eine Frage bezüglich der
> Vergleichsoperation beim PIC über mehrere Bytes (WORD, LONG
> etc.)

Ging es dabei auch um die 16-Bitter, oder bezog sich das auf die 8-Bit 
PICs? Die 8-Bitter sind etwas "gewöhnungsbedürftig" und 16/32-Bit 
Operationen machen auf keiner Akkumulator-Maschine wirklich Spass.
Gast #4382772
Ge E. schrieb:
> Habe immer mit diesem Befehl gearbeitet, aber habe langsam den Eindruck
> das ich bisher nur 15 Bit Zahlen miteinander verglichen habe und bis
> dahin funzt es ja ^^'

Wegen sowas hat schon eine Ariane 5 Rakete den Abgang gemacht - mit 
einem bewährten Softwaremodul von der Ariane 4.
Gast #4387692
Hallo,
Ge E. schrieb:
> Ich hatte das Problem früher schonmal bei einem anderen PIC und habe es
> aber irgendwie in den Griff bekommen.

auch ich verzweifelte mal mit Assembler für dspic30f (derselbe Assembler 
wie pic24).
Also programmierte ich das ganze mit C (XC16, MPLABX) und siehe da, es 
funzte!
Da ich aber neugierig war, wo der Fehler lag, habe ich das C-Programm 
disassembliert und mal betrachtet.
Bei mir war's weil die von mir in Assembler benutzten  W-Register noch 
andere Sonderfunktionen hatten, d.h. sie wechselten bei gewissen 
Manipulationen ihren Wert, so dass meine gewünschten Berechnungen nicht 
Zustande kamen...
freundliche Grüsse picfan

Antwort schreiben

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