单片机编程:求8个无符号数的平均值
扫描二维码
随时随地手机看文章
单片机编程:求8个无符号数的平均值。
有8个无符号数,存放在内部RAM以20H开始的8个单元中,要求将它们的平均值保存在R2中。
;------------------------------------------------------------------------------
最佳答案:
做这个题目,要有两个阶段,先求和,再除以8。程序如下:
;8个无符号数存放在内部RAM以20H开始的8个单元中,先求和:
;
MOV R0, #20H ;设定数据起始地址
MOV R1, #8 ;共有8字节,将循环相加8次
MOV R2, #0 ;R2 R3清零
MOV R3, #0
LOOP:
MOV A, @R0 ;取来一个数字
ADD A, R3 ;和低8位相加
MOV R3, A
JNC QQQ ;无进位转移
INC R2 ;有则高8位加一
QQQ:
INC R0 ;修改地址指针
DJNZ R1, LOOP ;循环8次
;
;至此,求和完毕,和数在R2R3中,下面就要对和数除以8,求得平均值。
;
;除以8,可以编写一段16位数除以8位数的程序,呵呵,那就太长了!
;也可以把这16位数,右移3位,也相当于除以8。
;两个字节,右移1位,就需要6条指令,右移3位,就要用18条指令,还是太长!!!
;
;且看下面,仅仅使用了5条指令,就完成了这个除以8的任务。
;
ANL A, #0F8H
ADD A, R2
RL A
SWAP A
MOV R2, A ;按照要求,把平均值存R2
;
;这是世界上最简捷的16位数(共11个有效位)除以8的程序。
;
SJMP $
END