内容发布更新时间 : 2024/12/27 19:35:43星期一 下面是文章的全部内容请认真阅读。
完美WORD格式.整理
后,A=(25H),R1=(40H),(40H)=(03H)。 XCH A, R1 ; A=23H,R1=40H
XCHD A, @R1 ; A=20H,(40H)=03H
2. 假定80C51的晶振频率为6 MHz,执行下列程序后,在P1.1引脚产生的方波宽度为(5.804ms)
START: SETB P1.1 ; P1.1置1(1周期)
DL: MOV 30H, #03H ; 30H置初值(1周期) DL0: MOV 31H, #0F0H ; 31H置初值(1周期)
DL1: DJNZ 31H, DL1 ; 31H减1,不为0重复执行(2周期) DJNZ 30H, DL0 ; 30H减1,不为0转DL0(2周期) CPL P1.1 ; P1.1 取反(1 周期) SJMP DL ; 转DL(2 周期)
方波宽度={[(2*15*16+2+1)*3]+[(2*15*16+2+1)*3+1+2+1]}*2=5804?s
3. 下列程序中,X、Y 和Z 为输入的8 位无符号二进制数,F 为输出的逻辑运 算结果。试画出该程序所模拟的组合逻辑电路。 MOV A, X ANL A, Y MOV R1, A MOV A, Y XRL A, Z CPL A ORL A, R1 MOV F, A
F=?X?Y???Y?Z??
& & &
?1 ?1
X Y Z F
4. 分析下列跳转程序,程序中A 与30H 单元中的数都是符号数,说明当(A= (30H))时转向LOOP1,当(A>(30H))时转向LOOP2,当(A<(30H)) 时转向LOOP3。 MOV R0, A ; R0←A ANL A, #80H
JNZ NEG ; A<0,转NEG MOV A, 30H
. 专业资料分享 .
完美WORD格式.整理
ANL A, #80H
JNZ LOOP2 ; A≥0,(30H) <0,转LOOP2 SJMP COMP ; A≥0,(30H)≥0,转COMP NEG: MOV A, 30H ANL A, #80H
JZ LOOP3 ; A<0,(30H) ≥0,转LOOP3 COMP: MOV A, R0
CJNE A, 30H, NEXT ; A≠(30H),转NEXT SJMP LOOP1 ; A=(30H),转LOOP1
NEXT: JNC LOOP2 ; A>(30H),转LOOP2 JC LOOP3 ; A<(30H),转LOOP3 综上分析可知,当A=(30H)时转向LOOP1,A>(30H)时转向LOOP2,A<(30H)时转向LOOP3。
5. 假定80C51的晶振频率为6 MHz,下列程序的执行时间为(30.696ms)。已知程序中前2条指令机器周期数为1,后4条指令机器周期数为2。 MOV R3, #15 1周期 DL1: MOV R4, #255 1周期 DL2: MOV P1, R3 2周期 DJNZ R4, DL2 2周期 DJNZ R3, DL1 2周期 RET 2周期
执行时间:T={[(2+2)*255+2+1]*15+2+1}*2=30696?s
(二)编程题
1. 把长度为10H的字符串从内部RAM的输入缓冲区inbuf向位于外部RAM的输出缓冲区outbuf传送,一直进行到遇见回车或整个字符串传送完毕,试编程实现。
11
ORG 0030H MOV R0, #inbuf MOV DPTR, #outbuf MOV R4, #10H
LOOP: MOV A, @R0 ; 从内部RAM取数 CJNE A,#0DH, LL ; 是否为回车符CR
SJMP STOP ; 是回车符,则转STOP,停止传送 LL: MOVX @ DPTR, A ; 不是回车符,则传送到外部RAM INC R0 INC DPTR
DJNZ R4, LOOP ; 沒传送完则循环 STOP: SJMP $
2. 内部RAM从list单元开始存放一正数表,表中之数作无序排列,并以﹣1作结束标志。编程实现找出表中最小数。
分析:从list+1单元开始判断其中的数是否为-1,将比较得到的小数放入累加器A ORG 0030H
. 专业资料分享 .
完美WORD格式.整理
MOV R0, #list
MOV A, @R0 ;取第一个正数
LOOP: INC R0 ;指向下一个正数 MOV 30H, @R0
CJNE A, 30H, CHK ;前一个数与后一个数比较 CHK: JC LOOP1 ;前一个数小,则转LOOP1 MOV A, 30H ;前一个数大,取后一个数 LOOP1: XCH A, 30H
CJNE A, #0FFH, LOOP ;判断后一个数是否为-1 XCH A, 30H ;取最小数 SJMP $
3. 内部RAM的X,Y 单元中各存放一个带符号的数,试编程实现按如下条件进行的运算,并将结果存入Z单元中。 若X为正奇数,Z =X+Y; 若X为正偶数,Z =X∨Y; 若X为负奇数,Z =X∧Y; 若X为负偶数,Z =X⊕Y。
分析:正数:第7位为0,负数:第7位为1;奇数:第0位为1,偶数:第0位为0 方法1:利用ANL指令判断正负、奇偶 ORG 0030H MOV A, X
ANL A, #80H ; 判断X正负
JNZ NEG ; 若X为负,转NEG MOV A, X ; X为正 ANL A, #01H ; 判断X奇偶
JZ EVEN1 ; 若X为偶数,转EVEN1 MOV A, X
ADD A, Y ; 若X为正奇数,Z=X+Y SJMP RESULT EVEN1: MOV A, X
ORL A, Y ; 若X为正偶数,Z=X∨Y SJMP RESULT
NEG: MOV A, X ; X为负
ANL A, #01H ; 判断X奇偶
JZ EVEN2 ; 若X为偶数,转EVEN2 MOV A, X
ANL A, Y ; 若X为负奇数,Z=X∧Y SJMP RESULT
EVEN2: MOV A, X ; 若X为负偶数,Z=X⊕Y XRL A, Y
RESULT: MOV Z, A
方法2:RL指令将符号位移入CY判断正负,RR指令将最低位移入CY判断奇偶 MOV A, X CLR C
. 专业资料分享 .
完美WORD格式.整理
RLC A
JC NEG ;X为负,转至NEG RRC A RRC A
JNC EVEN1 ; X为偶数,转至EVEN1 MOV A, X
ADD A, Y ; X为正奇数,Z =X+Y SJMP RETULT EVEN1: MOV A, X
ORL A, Y ; X为正偶数,Z =X∨Y SJMP RETULT NEG: RRC A, RRC A
JNC EVEN2 MOV A, X
ANL A, Y ; X为负奇数,Z =X∧Y SJMP RETULT EVEN2: MOV A, X
XRL A, Y ; X为负偶数,Z =X⊕Y RETULT: MOV Z, A END
4. 把一个8位二进制数的各位用ASCII码表示之(例如,为0的位用30H表示,为1的位用31H表示等)。该数存放在内部RAM的byte单元中。变换后得到的8个ASCII码存放在外部RAM以buf开始的存储单元中,试编程实现。 ORG 0030H
14
MOV DPTR, #buf MOV R0, # byte MOV R7, #08H MOV A, @ R0 CLR C
LOOP1 : RRC A MOV R6, A JC ONE
MOV A, #30H SJMP LOOP2
ONE: MOV A, #31H
LOOP2 : MOVX @DPTR, A INC DPTR MOV A, R6
DJNZ R7, LOOP1
5. 编程实现运算式2 2 c ??a ?b 。假定a、b、c 3 个数分别存放于内部RAM 的 DA、DB、DC 单元中,另有平方运算子程序SQR 供调用。 ORG 0030H
. 专业资料分享 .
完美WORD格式.整理
MOV A, DA PUSH ACC ACALL SQR POP ACC MOV DC, A MOV A, DB PUSH ACC ACALL SQR POP ACC ADD A, DC MOV DC, A
15
SQR: POP ACC MOV B, A MUL AB PUSH ACC RET END
6. 试编程实现两个ASCII码字符串是否相等。字符串的长度在内部RAM 41H单元中,第1个字符串的首地址为42H,第2个字符串的首地址为52H。如果两个字符串相等,则置内部RAM 40H单元为00H;否则置40H单元为FFH。 ORG 0030H MOV R0, #42H MOV R1, #52H MOV R7, 41H
LOOP: MOV A, @R0 MOV 30H, @R1 CJNE A, 30H, LK INC R0 INC R1
DJNZ R7, LOOP MOV 40H, #00H SJMP DD
LK: MOV 40H, #0FFH DD: SJMP DD
7. 在外部RAM首地址为table的数据表中,有10字节数据。试编程实现将每个字节的最高位无条件置1。 ORG 0030H
MOV DPTR, #table MOV R6, #10
LOOP: MOVX A, @DPTR
16
SETB ACC.7
MOVX @DPTR, A
. 专业资料分享 .