MUL AB SJMP $ (2) 利用位移指令 RL A RL A
MOV 20H。A ANL A,#03H MOV B,A MOV A,20H ANL A,#OFCH SJMP $
(3) 用加法指令完成 ADD A,ACC
MOV RO,A :RO=2A MOV A,#0 ADDC A。#0
MOV B,A ;B存2A的进位 MOV A,RO ADD A,ACC
MOV R1,A ;R1=4A MOV A,B
ADDC A,B ;进位x 2 MOV B,A ;存积高位 MOV A,R1 ;存积低位 SJMP $
2.14 编程将内部RAM 40H单元的中间4位变反,其余位不变放回原单元。 2.14 方法1:XRL 40H,#3CH SJMP $
方法2:MOV A,40H CPL A
ANL A,#3CH ANL 40H,#OC3H ORL 40H,A
SJMP $
2.15 有两个BCD码数存放在(20H)和(21H)单元,完成(21H)+(20H)=>(23H)(22H)。
(24H)+(25H)=>(23H)(22H)
2.15 MOV A,20H ADD A,21H DA A
MOV 22H,A ;存和低字节 MOV A,#O ADDC A,#0
MOV 23H,A ;存进位 SJMP $
6
2.15 MOV A,24H ADD A,25H DA A
MOV 22H,A ;存和低字节 MOV A,#O ADDC A,#0
MOV 23H,A ;存进位 SJMP $
2.16 如果R0的内容为0,将R1置为0,如R0内容非0,置R1为FFH,试进行编程。 2.16 MOV A.R0 JZ ZE
MOV R1.#OFFH SJMP $
ZE:MOV R1,#O SJMP $
2.17 完成(51H)×(50H)=>(53H)(52H)的编程(式中均为内部RAM)。 2.17 MOV A,50H MOV B,51H MUL AB MOV 53H。B MOV 52H,A
SJMP $
2.18 将P1.1和P1.0同时取反10次。(将P1.2和P1.0同时取反10次) 2.18 MOV R7,#0AH WOP:XRL P1,#03H DJNZ R7,WOP SJMP $
2.18 MOV R7。#0AH
WOP:XRL P1,#05H
DJNZ R7,WOP SJMP $
2.19 将内部RAM单元3字节数(22H)(21H)(20H)×2送(23H)(22H)(21H)(20H)单元。 2.19 单片机的移位指令只对A,且只有循环移位指令,为了使本单元的最高位移进下一单元的最低位,必须用大循环移位指令移位4次。
ORG O CLR C MOV A,20H RLC A MOV 20H,A MOV A,21H RLC A MOV 21H,A MOV A,22H
7
RLC A
MOV 22H.A MOV A,#O RLC A MOV 23H,A SLMP $
第3章 程序设计
3.1 编写程序,把片外数据存储器0000H~0050H中的内容传送到片内数据存储器20H~70H中。
3.1 因为是多个单元操作,为方便修改地址,使用问址操作。片外地址用DPTR指示.只能用M()Vx指令取数到A,片内地址用RO或R1指示,只能用MOV指令操作,因此,循环操作外部数据存储器一A一内部数据存储器。 ORG OOOOH
MOV DPTR,#0000H
MOV R0,#20H
LOOP:MOVX A,@DPTR MOV @R0,A
INC DPTR INC R0
CJNE R0,#71H, LOOP SJMP $
3.2 编写程序,实现双字节加法运算,要求RIR0+R7R6=>(52H)(51H)(50H)(内部RAM)。 3.2 要注意两高字节相加应加低字节相加时产生的进位,同时要考虑最高位的进位。
ORG 0 MOV A,RO ADD A,R6 MOV 50H,A MOV A,R7 ADDC A,R1 MOV 51H,A MOV A,#0 ADDC A,#O MOV 52H,A SJMP$
3.3 设X在累加器A中(0≤X≤20),求X2并将平方数高位存放在R7中,低位存放在R6中。试用查表法编出子程序。 3.3 A中放X(小于14H)的数,平方表的一个数据占2个字节,可用BCD码或二进制数存放(如A中放的是 BCD码,则要先化成二进制数再查表)。
ORG 0
MOV DPTR,#TAB ADD A,ACC ;A*2 PUSH ACC
MOVC A,@A+DPTR
8
MOV R7,A POP ACC INC A
MOVC A,@A+DPTR MOV R6,A
SJMP $
TAB:DB 00,00,00,01,OO,04,OO,09,OO,16H,? DB? 04H,00
3.4设内部RAM的20H和21H单元中有两个带符号数,将其中的大数存放在22H单元中,编出程序。
3.4 先用异或指令判两数是否同号,在同号中判大小,异号中正数为大。 ORG 0 MOV A,20H XRL A.21H ANL A,#80H JZ CMP
JB 20H.7,BG AG:MOV 22H,20H SJMP $
BG:MOV 22H,21H
SJMP $
CMP:MOV A,20H CJNE A,21H,GR GR:JNC AG MOV 22H,21H
SJMP $
3.5若单片机的晶振频率为6MHz,求下列延时子程序的延时时间。 DELAY: MOV R1,#0F8H LOOP: MOV R3,#0FBH DJNZ R3,$ DJNZ R1,LOOP RET
3.5 fosc=6MHz,MC=2us
机器周期数 DELAY:MOV R1,#OF8H 1 LOOP: MOV R3,#0FBH 1 DJNZ R3,$ 2 DJNZ R1,LOOP 2
RET 2 (1+2+(1+2×251+2)×248)×2us=250.48ms
3.6 编程将内部数据存储器20H~24H单元压缩的BCD码转换成ASCII码存放在25H开始的单元内。
3.6 将待转换的数分离出高半字节并移到低4位加30H;再将待转换的数分离出低半字节并加30H,安排好源地址和转换后数的地址指针,置好循环次数。 ORG 0000H
9
MOV R7,#05H MOV RO,#20H
MOV R1,#25H NET:MOV A,@RO ANL A,#OFOH SWAP
ADD A,#30H MOV @R1,A INC R1
MOV A,@RO ANL A,#OFH ADD A,#30H MOV @R1,A INC R0 INC R1
DJNZ R7,NE SJMP $ END
3.7 从内部存储器30H单元开始,有16个数据,试编一个程序,把其中的正数、负数分别送40H和50H开始的存储单元,并分别将正数、负数和零的个数送R4,R5,R6。 3.7 片内RAM间址寄存器只有Ro和R1,而正数、负数和零共需3个寄存器指示地址,这时可用堆栈指针指示第3个地址,POP和PUSH指令可自动修改地址。RO指正数存放地址,Rl指负数存放地址,SP指源数据存放的末地址,POP指令取源数据,每取一个数地址减1。 ORG 0000H MOV R7,#10H MOV A,#0 MOV R4,A MOV R5,A MOV R6,A MOV R0,#40H MOV R1,#50H
MOV SP,#2FH NEXT:POP ACC JZ ZER0 JB ACC.7,NE INC R4 MOV @RO,A INC R0 AJMP DJ NE:INC R5 MOV @R1,A INC R1
AJMP DJ ZER0:INC R6
DJ:DJNZ R7,NEXT
10
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库《单片微型计算机与接口技术》思考题与习题解答01(2)在线全文阅读。
相关推荐: