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