Autor |
PIC: Multiplikation mit Festwert Suche nach: pic (2056) |
|
|
|
|
BID = 423267
mo1987 Gerade angekommen
Beiträge: 4 Wohnort: Stuttgart
|
|
Hallo Leute,
ich will einen PIC mit einem Programm beschreiben das ein 4 Bit Eingangssignal an PORTA bekommt. Dann soll dieses Signal (binäre Zahl) mit 7 multipliziert werden. Hat jemand vielleicht eine Idee mit welchem Assemblerbefehl man Multiplizieren kann?
lg mo
============================================
Die Überschrift "Hilfe" ist wirklich nicht sehr hilfreich.
wenn alle ihre Beiträge so überschreiben wollten, hätten wir nur noch Eintopf.
[ Diese Nachricht wurde geändert von: perl am 19 Apr 2007 14:28 ] |
|
BID = 423271
bastelheini Schriftsteller
Beiträge: 618 Wohnort: Sachsen
|
|
BID = 423276
perl Ehrenmitglied
Beiträge: 11110,1 Wohnort: Rheinbach
|
Den Eingangswert 3* linksschieben (ADD auf sich selber) und dann 1mal subtrahieren dürfte kürzer und schneller als jedes Unterprogramm sein.
Selbst faulerweise eine 6- oder 7-malige Addition hinzuschreiben ist schneller als Call/Return.
Maskierung der 4Bits vom Eingangswert und evtl. Initialisierung des Resultatregisters nicht vergessen.
P.S.:
Von der Ausführungszeit an schnellsten düfte es sein, mit dem Eingangswert den Programmcounter zu modifizieren und sich das vorausberechnete Ergebnis aus einer Tabelle mit 16 Einträgen RETLW 0, RETLW .7, RETLW .14, RETLW .21, .... zu holen.
Programmbeispiele für den PIC16x84:
Code : |
; als erstes ein paar meiner Direktiven, die Programme lesbarer machen
W EQU 0 ; new alias
F EQU 1 ; new alias
same EQU 1 ; if 2nd operand is file
; wert einlesen:
movf porta,w
andlw 0x0f ; das müssen wir wohl immer machen
; Wie eingangs beschrieben in 5 cycles:
movwf resultat
addwf resultat,same ; input*2
rlf resultat,same ; input*4
rlf resultat,same ; input*8
subwf resultat,same ; input*8-input = input*7
; Achtung, die erste Verdopplung muss mit ADD nicht mit RL ausgeführt werden,
; da der Zustand des carry anfangs nicht bekannt ist!
; etwas trickreicher in 4 cycles,
; schneller geht auch ein Tabellenzuzgriff nicht:
movwf resultat
swapf resultat,same ; input*16
rrf resultat,same ; input*8, 0 im carry
subwf resultat,same ; input*8-input = input*7
; das carry muss anfangs 0 sein !
; oder für denkfaule in 7 cycles:
movwf resultat
addwf resultat ; input*2
addwf resultat ; input*3
addwf resultat ; input*4
addwf resultat ; input*5
addwf resultat ; input*6
addwf resultat ; input*7
|
|
Bei den großen PICs steht auch eine Hardwaremultiplikation zur Verfügung.
_________________
Haftungsausschluß:
Bei obigem Beitrag handelt es sich um meine private Meinung.
Rechtsansprüche dürfen aus deren Anwendung nicht abgeleitet werden.
Besonders VDE0100; VDE0550/0551; VDE0700; VDE0711; VDE0860 beachten !
[ Diese Nachricht wurde geändert von: perl am 19 Apr 2007 14:31 ]
|
BID = 423298
mo1987 Gerade angekommen
Beiträge: 4 Wohnort: Stuttgart
|
danke für die Antwort, aber dein letztes Programm ist mir nicht so ganz klar, ich gebe einfach immer einen Additionsbefehl, wie kann das Funktionireren?
|
BID = 423300
perl Ehrenmitglied
Beiträge: 11110,1 Wohnort: Rheinbach
|
Die Multiplikation ist doch als wiederholte Addition definiert.
_________________
Haftungsausschluß:
Bei obigem Beitrag handelt es sich um meine private Meinung.
Rechtsansprüche dürfen aus deren Anwendung nicht abgeleitet werden.
Besonders VDE0100; VDE0550/0551; VDE0700; VDE0711; VDE0860 beachten !
|
BID = 423325
mo1987 Gerade angekommen
Beiträge: 4 Wohnort: Stuttgart
|
aloa...
also im Flußdiagramm hab ich dat nun so gelöst!!!!
müsste eigentlich so funktionnieren oder?
danke für die Hilfe
|
BID = 423331
perl Ehrenmitglied
Beiträge: 11110,1 Wohnort: Rheinbach
|
Hattest du nicht geschrieben, du wolltest ein einfaches Programm ?
Dies ist weder kurz noch schnell, noch übersichtlich.
Effizient ist es auch nicht, weil es eins der kostbaren Register als Hilfsvariable braucht.
Und wenn ich daran denke, was bei den Schleifen alles schief gehen kann...
_________________
Haftungsausschluß:
Bei obigem Beitrag handelt es sich um meine private Meinung.
Rechtsansprüche dürfen aus deren Anwendung nicht abgeleitet werden.
Besonders VDE0100; VDE0550/0551; VDE0700; VDE0711; VDE0860 beachten !
|
BID = 423377
Esko Stammposter
Beiträge: 465 Wohnort: Cadolzburg
|
Lustiges Diagramm, aber hoffentlich nicht dein Ernst!
|