打印

求助:三字节乘以二字节的A51子程序

[复制链接]
2935|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
bg6nw|  楼主 | 2008-7-16 13:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
写一个小程序,用来控制TEA5767的收音模块,需要一个乘以1000的子程序,找了三天在网上没找到,找到一个多字节乘十的,运行了三遍,不**,得不到需要的数据。可能我找的那段X10子程序有错,分析了半天又找不出毛病。
特请朋友们帮助,谁有一个三字节乘以二字节的A51子程序,不胜感激。

相关帖子

沙发
tyw| | 2008-7-16 14:47 | 只看该作者

试一下

(4)  标号:  BRLN    功能:多字节BCD码左移十进制一位(乘十)

入口条件:字节数在R7中,操作数在[R0]中。
出口信息:结果仍在[R0]中,移出的十进制最高位在R3中。
影响资源:PSW、A、R2、R3    堆栈需求:  2字节

BRLN:    MOV    A,R7    ;取字节数至R2中
       MOV    R2,A
    ADD    A,R0    ;初始化数据指针
    MOV    R0,A
    MOV    R3,#0    ;工作单元初始化
BRL1:    DEC    R0    ;调整数据指针
    MOV    A,@R0    ;取一字节
    SWAP    A    ;交换十进制高低位
    MOV    @R0,A    ;存回
    MOV    A,R3    ;取低字节移出的十进制高位
    XCHD    A,@R0    ;换出本字节的十进制高位
    MOV    R3,A    ;保存本字节的十进制高位
    DJNZ    R2,BRL1    ;处理完所有字节
    RET

使用特权

评论回复
板凳
bg6nw|  楼主 | 2008-7-16 23:12 | 只看该作者

谢谢tyw

可能是我表达有误,我是想要一个十六进制的,仍然对你表示感谢。
今天又搜了一下,找到一个非常古怪的子程序,试着运行了一下,
单片机死机了~~

;多字节数乘10子程序D_MUL10
;入口条件:多字节数低位字节地址放于R1中;字节数放于R7中
;出口参数:
;参数影响:A,R1,R2,R7,B
D_MUL10:    PUSH PSW
    PUSH ACC 
    PUSH B
    CLR C
    MOV R2,#00H
SH10:    MOV A,@R1
    MOV B,#0AH
    PUSH PSW
    ADDC A,R2
    MOV @R1,A
    MOV R2,B
    INC R1
    DJNZ R7,SH10
    MOV @R1,B
    POP B 
    POP ACC
    POP PSW
    RET 


使用特权

评论回复
地板
tyw| | 2008-7-17 06:47 | 只看该作者

多字节无符号数乘法,自已啃一下

DOMUL:    
    MOV    A,R1                    
    MOV    R6,A
    MOV    A,R0                    
    MOV    R5,A                    
    MOV    A,R2                    
    ADD    A,R2                    
    MOV    26H,A
    MOV    R7,A
    MOV    A,R4
    MOV    R0,A
CLEAR:        
    MOV    @R0,#00H                
    INC        R0                    
    DJNZ    R7,CLEAR
    MOV    A,R4
    MOV    R7,A
    MOV    27H,R7
    MOV    20H,R2
LP0:        
    MOV    A,R5
    MOV    R0,A
    MOV    A,@R0
    MOV    B,@R1
    MUL    AB                    
    ACALL    ADDM
    INC    R1
    DJNZ    R2,LP0
    MOV    R2,20H
    MOV    A,R6
    MOV    R1,A
    MOV    A,R7
    INC    A                
    MOV    R7,A
    MOV    R4,A
    INC    R5
    DJNZ    R3,LP0
    MOV    R4,27H                
    MOV    R5,26H
    RET
ADDM:        
    MOV    21H,A                
    MOV    A,R4
    MOV    R0,A
    MOV    A,21H
    ADD    A,@R0
    MOV    @R0,A
    MOV    A,B
    INC    R0                    
    ADDC    A,@R0
    MOV    @R0,A
    INC    R0                
    MOV    A,@R0
    ADDC    A,#00H
    MOV    @R0,A
    DEC    R0                    
    MOV    A,R0
    MOV    R4,A
    RET                            

使用特权

评论回复
5
tyw| | 2008-7-17 06:54 | 只看该作者

还有一个



 

 

 

 

 

 

 

使用特权

评论回复
6
wh6ic| | 2008-7-17 09:36 | 只看该作者

三字节乘以二字节的A51子程序


;just for test, writen by S.W @ Jul.17.2008
;r0 r1 * r2 r3 r4 --> r3 r4 r5 r6 r7
;破坏A B PSW, r3 r4 成为结果存储器, 三字节数也被破坏.
;搏bg6nw兄一笑 :-P, 有其他要求没提概不负责, 因本流程引起的任何问题概不负责. (有$拿就马马虎虎管一管)

Multi_2x3:
    mov    a, r4
    mov    b, r1
    mul    ab
    mov    r7, a
    mov    r6, b
    mov    a, r4
    mov    b, r0
    mul    ab
    add    a, r6
    mov    r6, a
    clr    a
    addc    a, b
    mov    r5, a    ; r4 X r0 r1 --> r5 r6 r7, r4 任务完成, 可以覆盖

    mov    a, r3
    mov    b, r1
    mul    ab
    add    a, r6
    mov    r6, a
    mov    a, r5
    addc    a, b
    mov    r5, a
    clr    a
    rlc    a
    mov    r4, a
    mov    a, r3
    mov    b, r0
    mul    ab
    add    a, r5
    mov    r5, a
    mov    a, r4
    addc    a, b
    mov    r4, a    ; r3 X r0 r1 +-> r4 r5 r6 , r3 任务完成, 可以覆盖

    mov    a, r2
    mov    b, r1
    mul    ab
    add    a, r5
    mov    r5, a
    mov    a, r4
    addc    a, b
    mov    r4, a
    clr    a
    rlc    a
    mov    r3, a
    mov    a, r2
    mov    b, r0
    mul    ab
    add    a, r4
    mov    r4, a
    mov    a, r3
    addc    a, b
    mov    r3, a    ; r2 X r0 r1 +-> r3 r4 r5 , r2 r3 r4 分别乘加 r0 r1, 乘积 --> r3 r4 r5 r6 r7

    ret

使用特权

评论回复
7
linqing171| | 2008-7-17 13:16 | 只看该作者

因式分解

X*1000=X*1024-X*16-X*8

在不的话就是
X*1000=(X*125)*8

还有X=X1*256+X2
X*1000=(X1*256+X2)*(3*256+232)
=x1*3*256*256+X2*3*256+X1*232*256+X2*232
这次都变成单字节的了吧?

使用特权

评论回复
8
bg6nw|  楼主 | 2008-7-17 21:29 | 只看该作者

谢谢各位大虾指点

问题已马马虎虎解决了,我的TEA5767收音机已装好。
乘1000子程序不好找,偶尔在一个频率计程序里面找到一个三字节乘以一字节的,便拷下来,运行了一次乘10,又运行一次乘100,哎,总算搞定了,累的一头汗~~~

使用特权

评论回复
9
renqingbin| | 2008-7-18 23:04 | 只看该作者

学习了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

34

主题

511

帖子

0

粉丝