《单片机汇编》期末考试、考研常见考题、习题,题型汇总(十一),数码管与拨码开关,实践型

小知识点补充1:单片机IO空操作方式:
1,输出数据方式
2,读端口数据方式
3,读端口引脚方式
小知识点补充2
按中断产生的位置分为:外部中断和内部中断
按接受中断方式分为:可屏蔽中断和非可屏蔽中断

51单片机所有基本指令及常见伪指令汇总如下:

51单片机指令表

助记符              指令说明                 字节数            周期数

(数据传递类指令)

1	MOV A,Rn 						寄存器传送到累加器 1 1 
2	MOV A,direct 					直接地址传送到累加器 2 1 
3	MOV A,@Ri 						累加器传送到外部 RAM(8 地址 ) 1 1 
4	MOV A,#data 					立即数传送到累加器 2 1 
5	MOV Rn,A 						累加器传送到寄存器 1 1 
6	MOV Rn,direct 					直接地址传送到寄存器 2 2 
7	MOV Rn,#data 					累加器传送到直接地址 2 1 
8	MOV direct ,Rn 				寄存器传送到直接地址 2 1 
9	MOV direct ,direct 			直接地址传送到直接地址 3 2 
10  MOV direct ,A 					累加器传送到直接地址 2 1 
11	MOV direct ,@Ri 				间接 RAM 传送到直接地址 2 2 
12	MOV direct ,#data	 			立即数传送到直接地址 3 2 
13	MOV @Ri,A 						直接地址传送到直接地址 1 2 
14	MOV @Ri,direct 				直接地址传送到间接 RAM 2 1 
15	MOV @Ri,#data 					立即数传送到间接 RAM 2 2 
16	MOV DPTR,#data16 				16位常数加载到数据指针 3 1 
17	MOVC A,@A+DPTR 				代码字节传送到累加器 1 2 
18	MOVC A,@A+PC 					代码字节传送到累加器 1 2 
19	MOVX A,@Ri						外部RAM(8bit地址)传送到累加器 1 2 
20	MOVX A,@DPTR 					外部 RAM(16bit地址)传送到累加器 1 2 
21	MOVX @Ri,A 					累加器传送到外部 RAM(8 地址 ) 1 2 
22	MOVX @DPTR,A 					累加器传送到外部 RAM(16 地址 ) 1 2 
23	PUSH direct 					直接地址压入堆栈 2 2 
24	POP direct 						直接地址弹出堆栈 2 2 
25	XCH A,Rn 						寄存器和累加器交换 1 1 
26	XCH A, direct 					直接地址和累加器交换 2 1 
27	XCH A, @Ri 						间接RAM 和累加器交换 1 1 
28	XCHD A, @Ri 					间接RAM 和累加器交换低4位字节 1 1 
29  SWAP A							累加器内高低半字节交换	1	1

( 算术运算类指令 )

30	INC A 							累加器加1 1 1 
31	INC Rn 							寄存器加1 1 1 
32	INC direct 						直接地址加1 2 1 
33	INC @Ri 						间接RAM加1 1 1 
34	INC DPTR 						数据指针加1 1 2 
35	DEC A 							累加器减1 1 1 
36	DEC Rn 							寄存器减1 1 1 
37	DEC direct 						直接地址减1 2 2 
38	DEC @Ri 						间接RAM减1 1 1 
39	MUL AB 							累加器和B寄存器相乘 1 4 
40	DIV AB 							累加器除以B寄存器 1 4 
41	DA A 							累加器十进制调整 1 1 
42	ADD A,Rn 						寄存器与累加器求和 1 1 
43	ADD A,direct 					直接地址与累加器求和 2 1 
44	ADD A,@Ri 						间接 RAM 与累加器求和 1 1 
45	ADD A,#data 					立即数与累加器求和 2 1 
46	ADDC A,Rn 						寄存器与累加器求和( 带进位 ) 1 1 
47	ADDC A,direct 					直接地址与累加器求和( 带进位 ) 2 1 
48	ADDC A,@Ri 						间接RAM与累加器求和( 带进位 ) 1 1 
49	ADDC A,#data 					立即数与累加器求和( 带进位 ) 2 1 
50	SUBB A,Rn 						累加器减去寄存器( 带借位 ) 1 1 
51	SUBB A,direct 					累加器减去直接地址( 带借位 ) 2 1 
52	SUBB A,@Ri 						累加器减去间接RAM(带借位 ) 1 1 
53	SUBB A,#data 					累加器减去立即数( 带借位 ) 2 1 

( 逻辑运算类指令 )

54	ANL A,Rn 						寄存器“与”到累加器 1 1 
55	ANL A,direct					直接地址“与”到累加器 2 1 
56	ANL A,@Ri 						间接 RAM“与”到累加器 1 1 
57	ANL A,#data 					立即数“与”到累加器 2 1 
58	ANL direct,A 					累加器“与”到直接地址 2 1 
59	ANL direct, #data 				立即数“与”到直接地址 3 2 
60	ORL A,Rn 						寄存器“或”到累加器 1 2 
61	ORL A,direct 					直接地址“或”到累加器 2 1 
62	ORL A,@Ri 						间接 RAM“或”到累加器 1 1 
63	ORL A,#data 					立即数“或”到累加器 2 1 
64	ORL direct,A 					累加器“或”到直接地址 2 1 
65	ORL direct, #data 				立即数“或”到直接地址 3 1 
66	XRL A,Rn 						寄存器“异或”到累加器 1 2 
67	XRL A,direct 					直接地址“异或”到累加器 2 1 
68	XRL A,@Ri 						间接RAM“异或”到累加器 1 1 
69	XRL A,#data 					立即数“异或”到累加器 2 1 
70	XRL direct,A 					累加器“异或”到直接地址 2 1 
71	XRL direct, #data 				立即数“异或”到直接地址 3 1 
72	CLR A 							累加器清零 1 2 
73	CPL A 							累加器求反 1 1 
74	RL A 							累加器循环左移 1 1 
75	RLC A 							带进位累加器循环左移 1 1 
76	RR A 							累加器循环右移 1 1 
77	RRC A 							带进位累加器循环右移 1 1 

( 控制转移类指令 )

78	JMP @A+DPTR 					相对DPTR的无条件间接转移 1 2 
79	JZ rel 							累加器为0则转移 2 2 
80	JNZ rel 						累加器为1则转移 2 2 
81	CJNE A,direct,rel 				比较直接地址和累加器,不相等转移 3 2 
82	CJNE A,#data,rel 				比较立即数和累加器,不相等转移 3 2 
83	CJNE Rn,#data,rel 				比较寄存器和立即数,不相等转移 2 2 
84	CJNE @Ri,#data,rel 				比较立即数和间接RAM,不相等转移 3 2 
85	DJNZ Rn,rel 					寄存器减1,不为0则转移 3 2 
86	DJNZ direct,rel 				直接地址减1,不为0则转移 3 2 
87	NOP 							空操作,用于短暂延时 1 1 
88	ACALL 							add11绝对调用子程序 2 2 
89	LCALL add16 					长调用子程序 3 2 
90	RET 							从子程序返回 1 2 
91	RETI 							从中断服务子程序返回 1 2 
92	AJMP add11 						无条件绝对转移 2 2 
93	LJMP add16 						无条件长转移 3 2 
94	SJMP rel 						无条件相对转移 2 2 

( 布尔指令 )

95	CLR C 							清进位位 1 1 
96	CLR bit 						清直接寻址位 2 1 
97	SETB C 							置位进位位 1 1 
98	SETB bit 						置位直接寻址位 2 1 
99	CPL C 							取反进位位 1 1 
100	CPL bit 						取反直接寻址位 2 1 
101	ANL C,bit 						直接寻址位“与”到进位位 2 2 
102	ANL C,/bit 					直接寻址位的反码“与”到进位位 2 2 
103	ORL C,bit 						直接寻址位“或”到进位位 2 2 
104	ORL C,/bit 					直接寻址位的反码“或”到进位位 2 2 
105	MOV C,bit 						直接寻址位传送到进位位 2 1 
106	MOV bit, C 						进位位位传送到直接寻址 2 2 
107	JC rel 							如果进位位为 1 则转移 2 2 
108	JNC rel 						如果进位位为 0 则转移 2 2 
109	JB bit ,rel 					如果直接寻址位为 1 则转移 3 2 
110	JNB bit ,rel				    如果直接寻址位为 0 则转移 3 2 
111	JBC bit ,rel 					直接寻址位为 1 则转移并清除该位 2 2 

***(伪指令)***

ORG 				指明程序的开始位置
DB 					定义数据表
DW 					定义16位的地址表
EQU 				给一个表达式或一个字符串起名
DATA 				给一个8位的内部RAM起名
XDATA 				给一个8位的外部RAM起名
BIT 				给一个可位寻址的位单元起名
END 				指出源程序到此为止

(指令中的符号标识)

Rn 工作寄存器 R0-R7 
Ri 工作寄存器 R0 和 R1 
@Ri 间接寻址的 8 位 RAM 单元地址( 00H-FFH)
#data8 8 位常数
#data16 16 位常数
addr16 16 位目标地址,能转移或调用到 64KROM 的任何地方
addr11 11 位目标地址,在下条指令的 2K 范围内转移或调用
Rel 8 位偏移量,用于 SJMP 和所有条件转移指令,范围 -128+127 
Bit 片内 RAM 中的可寻址位和 SFR 的可寻址位
Direct 直接地址,范围片内 RAM 单元( 00H-7FH)和 80H-FFH 
$ 指本条指令的起始位置

(以上指令、伪指令等是本人在书上手打出来的,若有错误,欢迎留言指正,谢谢!)

题33(偏实践型)

请参考下图编写一个八位二进制密码锁程序。 程序中初始密码为
10001000B,当拨码开关输入的内容等于 10001000B 时,绿色LED亮,否则红色 LED 点亮,以示警告。

在这里插入图片描述
解析:注意LED亮灭的条件。

程序源码:

PASSWORD  EQU  70H;SAVE INIT PASSWORDS 
REDLED 	  BIT  P2.6
GREENLED  BIT  P2.7
   	ORG 0000H
	LJMP START
	ORG 0030H
START:
	MOV PASSWORD,#10001000B
	CLR A
	MOV R7,#0FFH
	CLR REDLED
	SETB GREENLED
LOOP:
	MOV P1,R7
	MOV A,P1
	CJNE A,PASSWORD,RFUC
	CLR GREENLED
	SETB REDLED
	AJMP LOOP
RFUC:
	CLR REDLED
	SETB GREENLED
   	AJMP LOOP
	SJMP $
	END

效果图:
1,密码正确时
在这里插入图片描述
2,密码错误时
在这里插入图片描述
扩展:
请参考下图编写一个八位二进制密码锁程序。 程序中初始密码为
7DH。用户随机拨动拨码开关,试编写程序满足下列要求:(数码管为共阴数码管连接到P0口)
(1)当用户通过拨码开关输入的密码时, 拨码开关输入的内容直观的在数码管上显示,例如拨码开关内容等于0111111时,数码管显示8。
(2)当拨码开关内容等于 10101010B 时,绿色LED亮,否则红色 LED 点亮,以示警告。

在这里插入图片描述

程序源码:

PASSWORD  EQU  60H;SAVE INIT PASSWORDS 
REDLED 	  BIT  P2.6
GREENLED  BIT  P2.7
   	ORG 0000H
	LJMP START
	ORG 0030H
START:
	MOV PASSWORD,#01111101B
	CLR A
	MOV R7,#0FFH
	CLR REDLED
	SETB GREENLED
LOOP:
	MOV P1,R7
	MOV A,P1
	MOV P0,A
	CJNE A,PASSWORD,RFUC
	CLR GREENLED
	SETB REDLED
	AJMP LOOP
RFUC:
	CLR REDLED
	SETB GREENLED
   	AJMP LOOP
	SJMP $
	END

仿真图:
1,密码错误
在这里插入图片描述
在这里插入图片描述
2,密码正确
在这里插入图片描述

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

猜你喜欢

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