- LiTime Speicher und Akkus         
Ergebnis 1 bis 5 von 5

Thema: Multiplikation zweier 8-Bit-Zahlen

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    17.11.2007
    Beiträge
    9

    Multiplikation zweier 8-Bit-Zahlen

    Anzeige

    Praxistest und DIY Projekte
    ich bin Anfänger und brauche ein Lernbeispiel für die Multiplikation zweier 8-Bit-Zahlen. z.B. PIC-Typ ist pic16f84.

    danke im Voraus.

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    04.11.2007
    Beiträge
    100
    Code:
    ;Small - 67 cycles constant, 11 instructions
    ;Same principle as application note 526
    ;Optimized for minimal size by Bjørn Bæverfjord
    
    mul8x8s clrf    prodH
            movlw   .128
            movwf   prodL
            movfw   mulcnd
    mulsl   rrf     mulplr
            skpnc
            addwf   prodH
            rrf     prodH
            rrf     prodL
            skpc
            goto    mulsl
            return
    geklaut bei:
    http://ww1.microchip.com/downloads/e...tes/00526e.pdf
    http://www.sciencezero.org/computing/picmul8x8.htm

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    17.11.2007
    Beiträge
    9
    ich habe ein Programm geschrieben, aber das Praoramm läuft nicht richtig, warum?
    Code:
    ;**************************** 
    ; 	8x8 Software Multiplier	 
    ;****************************
    		LIST 	P = 16f84,
     		#include<P16f84.INC>		 
     
    mulcnd 	equ 	0x09 	; 8 bit multiplicand	 
    mulplr 	equ 	0x10 	; 8 bit multiplier	 
    H_byte 	equ 	0x12 	; High byte of the 16 bit result	 
    L_byte 	equ 	0x13 	; Low byte of the 16 bit result	 
    count 	equ 	0x14 	; loop counter	 
    Same 	equ 	1
    ;************************************************************************
    
    START  GOTO 	main
    				 		 
    ; ***************************** 	
    Begin Multiplier Routine 	 
    mpy_S 	clrf 	H_byte 		; H_byte = 0000 0000 
    		clrf 	L_byte 		; L_byte = 0000 0000
    		movlw 	8 		 
    		movwf 	count 	    ; count = 8	 
    		movf 	mulcnd,W 	; multiplicand ---> W
    		bcf 	STATUS, C 	; Clear the carry bit  
    loop    rrf 	mulplr, F   ; multiplier: 1-bit nach rechts verschieben
    		btfsc 	STATUS,C 	; C=0 , uebergehen
    		addwf 	H_byte,Same 		 
    		rrf 	H_byte,Same 		 
    		rrf     L_byte,Same
    		decfsz  count, F
    		goto    loop
    		retlw 0
    ;
     ;********************************************************************
    ; Test Program
    ;*********************************************************************
    main	movlw   0x1f
    		movwf 	mulplr  	; multiplier---> mulplr
    		movlw 	0x12         
    		movwf 	mulcnd		; Multiplicand ---> mulcnd
    
    		call 	mpy_S 		; 
    		END
    Code-Tags verwenden ! sieht hübscher aus

  4. #4
    Erfahrener Benutzer Lebende Robotik Legende Avatar von PICture
    Registriert seit
    10.10.2005
    Ort
    Freyung bei Passau in Bayern
    Alter
    72
    Beiträge
    11.077
    Hallo Valentiano!

    Wenn ein R1 Register durch ein R2 Register multipliziert seien soll, kann man den R2 einfach R1 mal zu der bisheriger Summe (am Anfang gleich 0) in einem 16-bit Register (der aus zwei 8-bit Register MH und ML besteht) addieren. Das sollte so wie das PAD im Code zeigt ablaufen.

    Dein Programm macht aber nur mehrmals Verschiebung um 1 bit nach rechts, was der Teilung durch 2 entspricht.

    MfG
    Code:
               V
            0->MH               ;löschen
            0->ML               ;löschen
            R1->SZ              ;R1 in SZ (Schleifenzähler) kopieren
       .--->ML+R2->ML           ;R2 zum ML addieren
       |    C=1 ? N ---.        ;Überlaufen?
       |        J      |
       |    MH+1->MH   |        ;MH um 1 erhöhen
       |       V<------´
       |    SZ=0 J ---> return  ;Schleife R1 mal abgelaufen? Wenn ja, Ende
       |       N
       |       V
       `-------´

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    02.03.2008
    Alter
    43
    Beiträge
    38
    Hey,
    also ich kann dir nur www.sprut.de empfehlen. Hier ist alles aufgelistet mit (Lern) BSP !!!

    greetz

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiTime Speicher und Akkus