1 单片机编程
1. 在 M1 和 M1+1 单元中有两个 BCD 数,请通过编程
将它们紧缩成一个字节并放入 M1 单元。
ORG 1000H
MOV R1, # M1 ;地址 M1 送 R1
MOV A, @R1 ;A←M1 中 BCD 数
SWAP A, ;BCD1 移入高 4 位
INC R1 ;修改地址指针 R1
ORL A, @ R1 ;BCD1 和 BCD2 合并后送 A
MOV M1,A ;送回 M1 单元
SJMP $ ;停机
END
2.在外部 RAM 首地址为 TABLE 的数据表中有 10 个字
节数据,请编程将每个字节的最高位无条件地置 1。
MOV R2,#10
MOV DPRT,#TABLE
LOOP:<<<MOV X A,@DPRT;取一数
ORL A,#80H;最高位置 1
MOV X @DPTR,A;写回原地址
1NC DPTR;处理下一单元
DJNZ R2,LOOP
RET
3.已知内部 RAM 30H 单元开始存放 20H 个数据,将
其传送到外部 RAM 的 0000H 单元开始的存储区,请
编程实现。
MOV R0,#30H
MOV R1,#00H
MOV R2,#20H
LOOP:<MOV A,@R0;取数
MOV X @R1,A;存数
1NC R0
1NC R1
DJNZ R2,LOOP
RET
4.已知 8 个无符号数之和存于 R3R4,求其平均值,结
果仍存于 R3R4 中,请编程实现(R3 为高字节)。
MOV R2,#3
LOOP:CLR C
MOV A,R3
RRC A;高字节除以 2,末位移入 C,高位补 0
MOV R3,A ;暂存高字节
MOV A,R4
RRC A;低字节除以 2,高字节末位移入低字
节高位
MOV R3,A
DJNZ R2,LOOP
RET
5.两个字符串分别存放在首地址为 42H 和 52H 的内部
RAM 中,字符串长度放在 41H 单元,请编程比较两个
字符串。若相等,则把数字 00H 送 40H 单元,否则把
0FFH 送 40H 单元。
MOV R0,#42H
MOV R1,#52H
LOOP:MOV A,@R0
CLR C ;不相等,FFH→40H
SUBB A,@R1
JNZ LOOP1 ;相等时,比较下一字节
INC R0
INC R1
DJNZ 41H,LOOP
MOV 40H,#0;所有字符均相等,则两字串
相等。
RET
LOOP1:MOV 40H,#0FFH
<RET
6.片内 RAM40H 开始的单元内有 10 字节二进制数,
编程找出其中最大值并存于 50H 单元中。
START: MOV R0,#40H ;数据块首地址送 R0
MOV R7,#09H ;比较次数送R7
MOV A,@R0 ;取数送A
LOOP: INC R0
MOV 30H,@R0 ;取数送30 H
CJNE A,30H,NEHT ;(A)与(30H)相比
NEXT: JNC BIE1 (A)≥(30H)转 BIR1
MOV A,30H ;(A)<(30H),大数送 A
BIE1: DJNZ R7,LOOP ;比较次数减 1,不为 0,继
续比较
MOV 50H,A ;比较结束,大数送 50H
<RET
7.将 ROM 中 1000H 单元开始的 100 个单元的数据移
到片外数据存储器 2000H 开始的连续单元。
MV:
MOV DPTR,#1000H
MOV P2,#20H
MOV R0,#00H
MOV R7,#100
LOOP:
MOV A,#00H
MOVC A,@A+DPTR
MOV @R0,A
INC DPTR
INC R0
评论0
最新资源