专业
专业.专注
专业
专业.专注
编程题(每小题8分,共16分)
设在内RAM 40H开始的存储区有若干个字符和数字,已知最后一个为 字符$ “并且只有一个,试统计这些字符数字的个数,结果存入30H单元 中。
参考程序:
ORG 0000H
;R1
;R1作为地址指针
;A作为计数器
;与“号比较,不等转移
;找到$结束循环
;计数器加1
;指针加1
;循环
;再加入”这个字符
;存结果
CLR A
LOOP: CJNE @R1,#24H,NEXT
SJMP NEXT1
NEXT: INC A
INC R1
SJMP LOOP
NEXT1: INC A
MOV 30H,A
END
试编一程序,分别统计在内部RAM的30H~50H单元的数据区中奇数和偶数的个数,并将奇数和偶数的个数分别存放在 51H和52H单元中。
参考程序:
ORG 0000H
MOV 51H,#0H
MOV 52#,#0H
MOV R1 ,#30H
MOV R0 ,#20H
MOV A,@R1
INC R1
ANL A , #01H
JZ LOOP1
INC 51H
SJMP LOOP2
LOOP1: INC 52H
LOOP2: DJNZ R0 , LOOP3
RET
用8XX51的P1 口接8个LED发光二极管,由INT0接一消抖按键开 关,开始P1.0的LED亮,以后由INT0按键每中断一次,下一个LED亮,顺序 下移,且每次只一个LED亮,周而复始。请编制程序。
参考程序:
ORG 0000H
AJMP MAIN
ORG 0003H
RL A ;中断服务
MOV P1,A
RETI
MAIN: MOV A,#0FFH
MOV P1,A ;第一灯亮
SETB EA
SETB EX0 ;允许INT0外部中断
SETB IT0 ;中断触发方式为下降沿触发
SJMP $ ;等待中断
设有100个有符号数,连续存放在以2000H为首地址的存储区中,试编 程统计其中正数、负数、零的个数并分别存放在30H、31H、32H单元中。
MOV 30H,#0
MOV 31H,#0
MOV 32H,#0
MOV DPTR ,#2000H
MOV R1,#100
L4: MOVX A,@DPTR
INC DPTR
CJNE A,#0,L1
INC 32H
SJMP L2
L2:JC L3
INC 30H
SJMP L2
L3:INC 31H
L2:DJNZ R1,L4
SJMP $
编程将内部数据存储器20H~24H单元压缩的BCD码转换成ASCH存放在 于25H开始的单元。
参考程序:注意压缩的BCD码为一个字节占两位BCD码。
ORG 0000H
MOV R7,#05HMOV R0,#20HMOV R1,#25H;
MOV R7,#05H
MOV R0,#20H
MOV R1,#25H
;R0为源操作数地址
;R1为目的操作数地址
NE:MOV A,@R0
ANL A,#0FH ;先取低位BCD码
ADD A,#30H;将BCD码转换成 ASCU码
MOV @R1,A
INC R1
MOV A,@R0
ANL A,#0F0H ;取高位 BCD 码
SWAP A ;半字节交换
ADD A,#30H;将高位BCD码转换成ASCU码
MOV @R1,A
INC R0
INC R1
DJNZ R7,NE
SJMP $
END
编程题,另外加上第4章课件上的例子。
三、程序解释(每小题5分,共10分)
1.
ORG 0200H
MOV DPTR,#1000H
MOV R0,#20H
LOOP: MOVX A,@DPTR
MOV @R0,A
INC DPTR
INC R0
CJNE R0,#71H ,L OOP
SJMP $
程序功能:把片外数据存储器1000H~1050H中的内容传送到片内数据存储 器 20H~70H 中。
ORG 0200H
MOV A , R0
ANL A , #0FH
MOV DPTR , #TAB
MOVC A , @A+DPTR
MOV R0,A
SJMP $
TAB:DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39H;0~9 的
ASCU码
DB 41H,42H,43H,44H,45H,46H ;A~F 的 ASC U 码
程序功能:利用查表的方法实现R0中的十六进制数转换为ASCU码
对每/—(或指令作用)进行解释,并说明程序的作用。
*********************************
程序解释
ORG100H
MOV
A,R0
;R0的内容送
A
ANL
A,#0FH
MOV
R1,A
MOV
A,R0
SWAP
A
;A的内容咼低
4位交换
ANL
A,#0FH
MO