51单片机编程求指导。。。

编子程序,将内部数据存储区从20H开始的连续4个单字节二进制数相加,结果存于30H(高字节)、31H(低字节),并计算平均值,结果存于32H。... 编子程序,将内部数据存储区从20H开始的连续4个单字节二进制数相加,结果存于30H(高字节)、31H(低字节),并计算平均值,结果存于32H。 展开
 我来答
胖大海君
2012-11-08 · TA获得超过1.4万个赞
知道大有可为答主
回答量:1436
采纳率:11%
帮助的人:629万
展开全部
嘿嘿 楼上的老兄给出的程序也不对呀 看上去挺工整的,错误好几出啊,是得不到正确结果的。
其实算法很简单,只要熟悉一下单片机的加法指令和循环移位指令,自己就可以编写出来。
1 算法:
就是使用指针 连续对20H开始的连续4个单字节二进制数相加,结果存入31H单元,要考虑进位,(进位部分存入31H单元)
求平均值 就是对和除4,可以使用循环右移指令 每移一次 相当于除2 总共2次就行了。

2 楼上的错误: 使用指令 ADD A,31H 求的和在累加器A里,并没有存入31H
使用指令 MOV A,31H ;低位送A
RRC A ;带进位循环右移完成一次除2
同样没有将结果回送给31H单元(保存)

呵呵 满意就选满意回答 (想要正确程序 可以发消息给我)
zhxiufan
2012-11-08 · 知道合伙人软件行家
zhxiufan
知道合伙人软件行家
采纳数:14923 获赞数:38381
国家科技进步奖

向TA提问 私信TA
展开全部
SQUD:
MOV R0,#20H ;间接寻址首地址送R0
MOV 30H,#0 ;累加结果高位清零
MOV 31H,#0 ;累加结果低位清零
MOV R7,#4 ;循环4次累加4个数
SQUD1:
MOV A,@R0 ;取数送A
ADD A,31H ;与结果低位相加
JNC SQUD2 ;没有进位转
INC 30H ;有进位高位加1
SQUD2:
INC R0 ;地址加1
DJNZ R7,SQUD1 ;判断5个数是否加完
MOV R7,#2
SQUD3:
MOV A,30H ;高低位送A
RRC A ;带进位循环右移
MOV 30H,A ;回送30H
MOV A,31H ;低位送A
RRC A ;带进位循环右移完成一次除2
DJNZ R7,SQUD3 ;共移两次相当于除4
MOV 32H,A ;结果存32H
RET
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式