PIC: Multiplikation mit Festwert

Im Unterforum Microcontroller - Beschreibung: Hardware - Software - Ideen - Projekte

Elektronik Forum Nicht eingeloggt       Einloggen       Registrieren




[Registrieren]      --     [FAQ]      --     [ Einen Link auf Ihrer Homepage zum Forum]      --     [ Themen kostenlos per RSS in ihre Homepage einbauen]      --     [Einloggen]

Suchen


Serverzeit: 07 1 2025  04:05:59      TV   VCR Aufnahme   TFT   CRT-Monitor   Netzteile   LED-FAQ   Osziloskop-Schirmbilder            


Elektronik- und Elektroforum Forum Index   >>   Microcontroller        Microcontroller : Hardware - Software - Ideen - Projekte


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

 

  

denke dir mal ordentliche titel aus......

ich kann selbst kein assembler aber 5 sec google waren hilfreich...http://www.avr-asm-tutorial.net/avr......html
http://www.sprut.de/electronic/pic/assemble/befehle.html

_________________
-----------------------------
---MfG Bastelheini---
-----------------------------

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
Zur Homepage von Esko

Lustiges Diagramm, aber hoffentlich nicht dein Ernst!


Zurück zur Seite 1 im Unterforum          Vorheriges Thema Nächstes Thema 


Zum Ersatzteileshop


Bezeichnungen von Produkten, Abbildungen und Logos , die in diesem Forum oder im Shop verwendet werden, sind Eigentum des entsprechenden Herstellers oder Besitzers. Diese dienen lediglich zur Identifikation!
Impressum       Datenschutz       Copyright © Baldur Brock Fernsehtechnik und Versand Ersatzteile in Heilbronn Deutschland       

gerechnet auf die letzten 30 Tage haben wir 22 Beiträge im Durchschnitt pro Tag       heute wurden bisher 3 Beiträge verfasst
© x sparkkelsputz        Besucher : 182687144   Heute : 458    Gestern : 7485    Online : 308        7.1.2025    4:05
0 Besucher in den letzten 60 Sekunden         ---- logout ----viewtopic ---- logout ----
xcvb ycvb
0.0554459095001