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


von Pieter (Gast)


Angehängte Dateien:

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

von holger (Gast)


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.

von Stephan H. (stephan-)


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

von Pieter (Gast)


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

von holger (Gast)


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 ?

von Jens Plappert (Gast)


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

von Peter D. (peda)


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:
1
arctan:
2
        mov     b, a
3
        anl     a, #0F0h
4
        swap    a
5
        mov     r7, a
6
        mov     dptr, #arc_tan_table
7
        movc    a, @a+dptr
8
9
        xch     a, r7
10
        add     a, #1
11
        movc    a, @a+dptr
12
        subb    a, r7
13
14
        anl     b, #0Fh
15
        mul     ab
16
        anl     a, #0F0h
17
        add     a, b
18
        swap    a
19
20
        add     a, r7
21
        ret
22
arc_tan_table:
23
        db      0, 20, 41, 60, 80, 99, 117, 134
24
        db      151, 167, 182, 196, 210, 222, 234, 245, 0

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


Peter

von I_ H. (i_h)


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.

von Andreas K. (a-k)


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?

von I_ H. (i_h)


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.

von Dieter Werner (Gast)


Lesenswert?

FSR und INDF funktionieren aber leider nur im FILE Bereich (RAM).

von Severino R. (severino)


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.

von Andreas K. (a-k)


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.

von Dieter W. (dds5)


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!

von Stephan H. (stephan-)


Lesenswert?

Dieter, nimm doch mal nen 8051..

von Dieter W. (dds5)


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.

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.