mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik übersetzen PIC -> 8051


Autor: Pieter (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
moin moin,

brauche nun auch mal Hilfe.
Anbei eine Function arctan in PIC-ASM. Kann mir jemand bitte helfen, das 
in eine "Normalform" Pascal oder besser 8051-ASM zu übersetzen?

Danke.
Mit Gruß Pieter

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jo, das ist ja auch ganz einfach PIC ASM in 8051 ASM
zu übersetzen.

Vergiss es !

Such nach einer atan() arctan() Funktion für 8051 mit google.

Autor: Stephan Henning (stephan-)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin Peter,

ja ja die Fräse.
Ich kenne leider auch keinen der PIC macht. Sorry
Ganz "stur" von Oben nach Unten bringt keine Erkenntnisse ???

Gruß Stephan

Autor: Pieter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
moin moin,

@Stephan
jo, Fräsradiuskorrektur an Innenecken <> 90° da braucht man zur 
Berechnung des Umschaltpunktes den Schnittwinkel beider Graden...und das 
ist ArcTAN.
Der Fräßtisch wiegt nun schlappe 36Kg, die Höhendiffernz bei 500x500mm 
liegt bei ca. 0,4mm


@Holger,

wenn Du PIC-ASM kennst:
        BTFSC   x,0  ;Übergehe nachfolgenden Befehl, wenn Bit=0
         ADDWF  temp,F

da x aber ein Byte ist, ist dann Bit0 von x gemeint?

wenn Du PIC-ASM NICHT kennst:
  was willst Du mir sagen?????


mfg Pieter

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>@Holger,
>wenn Du PIC-ASM kennst:
>        BTFSC   x,0  ;Übergehe nachfolgenden Befehl, wenn Bit=0
>         ADDWF  temp,F

>da x aber ein Byte ist, ist dann Bit0 von x gemeint?

Steht alles im Datenblatt zum PIC.
Instruction Set Summary.

>wenn Du PIC-ASM NICHT kennst:
>  was willst Du mir sagen?????

Das du ein fauler Sack bist ?

Autor: Jens Plappert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
mit deiner Vermutung hast du Recht

BTFSC A,3  =   Bit Test File Skip If Clear     Byte A,Bit 3
Ich weiss nicht mehr wo, aber irgendwo gibts ne Tabelle wo sie alle ganz 
kurz und Übersichtlich und verstädnlich drinstehen. Meine eigene Tabell 
ist "leider" per Hand entstanden

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
PIC kann ich nicht, ist mir zu kompliziert (zu wenig Befehle).

Aber in C steht doch drüber, was der Code macht.
In 8051 Assembler könnte das so aussehen:
arctan:
        mov     b, a
        anl     a, #0F0h
        swap    a
        mov     r7, a
        mov     dptr, #arc_tan_table
        movc    a, @a+dptr

        xch     a, r7
        add     a, #1
        movc    a, @a+dptr
        subb    a, r7

        anl     b, #0Fh
        mul     ab
        anl     a, #0F0h
        add     a, b
        swap    a

        add     a, r7
        ret
arc_tan_table:
        db      0, 20, 41, 60, 80, 99, 117, 134
        db      151, 167, 182, 196, 210, 222, 234, 245, 0

Daß 8051 Code wesentlich kürzer als PIC ist, ist normal.


Peter

Autor: I_ H. (i_h)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hab 'ne ganze Weile mit PIC rumgemacht, der asm ist wirklich net schwer, 
es gibt kaum Instruktionen und auch nur ein einzelnes Register. Die 
Assembler kennen noch ein paar Makros die man sonst umständlich 
ausdrücken muss, und indirekte Adressierung macht auch wenig Spaß, wobei 
das wohl die bessere Lösung als die lustige Rücksprungtabelle ganz unten 
gewesen wäre.

Die Hardware in den PICs ist allerdings ganz nett, der ADC hat häufiger 
12 Bit, die Timer kann man, wenn man sie extern triggert, auch mit 
deutlich höheren Taktraten als Clk laufen lassen (50MHz), usw.

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
I_ H. wrote:

> wobei das wohl die bessere Lösung als die lustige Rücksprungtabelle
> ganz unten gewesen wäre.

Gibt's bei PIC16 dazu tatsächlich eine Alternative?

Autor: I_ H. (i_h)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jup, indirekter Zugriff über FSR und INDF. Die Variante da oben hat 
nämlich den Nachteil, das ADDWF nur 8bittig arbeitet, Adressen aber 
größer sind. Und wenn die Addition überläuft, weil die Tabelle zB. von 
Offset 500 bis 520 geht, macht der PIC nicht zB. bei 512 weiter, sondern 
bei 256.

Autor: Dieter Werner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
FSR und INDF funktionieren aber leider nur im FILE Bereich (RAM).

Autor: Severino R. (severino)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dieter Werner wrote:
> FSR und INDF funktionieren aber leider nur im FILE Bereich (RAM).

Stimmt!

Man kann aber über EEADR (ev. auch EEADRH) eine Speicherstelle im EEPROM 
adressieren und über EEDATA auslesen.
Und wenn Bit EEPGD in EECON1 gesetzt ist, wird über EEADRH:EEADR eine 
Speicherstelle im Program-Memory adressiert und über EEDATH:EEDATA 
ausgelesen.
Dies gilt jedenfalls für PIC16F87xA. Siehe Datenbuch Kapitel "3.0 DATA 
EEPROM AND FLASH PROGRAM MEMORY".

Funktioniert sogar! Habs selber ausprobiert.

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Severino R. wrote:

> Dies gilt jedenfalls für PIC16F87xA.

Gilt wohl nur für manche PIC16. Beim hier verwendeten 16F84(A) oder den 
16F62x beispielsweise nicht.

Autor: Dieter Werner (dds5)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da lob ich mir die PIC18er, da geht das mit TBLPTR und TBLRD.

PIC16er sind eigentlich wirklich nicht mehr ganz aktuell mit ihrem 
Befehlssatz, z.B. Addition und Subtraktion mit carry... was ein Gewürge!

Autor: Stephan Henning (stephan-)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dieter, nimm doch mal nen 8051..

Autor: Dieter Werner (dds5)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stephan, nach Z80 von 1978 bis 1990 und 8051/52/55 von 1990 bis 2001 bin 
ich seitdem (beruflich) an PICs hängengeblieben.

Der letzte 16C66 soll nächstes Jahr abgelöst werden, dann läuft alles 
mit 18F und 24F bzw. H.

EDIT:
Schön dass es mit den ispLSI geklappt hat.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.