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

Doria ·
更新时间:2024-09-20
· 637 次阅读

小知识点补充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,密码正确
在这里插入图片描述


作者:liuxianfei0810



数码管 考研 开关 数码 单片机

需要 登录 后方可回复, 如果你还没有账号请 注册新账号