《单片机汇编》期末考试、考研常见考题、习题,题型汇总(十三)、统计查找数据类

小知识点补充3
计算机通信基本方式分为串行通信和并行通信。
通信方式分类:
按照串行数据的同步方式分为:同步通信和异步通信
1,异步通信:数据通常以字符或字节为单位组成字符帧
(1)字符帧(又称数据帧)格式:起始位、数据位、奇偶校验位和停止位组成。
(2)**波特率:**定义为每秒钟传送的二进制数码的位数(又称比特数),单位:bps 或b/s ,波特率是串行通信的重要指标也是衡量信道频宽的重要指标。
2,同步通信:传送信息帧:由同步字符、数据字符和校验字符组成。
按照数据传输方向:串行通信分为
半双工、单工和全双工

调制:用一个信号去控制另一个信号的某个参数使之变化的过程。
解调:从已调信号还原出原调制信号的过程。
串行通信的校验方式:奇偶校验、累加和校验和循环冗余码校验(CRC)

题34

编写程序找出片内RAM地址为60H-6FH单元中的无符号最大数,并将结果存入70H单元中。
程序源码:

RESULT  EQU  70H;SAVE INIT PASSWORDS
ADDR    EQU  60H 
   	ORG 0000H
	MOV R7,#10H
	MOV R0,#60H
	MOV A,#20H
L1:	
	MOV @R0,A
	INC A
	INC R0
	DJNZ R7,L1
	MOV 65H,#66H
	;FOR TESTING
	LJMP START
	ORG 0025H
START:
	MOV R0,#ADDR
	CLR A
	MOV R7,#10H
	MOV A,ADDR
	MOV B,A
	CLR C	
LOOP:
	MOV A,B
	SUBB A,@R0
	JNC ECHO
	MOV B,@R0 
ECHO:
	INC R0
	CLR C
	DJNZ R7,LOOP
	MOV RESULT,B
	SJMP $
	END

扩展:
编写程序找出片外RAM地址为60H-6FH单元中的无符号最小数,并将结果存入内部RAM地址为70H单元中。

程序源码:

RESULT  EQU  70H;SAVE INIT PASSWORDS
ADDR    EQU  60H 
TEST    EQU  61H 
   	ORG 0000H
	MOV  SP,#66H
	MOV R7,#10H
	MOV R0,#ADDR
	MOV A,#20H
L1:	
	MOVX @R0,A
	INC A
	INC R0
	DJNZ R7,L1
	MOV A,#15H
	MOV R1,#65H
	MOVX @R1,A
	;FOR TSETING
	LJMP START
	ORG 0025H
START:
	MOV R0,#ADDR
	CLR A
	MOV R7,#10H
	CLR C
	MOVX A,@R0
	MOV TEST,A	
LOOP:
	MOVX A,@R0
	CJNE A,TEST,NEQUAL
	AJMP ECHO
NEQUAL:
	JNC ECHO
	MOV TEST,A
ECHO:
	INC R0
	CLR C
	DJNZ R7,LOOP
	MOV RESULT,TEST
	SJMP $
	END

题36

试编写程序,统计片内RAM的30H-60H单元中出现51的次数,并将结果存入外部RAM的51H单元中。

程序源码:

ADDR   EQU 30H
RESULT EQU 0051H
   	ORG 0000H
	LJMP START
	ORG 002CH
START:
	ACALL FORTESTING
	MOV SP,#60H
	MOV R0,#ADDR
	MOV DPTR,#RESULT
	MOV R7,#30H
	MOV R6,#00H
	MOV A,#60H
	CLR C
	SUBB A,R7
	INC A
	MOV R7,A
LOOP:
	MOV A,@R0
	CJNE A,#51,L1
	INC R6
L1:
	INC R0
	DJNZ R7,LOOP
	MOV A,R6
	MOVX @DPTR,A
	SJMP $
FORTESTING:;FOR TESTING
	MOV R0,#ADDR
	MOV A,#51
	MOV R7,#24
L2:
	MOV @R0,A
	INC R0
	INC A
	DJNZ R7,L2
	MOV R7,#25
L3:
	MOV @R0,A
	INC R0
	DEC A
	DJNZ R7,L3
	MOV A,#51
	MOV 35H,A
	MOV 45H,A
	MOV 3AH,A
	RET
	END

扩展:
试编写程序,统计片外RAM的30H-60H单元中出现51H的次数,并将结果存入外部RAM的51H单元中。

程序源码:

ADDR   EQU 30H
RESULT EQU 51H
   	ORG 0000H
	LJMP START
	ORG 002FH
START:
	MOV SP,#60H
	ACALL FORTESTING
	CLR A
	MOV R0,#ADDR
	MOV R1,#RESULT
	MOV R7,#30H
	MOV R6,#00H
	MOV A,#60H
	CLR C
	SUBB A,R7
	INC A
	MOV R7,A
LOOP:
	MOVX A,@R0
	CJNE A,#51H,L1
	INC R6
L1:
	INC R0
	DJNZ R7,LOOP
	MOV A,R6
	MOVX @R1,A
	SJMP $
FORTESTING:;FOR TESTING
	MOV R0,#ADDR
	MOV A,#51H
	MOV R7,#24
L2:
	MOVX @R0,A
	INC R0
	INC A
	DJNZ R7,L2
	MOV R7,#25
L3:
	MOVX @R0,A
	INC R0
	DEC A
	DJNZ R7,L3
	RET
	END

扩展:
试编写程序,统计片内RAM的30H-60H单元中出现51的次数并记录其单元地址,然后将统计结果存入内部RAM的61H单元中、将单元地址依次存放在外部RAM地址为0100H开始的地址区域内。

程序源码:

ADDR    EQU 30H
RESULT  EQU 61H
DESADDR EQU 0100H
   	ORG 0000H
	LJMP START
	ORG 002CH
START:
	ACALL FORTESTING
	MOV SP,#60H
	MOV R0,#ADDR
	MOV DPTR,#DESADDR
	MOV R1,#RESULT
	MOV R7,#30H
	MOV R6,#00H
	MOV A,#60H
	CLR C
	SUBB A,R7
	INC A
	MOV R7,A
LOOP:
	MOV A,@R0
	CJNE A,#51,L1
	MOV A,R0
	MOVX @DPTR,A
	INC DPTR
	INC R6
L1:
	INC R0
	DJNZ R7,LOOP
	MOV A,R6
	MOV @R1,A
	SJMP $
FORTESTING:;FOR TESTING
	MOV R0,#ADDR
	MOV A,#51
	MOV R7,#24
L2:
	MOV @R0,A
	INC R0
	INC A
	DJNZ R7,L2
	MOV R7,#25
L3:
	MOV @R0,A
	INC R0
	DEC A
	DJNZ R7,L3
	MOV A,#51
	MOV 35H,A
	MOV 45H,A
	MOV 3AH,A
	RET
	END

程序中通过手动赋值,其中内容为51的单元有:30H、35H、3AH、45H、60H
程序运行最终结果为:
在这里插入图片描述
由仿真可知程序正确。

扫描二维码关注公众号,回复: 11003985 查看本文章

题37

编程统计累加器A中“1”的个数,并以此结果去清除片外RAM地址为4000H-400FH中的内容。

程序源码:

DESADDR EQU 4000H
   	ORG 0000H
	LJMP START
	ORG 002CH
START:
	MOV A,#51H
    ; FORTESTING
	MOV DPTR,#DESADDR
	MOV R7,#10H
	MOV B,#00H
	MOV R5,#08H
	CLR C
LOOP:
	RLC A
	JNC L1
	INC B
L1:
	DJNZ R5,LOOP
	XCH A,B
L2:
	MOVX @DPTR,A 
	INC DPTR
	DEC R7
	CJNE R7,#00,L2
	SJMP $
	END

测试:程序中给累加器A赋值51H,即A中”1“的个数为3个,然后用3清除外部RAM4000H-400FH中的数据,仿真图如下:
在这里插入图片描述

题38

编写程序,将(内部RAM)60H-6FH单元中压缩BCD码数转换为ASCII码,并将结果存放在片外RAM 51H开始的单元区域内。

解析:此题与前文中某个题相似,只是难度增加,前文详细讲了什么是压缩BCD码。

小知识点补充4
数字0-9+0x30即可得到数字0-9的ASCII码。

程序源码:

DESADDR EQU 51H
ADDR    EQU 60H

   	ORG 0000H
	LJMP START
	ORG 0030H
START:
	mov r7,#09h
	mov r0,#ADDR
	mov a,#30h
l1:
	mov @r0,a
	inc r0
	inc a
	djnz r7,l1
	mov 6ah,#25h
	mov 6bh,#52h
	mov 6ch,#26h
	mov 6dh,#78h
	mov 6eh,#96h
	mov 6fh,#87h
	;用于测试
	MOV SP,#50H
	MOV R0,#ADDR
	MOV DPTR,#DESADDR
	MOV R7,#10H
LOOP:
	MOV A,@R0
	PUSH ACC
	ANL  A,#0FH
	ADD A,#30H
	MOVX @DPTR,A
	INC DPTR
	POP ACC
	SWAP A
	ANL A,#0FH
	ADD A,#07H
	MOVC A,@A+PC
	MOVX @DPTR,A
	INC DPTR
	INC R0
	DJNZ R7,LOOP
	SJMP $
TAB:
	DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39H
	END

仿真图:
在这里插入图片描述

题39

将外部RAM 0100H单元中的内容转换为三位BCD码,并将结果存放在内部RAM 60H、61H、62H中。

程序源码:

DESADDR EQU 60H
ADDR    EQU 0100H

   	ORG 0000H
	LJMP START
	ORG 0030H
START:
	mov dptr,#ADDR
	mov a,#0f7h
	movx @dptr,a
	;用于测试
	MOV R0,#DESADDR
	MOV DPTR,#ADDR
	MOVX A,@DPTR
	MOV B,#64H
	DIV AB
	ADD A,#30H
	MOV @R0,A
	INC R0
	MOV A,B
	MOV B,#10
	DIV AB
	ADD A,#30H
	MOV @R0,A
	INC R0
	MOV A,B
	ADD A,#30H
	MOV @R0,A
	SJMP $
	END

程序手动赋值(0100H)=F7H(十进制为247) 转换为三位BCD码,即(60H)=32H、(61H)=34H和(62H)=37H
在这里插入图片描述

发布了36 篇原创文章 · 获赞 34 · 访问量 6920

猜你喜欢

转载自blog.csdn.net/liuxianfei0810/article/details/105622260