资源描述
程序分析及编程
1.设(A)=04H,(CY)=1, 写出下列各条指令的结果。
RL A; (A)= 08H
RR A; (A)= 02H
RLC A; (A)= 09H
RRC A; (A)= 82H
2设(A)=7AH,(R0)=30H,(30H)=A5H,(CY)=1, 写出下列各条指令的结果。
MOV A ,R0 (A)=30H (R0)=30H
XCH A, R0 (A)=30H (R0)=30H
XCHD A,@R0 (A)=A5H (R0)=30H (30H)=30H
ADD A,#30H (A)=D5H (CY)=1
ADDC A,30H (A)=06H (CY)=1
SUBB A,#30H (A)=D5H (CY)=1
4.已知程序执行前有A=02H,SP=52H,(51H)=FFH,(52H)=FFH。下述程序执行后:请问:A=( ),SP=( ),(51H)=( ),(52H)=( ),PC=( )。
POP DPH
POP DPL
MOV DPTR,#4000H
RL A
MOV B,A
MOVC A,@A+DPTR
PUSH A
MOV A,B
INC A
MOVC A,@A+DPTR
PUSH A
RET
ORG 4000H
DB 10H,80H,30H,50H,30H,50H
答:(A)=50H , (SP)=50H , (51H)=30H , (52H)=50H , (PC)=5030H
5.假定A=83H,(R0)=17H,(17H)=34H,执行以下指令后,A的内容为( )。:
ANL A,#17H
ORL 17H,A
XRL A,@R0
CPL A答:0CBH
6.如果DPTR=507BH,SP=32H,(30H)=50H,(31H)=5FH,(32H)=3CH,则执行下列指令后则:DPH=( ),DPL=( ),SP=( ):
POP DPH
POP DPL
POP SP
答:DPH=3CH , DPL=5FH , SP=4FH
7.假定,SP=60H,A=30H,B=70H,执行下列指令后,SP的内容为( ),61H单元的内容为( ),62H单元的内容为( )。
PUSH A
PUSH B答:62H , 30H , 70H
8.计算下面子程序中指令的偏移量和程序执行的时间(晶振频率为 12MHz)。
MOV R3,#15H ;1个机器周期
DL1:MOV R4,#255 ;1个机器周期
DL2:MOV P1,R3 ;2个机器周期
DJNZ R4,DL2 ;2个机器周期
DJNZ R3,DL1 ;2个机器周期
RET ;2个机器周期
答:15348us 析:((2+2)×255+1+2)×15+1+2=15348us
9. 假定A=83H,(R0)=17H,(17H)=34H,执行以下指令后,A的内容为( )。
ANL A,#17H
ORL 17H,A
XRL A,@R0
CPL A 答:0CBH
10. 如果(DPTR)=507BH,(SP)=32H,(30H)=50H,(31H)=5FH,(32H)=3CH,则执行下列指令后:DPH内容为( ),DPL内容为( ),SP内容为( )。
POP DPH;
POP DPL;
POP SP;
答:(DPH)= 3CH,(DPL)=5FH,(SP)=50H
11.假设外部数据存储器2000H单元的内容为80H,执行下列指令后,累加器A中的内容为( )。
MOV P2,#20H
MOV R0,#00H
MOVX A,@R0
答:累加器A中的内容为(80H)
12.阅读下列程序段并回答问题 。(1).该程序执行何种操作? (2).已知初值(60H)=23H,(61H)=61H,运行程序后62H内容
CLR C
MOV A,#9AH
SUBB A,60H
ADD A,61H
DA A
MOV 62H,A答: 1)、该程序是单字节BCD码运算,是将(61H)—(60H)→62H
2)、(62H)=38H
13.试编写1个程序,将内部RAM中45H单元的高4位清0,低4位置1。
答:MOV A, 45H
ANL A, #0FH
ORL A, #0FH
MOV 45H, A
14.试编写程序,查找在内部RAM的30H~50H单元中是否有0AAH这一数据。若有,则将51H单元置为“01H”;若未找到,则将51H单元置为“00H”。
答:START: MOV R0,#30H
MOV R2,#20H
LOOP: MOV A,@R0
CJNE A,#0AAH,NEXT
MOV 51H,#01H
LJMP EXIT
NEXT: INC R0
DJNZ R2,LOOP
MOV 51H,#00H
EXIT: RET
15. 编写程序,要求使用T0,采用方式2定时,在P1.0输出周期为400μs,占空比为10:1的矩形脉冲。
解:根据题意,从P1.0输出的矩形脉冲的高低电平的时间为10:1,则高低电平的时间分别为363.63μs和36.37μs。如果系统采用6MHz晶振的话,,因此高低电平输出取整,则约为364μs和36μs。编写程序如下:
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP IT0P
MAIN:MOV TMOD,#02H ;定时器/计数器T0为定时方式2
MOV TL0,#4AH ;定时364μs初值赋值
SETB TR0 ;启动T0,开始计数
SETB ET0 ;允许T0中断
SETB EA ;CPU开中断
SETB P1.0
WAIT: AJMP WAIT
IT0P: CLR EA
CLR P1.0 ;关中断
MOV R0,#9
DLY: DJNZ R0,DLY ;延时26μs
MOV TL0,#4AH ;定时364μs初值赋值
SETB P1.0
SETB EA
RETI
16. 设在外部RAM中有三个连续单元2001H,2002H,2003H,其中2001H和2002H单元中分别存放两个8位无符号二进制数,比较这两个数的大小,然后将大数送到2003H单元。
COMPARE:MOV DPTR, #2001H
MOVX A , @DPTR
MOV R0,A
INC DPTR
MOVX A,@DPTR
SUBB A ,R0
JNC LOOP
MOV A, R0
INC DPTR
MOVX @DPTR ,A
RET
LOOP:INC DPTR
MOVX @DPTR ,A
RET
17.将内部RAM 40H开始的10个单元,搬移到50H开始的10个单元中。
MOV R0,#40H
MOV R1,#50H
MOV R2, #10
LOOP1:MOV A, @R0
MOV @R1,A
INC R0
INC R1
DJNZ R2 ,LOOP1
RET
18. 设单片机晶振频率为6MHz,使用定时器0,以工作方式2,在P1.5引脚输出一个周期为200us连续方波?
解: MOV TMOD,#02H
MOV TH0, #0CEH
MOV TL0 ,#0CEH
SETB TR0
LOOP: JBC TF0,LOOP1
AJMP LOOP
LOOP1: CPL P1.0
19. 编写一段程序,功能要求为:当P1.0引脚的电平正跳变时,对P1.1的输入脉冲进行计数;当P1.2引脚的电平负跳变时,停止计数,并将计数值写入R0、R1(高位存R1,低位存R0)。
答:将P1.1的输入脉冲接入INT0,即使用T0计数器完成对P1.1口的脉冲计数。编写程序如下:
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP IT0P
MAIN: JNB P1.0,MAIN
MOV TMOD,#05H ;定时器/计数器T0为计数方式1
SETB TR0 ;启动T0,开始计数
SETB ET0 ;允许T0中断
SETB EA ;CPU开中断
WAIT: JB P1.2,WAIT
CLR EA
CLR TR0
MOV R1,TH0
MOV R0,TL0
AJMP $
IT0P: INC R2
RETI
20.试编写一个程序(例如将05H和06H拼为56H),设原始数据放在片外数据区2001H单元和2002H单元中,按顺序拼装后的单字节数放入2002H。
答:编程思路:首先读取2001H的值,保存在寄存器A中,将寄存器A的高四位和低四位互换,再屏蔽掉低四位然后将寄存器A的值保存到30H中,然后再读取2002H的值,保存在寄存器A中,屏蔽掉高四位,然后将寄存器A的值与30H进行或运算,将运算后的结果保存在2002H中。
ORG 0000H
MAIN:MOV DPTR,#2001H ;设置数据指针的初值
MOVX A,@DPTR ;读取2001H的值
SWAP A
ANL A,#0F0H ;屏蔽掉低四位
MOV 30H,A ;保存A
INC DPTR ;指针指向下一个
MOVX A,@DPTR ;读取2002H的值
ANL A,#0FH ;屏蔽掉高四位
ORL A,30H;进行拼装
MOVX @DPTR,A ;保存到2002H
END
21.编写程序,将外部数据存储器中的4000H—40FFH单元全部清零。
解:本题主要考察了对外部数据块的写操作;编程时只要注意循环次数和MOVX指令的使用就可以了。
ORG 0000H
MAIN: MOV A,#0;送预置数给A
MOV R0,#0FFH ;设置循环次数
MOV DPTR,#4000H;设置数据指针的初值
LOOP: MOVX @DPTR,A ;当前单元清零
INC DPTR ;指向下一个单元
DJNZ R0,LOOP;是否结束
END
22.编写程序,采用8255A的C口按位置位/复位控制字,将PC7置0,PC4置1,(已知8255A各端口的地址为7FFCH-7FFFH)。
解:本题主要考察对8255A的C口的操作。其方式控制字的高位为0时,低四位对C口进行置位。由题目我们得到了方式控制字的地址为7FFFH。
ORG 0000H
MAIN: MOV DPTR,#7FFFH ;控制字寄存器地址送DPTR
MOV A,#0EH ;将PC7置0
MOVX @DPTR,A
MOV A,#09H ;将PC4置1
MOVX @DPTR,A
END
23.试编写逻辑运算程序,功能为:
F=X(Y+Z);
F=XYZ
其中F X Y Z均为位变量,依次存在以30H为首址的位寻址区中。
解(1):
F BIT 30H
X BIT 31H
Y BIT 32H
Z BIT 33H
LOG1:MOV C,Y ;Y→C
ORL C,Z ;(Y+Z)→C
ANL C,X ;X(Y+Z)→C
MOV F,C ;X(Y+Z)→F
RET ;
解(2):
LOG2:MOV C,Y ;Y→C
ANL C,Z ;YZ→C
ANL C,/X ;XYZ→C
CPL C ;XYZ→C
MOV F,C ;XYZ→F
RET ;
24.试编写程序,统计内RAM 30H~50H单元中FFH的个数,并将统计结果存51H。
解:编程如下:
LOKF:MOV 51H,#0 ;计数器清零
MOV R0,#30H ;置数据区首址
LOP: MOV A,@R0 ;读数据
CPL A ;取反
JNZ LP1 ;判FFH,非FFH,转
INC 51H ;FFH,计数
LP1: INC RO ;指向下一数据
CJNE R0,#51H,LOP;判循环
RET
25.试编写程序,找出外RAM 2000H~200FH数据区中的最小值,并放入R2中。
解:编程如下:
SECH:MOV DPTR,#2000H ;置外RAM数据区首址
MOV R2,#OFH ;置外RAM数据区长度(N-1)
MOVX A,@DPTR ;读第一个数据
MOV B,A;假设第一个数据为最小值
SLOP:INC DPTR ;指向下一个数据
MOVX A,@DPTR ;读下一个数据
CJNE A,B,SLP1;新数据与最小值比较
SLP1:JNC SLP2 ;新数据≥最小值,判断循环
MOV B,A ;新数据<最小值,新数据→B
SLP2:DJNZ R2,SLOP ;判循环结束否?
MOV R2,B ;最小值→R2
RET
26.已知ROM中存有0~100的平方表,首地址为TABDS,试根据累加器A(≤100)中的数值查找对应的平方值,存入内RAM31H30H(双字节)。
解:编程如下:
DSQR:MOVDPTR,#TABDS;置ROM平方表首地址
ADD A,Acc ;A×2→A
MOVC A, @A+DPTR ;读平方值高8位
MOV 31H,A ;平方值高8位→31H
INC A ;指向平方值低8位
MOVC A,@A+DPTR ;读平方值低8位
MOV 30H,A ;平方值低8位→30H
RET
TABDS:DW 0,0,0,1,0,4,0,9,0,16,0,25,…,27H,10H;0~100平方表(双字节)
27.试编程实现3字节无符号数加法:R7R6R5+R4R3R2→@R0(3个连续单元)。
解:编程如下:
ADD3: MOV A,R5
ADD A,R2 ;低位加
MOV @R0,A ;存低位和
INC R0 ;修改存储单元
MOV A,R6 ;
ADDC A,R3 ;中位加
MOV @R0,A ;存中位和
INC R0 ;修改存储单元
MOV A,R7 ;
ADDC A,R7 ;高位加
MOV @R0,A ;存高位和
RET
28.试编写程序,将外部RAM2000H~20FH数据块,传送到3000H~30FFH区域。
解:编程如下:
DMOV:MOV DPTR,#2000H;置源数据区首址
MOV R2,#00H ;置数据长度(256个)
DLOP:MOVX A,@DPTR ;读数据
MOV DPH,#30H;置目的数据区高8位地址
MOVX @DPTR,A ;存数据
MOV DPH,#20H;置源数据区高8位地址
INC DPTR ;修改源数据区地址
DJNZ R2,DLOP ;判循环结束否?
RET
29.从内RAM20H单元开始存有一组带符号数(补码),其个数已存放在1FH单元。要求统计其中大于0,等于0和小于0的数的个数,并把统计结果分别存入ONE,TWO,THREE3个单元。
解:编程如下:
ONE EQU 30H
TWO EQU 31H
THREE EQU 32H
STOR:MOV R0,#20H ;置数据区首址
SLOP: MOV A,@R0 ;读数据
JZ LP1 ;数据=0,转
JB Acc.7,LP2 ;数据<0,转
INC ONE ;数据>0,ONE单元加1
LP0: INC RO ;指向下一数据
DJNZ 1FH,SLOP ;判统计结束否?未结束循环
RET ;统计结束,TWO单元加1
LP1: INC TWO ;数据=0,TWO单元加1
SJMP LPO ;返回循环体
LP2: INC THREE ;数据<0,THREE单元加1
SJMP LPO ;返回循环体
30.设在内部数据存储器中存放有20个字节数据,其起始地址为M。试编写程序,找出数0AH的存放地址,并送入N单元。若OAH不存在,则将N单元清零。
解:程序如下:
M EQU 30H
N EQU 2FH
SECH:MOV R0,#M
MOV R1,#20
LOOP:CJNE @R0,#0AH,LP1
MOV N,R0
RET
LP1: INC R0
DJNZ R1,LOOP
MOV N,#0
RET
31.试编写程序,求出内RAM20H单元中“1”的个数,并将结果存入21H单元。
解:编程如下:
LOK1:MOV 21H,#O
MOV R2,#08H
MOV A,20H
LOP: RLC A
JNC LP1
JNC 21H
LP1:DJNE R2,LOP
RET
32.试编写统计数据区长度的程序,设数据区从内RAM30H开始,该数据区以0结束,统计结果送入2FH中。
解:编程如下:
ADUP:MOV 2FH,#0
MOV R0,#30H
ALOP:MOV A,@R0
JNZ LP1
RET
LP1: INC 2FH
INC R0
SJMP ALOP
33.从内RAM30H单元开始存放着一组无符号数,其个数存在21H单元中。试编写程序,找出其中最小的数,并将其存入20H单元中。
解:编程如下:
SECH: MOV RO,#3OH
MOV 20H,#FFH
SLOP: MOV A,@R0
CJNE A,20H,NEXT
NEXT: JNC SLP1
MOV 20H,A
SLP1: INC R0
DJNZ 21H,SLOP
RET
34.用程序实现c=a2+b2。设a2b2存于内RAM,AA,BB单元;c为双字节,存于内RAMCC,DD单元。
解:该题可用于程序来实现。通过两次调用查平方表子程序来得到a和b,并在主程序中完成相加。编程如下:
AA EQU 40H
BB EQU 41H
CC EQU 42H
DD EQU 43H
FUNC:MOV A,AA
LCALL DSQR
MOV DD,A
MOV CC,31H
MOV A,BB
LCALL DSQR
ADD A,DD
MOV DD,A
ADDC A,CC
MOV CC,A
RET
35.利用定时、计数器T1测量某正脉冲宽度,并存入内RAM31H30H。设fosc=12MHz,脉冲从P3.3引脚输入,宽度小于65536us。
解:编程如下:
PLUS: MOV TMOD,#90H
MOV TH1,#0
MOV TL1,#0
JB P3.3,$
SETB TR1
JNB P3.3,$
JB P3.3,$
CLR TR1
MOV 31H,THO
MOV 30H,TLO
RET
36. 设在内部RAM中50H开始有连续的10个单元,求这10个单元之和,结果放在60H,61H,低位放在60H,高位在61H.
解:程序编写如下:
ORG 0000H
ACALL ADDTEN
WAIT: AJMP WAIT
ADDTEN:MOV R0 ,50H
MOV R1,#10
MOV A,#00H
MOV 60H, A
MOV 61H, A
LOOP1:ADD A, @R0
INC R0
MOV 60H,A
JC LOOP2
DJNZ R1,LOOP1
RET
LOOP2:
MOV A,61H;
ADD A,#01H
DJNZ R1 ,LOOP1
RET
END
1、请用数据传送指令来实现下列要求的数据传送。(14分)
(1)把R0的内容送到R1
MOV A,R0
MOV R1,A
(2)内部RAM20H单元的内容传送到A中。
MOV A,20H
(3)外部RAM2000H单元的内容送到R0。
MOV DPTR,#2000H(1分)
MOVX A,@DPTR(1分)
MOV R0,A (2分)
(4)外部ROM1000H单元的内容送内部RAM20H单元。
MOV DPTR,#1000H
MOV A,#00H(2分)
MOVC A,@A+DPTR
MOV 20H,A (2分)
1.请将片外RAM 20H—25H单元清零 MOV R0,#20H
MOV R7,#06H
CLR A
LOOP:MOVX @R0,A
INC R0
DJNZ R7,LOOP
2.请将ROM 3000H单元内容送R7
MOV DPTR, #3000H
CLR A
MOVC A,@A+DPTR
MOV R7,A
1、设(A)=38H,R0=28H,(28H)=18H,执行下列程序后,(A)= 0E7H
ORL A,#27H
ANL A,28H
XCHD A,@R0
CPL A
2、设(A)=38H,(20H)=49H,PSW=00H,(B)=02H,填写以下中间结果。
SETB C
ADDC A, 20H (A)= 82H (CY)= 0 (AC)= 1
RLC A (A)= 04H (CY)= 1 (P)= 1
MUL AB (A)= 08H (B)= 00H (OV)= 0
SETB EA
展开阅读全文