RSS

PIC单片机应算子程序

来源: 作者: 时间:2007-01-05 Tag: 点击:


    MOVWF    ACCBLO
    MOVLW    0X66
    MOVWF    ACCBHI
    MOVLW    0XB8    ;加数BB8H送ACCA
    MOVWF    ACCALO
    MOVLW    0X0B
    MOVWF    ACCAHI
    CALL    D_add    ;调用双字节加法子程序,求和
    END
 2.2  16×16位定点数乘法子程序
子程序采用部分积右移加法实现乘法运算。乘数和被乘数分别为16位二进制有符号数(均采用补码表示,第16位为符号位),积为32位二进制有符号数,第32位为符号位。子程序的入口条件和出口条件如下:
入口条件:被乘数存放在ACCBHI和ACCBLO单元中,
          乘数存放在ACCAHI和ACCALO单元中。
出口条件:积存放在ACCBHI、ACCBLO、ACCCHI和ACCCLO单元中,ACCB为高16位,ACCC为低16位。
以下为本子程序的程序清单:

    LIST    p=16f877
    INCLUDE    p16f877.inc
    ACCALO     EQU     20    ;存放乘数低8位
    ACCAHI     EQU     21    ;存放乘数高8位
    ACCBLO     EQU     23    ;存放被乘数低8位和乘积第16~23位
    ACCBHI     EQU     24    ;存放被乘数高8位和乘积第24~31位
    ACCCLO     EQU     26    ;存放乘积低8位
    ACCCHI     EQU     27    ;存放乘积高8位
    ACCDLO     EQU     28    ;临时寄存器
    ACCDHI     EQU     29    ;临时寄存器
    TEMP     EQU     2A    ;临时寄存器
    SIGN     EQU     2B    ;存放乘积的符号
    ORG    0X0000
START    GOTO     MAIN
;***16×16位乘法子程序,入口地址ACCB×ACCA,出口地址ACCB和ACCC ***
    ORG  0X0100
D_mpy    CALL     S_SIGN    ;求取乘积的符号,并对负数取补
     CALL     SETUP    ;调用子程序,将ACCB的值送ACCD
    INCF    TEMP
    CLRF     ACCCHI    ;清ACCC
    CLRF     ACCCLO
MLOOP    BCF     STATUS,C    ;清进位位
    RRF     ACCDHI    ;ACCD右移
    RRF     ACCDLO
    BTFSC     STATUS,C    ;判断是否需要相加
    CALL     D_add    ;加乘数至ACCB,见加法程序
    BCF     STATUS,C    ;清进位位
    RRF     ACCBHI    ;右移部分乘积
    RRF     ACCBLO
    RRF     ACCCHI
    RRF     ACCCLO
    DECFSZ     TEMP    ;乘法完成否?
    GOTO     MLOOP    ;否,继续求乘积
    BTFSS     SIGN,7    ;是,确定乘积的符号
    GOTO     OVER    ;为正,乘法结束
    COMF     ACCCLO    ;为负,乘积取补
    INCF         ACCCLO
    BTFSC        STATUS,Z
    DECF         ACCCHI
1.部分资源来自网络,经ET电子归类整理,旨在服务电子爱好者并无商业目的,不保证正确性与完整性.
2.如果您觉得本站资源对您有用,请告知您的好友,用搜索引擎搜"ET电子"即可.


最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?
注册
教程下载