单片机编程1

来源:百度知道 编辑:UC知道 时间:2024/06/13 23:03:36
从内部RAM20H单元开始,有30个带符号数,试编一个程序,把其中正数、负数分别送到51H和71H开始的存储单元,并分别记下其中正数和负数的个数送到50H和70H单元。

ZHENG DATA 50H
FU DATA 70H

ORG 0000H
LJMP MAIN
ORG 0050H
MAIN:MOV ZHENG,#00H ;计数初始为零
MOV FU,#00H ;计数初始为零
MOV R7,#30 ;30个数
MOV R0,#1FH ;第一个数的前一个地址
MOV R1,#51H ;整数存的首地址
MOV SP,#70H ;负数的首地址
LOOP:INC R0 ;指向第一个数
MOV A,@R0 ;给a
MOV C,ACC.7 ;符号位给c
JC NEXT ;势负数则next
MOV @R1,A
INC R1 ;正数就保存在正的
INC ZHENG ;计数加一
NEXT:PUSH FU ;负数存
INC FU ;计数加一
DJNZ R7,LOOP ;未到30就继续判断
END ;结束

嘿嘿 你和zhaoyujieqq是同学么? 怎么问了一摸一样的题目啊。

他的那个程序和楼上的雷同,不过个人认为zhaoyujieqq的比楼上的稍好,因为思路更清晰,对于读取数据采用POP方式,储存数据统一采用R0、R1间接寻址方式。

ORG 0000H
LJMP 0030H
ORG 0030H
MOV R5,#30;30个数

MOV SP ,#3DH ;30个数据中最后一位的地址
MOV R0,#51H ;下四行为正负数存放地址和计数单元。