×
单片机 > 单片机程序设计 > 详情

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

发布时间:2020-08-26 发布时间:
|

单片机编程:求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




『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
STM32单片机的复用端口初始化的步骤及方法