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





