übersetzen PIC -> 8051

Gast #684442
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
Gast #684451
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 ?
Gast #684454
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
#684486
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
#684496
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.
#684726
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.
#685173
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren