View Single Post
Old 17-10-2005, 10:51 AM   #6
falleaf
PIC Bang chủ
 
falleaf's Avatar
 
Tham gia ngày: May 2005
Bài gửi: 2,631
:
Send a message via Yahoo to falleaf
chương trình thực hiện phép nhân PIC 16

Chương trình nhân 16 bit với 16 bit, kết quả lưu vào thanh ghi 16 bit

Code:
        org     0x020

;Cac thanh ghi của biến nhân và hệ số nhân

mulcH   Res      d'1'       ; MSB of multiplicand. 
mulcL   Res      d'1'       ; LSB of multiplicand. 
mulpH   Res      d'1'       ; MSB of multiplier.
mulpL   Res      d'1'       ; LSB of multiplier.

;Các thanh ghi lưu kết quả nhân

prodH   Res      d'1'       ; MSB of product. 
prodL   Res      d'1'       ; LSB of product. 

index   Res      d'1'       ; temporary counter

;Chuong trinh chinh

start       MOVLW d'0'                 ; Problem: multiply
             MOVWF mulcH
             MOVLW 0x0B                 ; 0Bh by 1016h
             MOVWF mulcL
             MOVLW 0x10                 
             MOVWF mulpH
             MOVLW 0x16                 
             MOVWF mulpL
             CALL multiply              
             GOTO $                     ; Endless loop

Multiply
             CLRF prodH                 ; Clear product to make
             CLRF prodL                 ; way for new calculation.
             MOVLW d'16'                ; Number of bits to calc. 
             MOVWF index

Multiply_loop
             BCF status,c               
             RLF prodL                  ; Shift product left.
             RLF prodH                  
             BCF status,c               
             RLF mulcL                  ; Shift multiplicand left.
             RLF mulcH                  
             BTFSS status,c             ; If carry, add multiplier
             GOTO Multiply_skip
             MOVF mulpL,w               ; to the product. Else skip.
             ADDWF prodL
             BTFSC status,c             ; 16-bit addition: prod+mulp
             INCF prodH                 
             MOVF mulpH,w               
             ADDWF prodH

Multiply_skip
             DECFSZ index               
             GOTO Multiply_loop
             RETLW 0h                   
             
             
             end
Nếu bạn nào làm VHDL hoặc PLC, muốn thực hiện phép cộng thì dùng phép toán nào? Vậy nguyên tắc của phép nhân chính là cộng rồi cộng mãi, nếu như hệ số nhân tại điểm đó là 1.

Chỉ vậy thôi
falleaf vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn