51单片机实验:无符号双字节乘法运算子程序

51单片机实验:无符号双字节乘法运算子程序,第1张

以前搞的子程序库里的

(5) 标号: MULD 功能:双字节二进制无符号数乘法

 

入口条件:被乘数在R2、R3中,乘数在R6、R7中。

出口信息:乘积在R2、R3、R4、R5中。

影响资源:PSW、A、B、R2~R7 堆栈需求: 2字节

MULD: MOV A,R3 ;计算R3乘R7

MOV B,R7

MUL AB

MOV R4,B ;暂存部分积

MOV R5,A

MOV A,R3 ;计算R3乘R6

MOV B,R6

MUL AB

ADD A,R4 ;累加部分积

MOV R4,A

CLR A

ADDC A,B

MOV R3,A

MOV A,R2 ;计算R2乘R7

MOV B,R7

MUL AB

ADD A,R4 ;累加部分积

MOV R4,A

MOV A,R3

ADDC A,B

MOV R3,A

CLR A

RLC A

XCH A,R2 ;计算R2乘R6

MOV B,R6

MUL AB

ADD A,R3 ;累加部分积

MOV R3,A

MOV A,R2

ADDC A,B

MOV R2,A

RET

这个叫做软件延时程序。由于单片机每执行一条指令都需要时间。上面的程序用文字描述:

DELAY: MOV R5,#20 延时子程序,延时0.2秒

这句是将十进制数20这个数传送给寄存器R5。

D1: MOV R6,#20

这句是:D1是标号,将20传给R6

D2: MOV R7,#248

与上相同

DJNZ R7,$

这句是每执行一次R7就减1如果不为0就跳转到这条指令开头,直到减为0。

DJNZ R6,D2

这句是每执行一次R6就减1如果不为0就跳转到D2这个标号,直到减为0。

DJNZ R5,D1

这句是每执行一次R1就减1如果不为0就跳转到D1这个标号,直到减为0。

RET

这是子程序返回指令,懂了吗??

其实这个延时程序不是精确延时的,如果要精确延时就用定时器中断了。

51程序库

http://www.programfan.com/blog/article.asp?id=19116

http://workingon.bokee.com/viewdiary.12218674.html

MCS-51单片机实用子程序库

http://blog.tom.com/fangqidong/article/416.html


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12194349.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存