单片机编程:求8个无符号数的平均值

单片机编程:求8个无符号数的平均值。
有8个无符号数,存放在内部RAM以20H开始的8个单元中,要求将它们的平均值保存在R2中。
悬赏分:20 - 解决时间:2010-4-11 22:31
;------------------------------------------------------------------------------
最佳答案:

做这个题目,要有两个阶段,先求和,再除以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
;------------------------------------------------------------------------------
回答者:   做而论道 - 十三级   2010-4-11 19:56
提问者对于答案的评价:太感谢了。
原题网址:http://z.baidu.com/question/146671754.html

另外,还有补充提问,可见下篇文章。

你可能感兴趣的:(51汇编语言)