單片機編程:求8個無符號數(shù)的平均值。
有8個無符號數(shù),存放在內(nèi)部RAM以20H開始的8個單元中,要求將它們的平均值保存在R2中。
;------------------------------------------------------------------------------
最佳答案:
做這個題目,要有兩個階段,先求和,再除以8。程序如下:
;8個無符號數(shù)存放在內(nèi)部RAM以20H開始的8個單元中,先求和:
;
MOV R0, #20H ;設定數(shù)據(jù)起始地址
MOV R1, #8 ;共有8字節(jié),將循環(huán)相加8次
MOV R2, #0 ;R2 R3清零
MOV R3, #0
LOOP:
MOV A, @R0 ;取來一個數(shù)字
ADD A, R3 ;和低8位相加
MOV R3, A
JNC QQQ ;無進位轉移
INC R2 ;有則高8位加一
QQQ:
INC R0 ;修改地址指針
DJNZ R1, LOOP ;循環(huán)8次
;
;至此,求和完畢,和數(shù)在R2R3中,下面就要對和數(shù)除以8,求得平均值。
;
;除以8,可以編寫一段16位數(shù)除以8位數(shù)的程序,呵呵,那就太長了!
;也可以把這16位數(shù),右移3位,也相當于除以8。
;兩個字節(jié),右移1位,就需要6條指令,右移3位,就要用18條指令,還是太長?。。?br/>;
;且看下面,僅僅使用了5條指令,就完成了這個除以8的任務。
;
ANL A, #0F8H
ADD A, R2
RL A
SWAP A
MOV R2, A ;按照要求,把平均值存R2
;
;這是世界上最簡捷的16位數(shù)(共11個有效位)除以8的程序。
;
SJMP $
END