【单片机】编程计算存放在片外RAM30H单元开始的64个无符号数的平均值,结果存入片内RAM30H单元
来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/14 11:35:05
【单片机】编程计算存放在片外RAM30H单元开始的64个无符号数的平均值,结果存入片内RAM30H单元
编程计算存放在片外RAM30H单元开始的64个无符号数的平均值,结果存入片内RAM30H单元.
编程计算存放在片外RAM30H单元开始的64个无符号数的平均值,结果存入片内RAM30H单元.
;
CLR A
MOV R1,A
MOV 30H,A
MOV R0,#30H
MOV R2,#64
LOOP:
MOVX A,@R0
ADD A,R1
MOV R1,A
JNC NEXT
INC 30H
NEXTl
INC R0
DJNZ R2,LOOP
MOV A,R1
ANL A,#0C0H
ADD A,30H
RL A
RL A
MOV 30H,A
SJMP $
END
再问: SJMP $
是什么?
再答: 这一句和题目无关。
你如果看不懂,可以把它删除。
再问: ANL A, #0C0H
ADD A, 30H
这两句什么用?
再答: ;这几句,是除以 64 的。
MOV A, R1
ANL A, #0C0H
ADD A, 30H
RL A
RL A
MOV 30H, A
并没有用除法,是用右移六位,代替了除以 64。
实际上,也并没有用右移六位,是用左移两位,代替了。
这个做法,效率最高。
再问: RL A
RL A
这个是除以8再除以8,我知道。
就是不懂这两句:
ANL A, #0C0H
ADD A, 30H
ANL A, #0C0H ,这样子A不就剩最高的两位了,后面的六位都变成了零。。。
ADD A, 30H , 还把30H的内容再累加到A上,这是在干啥?
这两步不可以去掉么?
再答: ;
RL A
RL A
这个是除以8再除以8,我知道。
--不是除以8再除以8。
--是左环移两位。
就是不懂这两句:
ANL A, #0C0H ,这样子A不就剩最高的两位了,后面的六位都变成了零。。。
ADD A, 30H , 还把30H的内容再累加到A上,这是在干啥?
这两步不可以去掉么?
-----------------------
求平均值,要除以 64。
就是把 30H__R1 两个单元的内容除以64。
即,把 30H__R1 两个单元中的 16 位数,右移 6 位。
得到的结果,应该是八位,即:30H 的低 6 位__R1 的高 2 位。
-----------------------
;这几句,是除以 64 的。
MOV A, R1
ANL A, #0C0H ;这就剩最高的两位了
ADD A, 30H ;加上 30H 的低6位
RL A ;是左环移。最高位,环形移动到最低位
RL A ;是左环移
MOV 30H, A ;30H 的低 6 位__R1 的高 2 位
并没有用除法,是用右移六位,代替了除以 64。
实际上,也并没有用右移六位,是用左移两位,代替了。
这个做法,效率最高。
CLR A
MOV R1,A
MOV 30H,A
MOV R0,#30H
MOV R2,#64
LOOP:
MOVX A,@R0
ADD A,R1
MOV R1,A
JNC NEXT
INC 30H
NEXTl
INC R0
DJNZ R2,LOOP
MOV A,R1
ANL A,#0C0H
ADD A,30H
RL A
RL A
MOV 30H,A
SJMP $
END
再问: SJMP $
是什么?
再答: 这一句和题目无关。
你如果看不懂,可以把它删除。
再问: ANL A, #0C0H
ADD A, 30H
这两句什么用?
再答: ;这几句,是除以 64 的。
MOV A, R1
ANL A, #0C0H
ADD A, 30H
RL A
RL A
MOV 30H, A
并没有用除法,是用右移六位,代替了除以 64。
实际上,也并没有用右移六位,是用左移两位,代替了。
这个做法,效率最高。
再问: RL A
RL A
这个是除以8再除以8,我知道。
就是不懂这两句:
ANL A, #0C0H
ADD A, 30H
ANL A, #0C0H ,这样子A不就剩最高的两位了,后面的六位都变成了零。。。
ADD A, 30H , 还把30H的内容再累加到A上,这是在干啥?
这两步不可以去掉么?
再答: ;
RL A
RL A
这个是除以8再除以8,我知道。
--不是除以8再除以8。
--是左环移两位。
就是不懂这两句:
ANL A, #0C0H ,这样子A不就剩最高的两位了,后面的六位都变成了零。。。
ADD A, 30H , 还把30H的内容再累加到A上,这是在干啥?
这两步不可以去掉么?
-----------------------
求平均值,要除以 64。
就是把 30H__R1 两个单元的内容除以64。
即,把 30H__R1 两个单元中的 16 位数,右移 6 位。
得到的结果,应该是八位,即:30H 的低 6 位__R1 的高 2 位。
-----------------------
;这几句,是除以 64 的。
MOV A, R1
ANL A, #0C0H ;这就剩最高的两位了
ADD A, 30H ;加上 30H 的低6位
RL A ;是左环移。最高位,环形移动到最低位
RL A ;是左环移
MOV 30H, A ;30H 的低 6 位__R1 的高 2 位
并没有用除法,是用右移六位,代替了除以 64。
实际上,也并没有用右移六位,是用左移两位,代替了。
这个做法,效率最高。
【单片机】编程计算存放在片外RAM30H单元开始的64个无符号数的平均值,结果存入片内RAM30H单元
片内RAM30H~39H单元有10个单元字节无符号数,找上最大的数存入R5
求一个单片机编程题假设从内部的RAM30H单元开始,连续存放一个字符串,以回车符(其ASCII码为ODH)作为结束标志,
一个关于单片机的问题 内部RAM的DATA1,DATA2开始存放13个无符号数,试编程计算6Y除以X,并将结果存入外部R
假设从DATA开始的内存单元中存放了100个8位无符号数,试编写程序段求这100个数的平均值,结果放在EVEN单元
在片外2000H开始的单元中有100个有符号数,试编程统计其中正数、负数、零的个数.
编程将存放在2000H单元开始的100个无符号数中的最小值找出 并存入2000H单元 大哥帮忙做下吧还有一些题在这
单片机编程:片外RAM的1000H单元内容送到片外RAM的4000H单元中.
编程将内ram从data单元开始的16个无符号数相加.其和送入sum单元.假定和小于255
片外RAM区从1000H单元开始存有100个单元字节无符号数,找出最大值并存入1100H单元
单片机片内RAM单元,一个单元可以存放几个字节啊?
.ARRAY单元开始存放200个有符号字节数,统计出其正数、0和负数的个数,并把它们分别存入N1、N2、和N3中.