1 编程将片内RAM30H单元开始的15B的数据传送到片外RAM3000H开始的单元中去
- 格式:docx
- 大小:37.89 KB
- 文档页数:10
3-5 指出下列指令中45H代表什么。
MOV A,#45HMOV A,45HMOV 45H,46HMOV C,45HMOV A,#45H中的45H代表立即数45H,该立即数为16进制。
MOV A,45H 中的45H代表直接地址45H单元。
MOV 45H,46H中的45H代表目的操作数所指定的单元为45H。
MOV C,45H中的45H代表45H位。
3-6 分析下列程序执行的结果。
(1)MOV A,#60HMOV R0,#40HMOV @R0, AMOV 41H, R0XCH A, R0执行结果为:(A)=40H(R0)=60H(40H)=60H(41H)=40H (2)MOV DPTR,#2003HMOV A,#18HMOV 20H,#38HMOV R0,#20HXCH A,@R0执行结果为:(DPH)=20H(DPL)=03H(A)=38H(20H)=18H(R0)=20H(3)MOV 20H,#01HMOV A,20HINC ACPL AMOV DPTR,#2000HMOVX @DPTR, A执行结果为:(20H)=01H(A)=FDH(DPTR)=2000H(2000H)=FDH3-8 按要求写出相应的指令。
(1)把寄存器R6的内容送到累加器A中。
(2)把外部RAM 1000H单元的内容传送到内部RAM 30H单元中。
(3)清除内部RAM 3FH 单元的高4位。
(4)使累加器A的最低位置1。
(5)清除进位位。
(6)使ACC.4和ACC.5置1。
(7)把外部ROM 2000H单元中的内容送到内部RAM的20H单元中。
(8)把外部ROM 2000H单元中的内容送到外部RAM的3000H单元中。
(1)MOV A,R6(2)MOV DPTR,#1000HMOVX A,@DPTRMOV R0,#30HMOV @R0,A(3)ANL 3FH,#0FH(4)ORL A,#01H(5)CLR C(6)ORL A,#30H(7)CLR AMOV DPTR,#2000HMOVC A,@A+DPTRMOV 20H,A(8)CLR AMOV DPTR,#2000HMOVC A,@A+DPTRMOV DPTR,#3000HMOVX @DPTR,A3-10 编写程序段完成如下要求。
单片机模拟试卷001五、作图题(10分)用6264(8K*8)构成16K的数据存储系统。
要求采用线选法产生片选信号,并计算6264的地址范围。
答:WR接6264的WERD接6264的OEAB0---AB12接6264的A0---A12DB0—DB7接6264的D0—D7AB15、AB14分别接Y0和Y1地址:0000H---1FFFH;2000H---3FFFH六、设计题1.某单片机控制系统有8个发光二极管。
试画出89C51与外设的连接图并编程使它们由右向左轮流点亮。
答:图(5分) 构思(3分)MOV A,#80H (1分)UP:MOV P1,A (1分)RR A (2分)SJMP UP (1分)2.某控制系统有2个开关K1和K2,1个数码管,当K1按下时数码管加1,K2按下时数码管减1。
试画出8051与外设的连接图并编程实现上述要求。
答:图(5分) 构思(3分)程序(4分)ORG 0000HLJMP MAINORG 0003HLJMP AINT0ORG 0013HLJMP BINT1MAIN: MOV IE,#83HSETB IT0SETB IT1MOV R0,#00HMOV DPTR,#TABUP: MOV A,R0MOVC A,@A+DPTRMOV P1,ASJMP UPAINT0: INC R0CJNE R0,#10,AINT01MOV R0,#0AINT01: RETIBINT1: DEC R0CJNE R0,#0FFH,BINT11MOV R0,#9BINT11: RETI单片机模拟试卷002五、编程题(每小题4分,共20分)1.已知在累加器A中存放一个BCD数(0~9),请编程实现一个查平方表的子程序。
SQR:1NC AMOVC A,@A+PCRETTAB:DB 0,1,4,9,16DB 25,36,49,64,812.请使用位操作指令实现下列逻辑操作:BIT=(10H∨P1.0)∧(11H∨C Y)ORL C,11HMOV 12H,CMOV C,P1.0ORL C,/10HANL C,12HMOV BIT,CRET3.已知变量X存于V AR单元,函数值Y存于FUNC单元,按下式编程求Y值。
综合题2.编程将片内RAM 30H单元开始的15个字节的数据传送到片外 RAM 3000H开始的单元中11.编程将片外RAM 3000H开始的20个的数据传送到片内RAM 30H开始的单元中去。
41.编程将片外ROM 1000H~1010H内容传入片内RAM 30H开始的单元。
23.将片外RAM空间2000H~200AH中的数据的高4位变零,低4位不变,原址存放。
5.片内RAM 30H开始的单元中有10个二进制数,请编程序求它们之和(和<256)。
33.编程将存放在片外RAM 1000H和1001H中的两个数,按大小次序存放到片内RAM的30H、31H单元。
40.已知A=7AH,R0=30H,片内RAM 30H单元内容为A5H,请问下列程序段执行后,(A)=?ANL A,#17HORL 30H,AXRL A,@R0CPL A3.用查表法编一子程序,将40H单元中低4位的BCD码转换成ASCⅡ码。
6.R1低4位中存有一BCD码,请编程序将它转换成ASCⅡ码。
29.编写程序将片内RAM 30H中的2位十进制数转换为ASCⅡ码,并存入31H和32H中。
16.片外RAM 2000H单元中有一BCD码,编程将其转换成ASCⅡ码。
27.写出达到下列要求的指令(不能改变个未涉及位的内容)。
(1)使A的最低位置1。
(2)清除A的高4位。
(3)使ACC.2和ACC.3置1。
(4)清除A的中间4位。
26.分别写出实现如下功能的程序段。
(1)将片内RAM 30H的中间4位,31H的低2位,32H的高2位按序拼成一个新字节,存入33H单元。
(2)将DPTR中间8位取反,其余位不变。
57.编程将累加器A的低4位数据送P1口的高4位,P1口的低4位保持不变。
58.编程将片内RAM 40H单元的中间4位取反,其余位不变。
24.将累加器A和状态寄存器内容压入堆栈保护,然后再恢复A和状态寄存器内容。
59.如果R0的内容为0,将R1置为0,如R0内容非0,置R1为FFH,试编程。
寻址方式和指令习题一、选择题1、MOVX A,@DPTR指令中源操作数的寻址方式是()(A)寄存器寻址(B)寄存器间接寻址(C)直接寻址(D)立即寻址2、ORG 0003HLJMP 2000HORG 000BHLJMP 3000H当CPU响应外部中断0后,PC的值是()(A)0003H (B)2000H (C)000BH (D)3000H3、执行PUSH ACC指令,MCS-51完成的操作是()(A)SP+1 SP (ACC)(SP)(B)(ACC)(SP)SP-1 SP(C)SP-1 SP (ACC)(SP) (D)(ACC)(SP)SP+1 SP4、LCALL指令操作码地址是2000H,执行完相子程序返回指令后,PC=()(A)2000H (B)2001H (C)2002H (D)2003H5、51执行完MOV A,#08H后,PSW的哪一位被置位()(A)C (B)F0 (C)OV (D)P6、下面条指令将MCS-51的工作寄存器置成3区()(A)MOV PSW,#13H (B)MOV PSW,#18H(C)SETB PSW.4 CLR PSW.3 (D) SETB PSW.3 CLR PSW.47、执行MOVX A,@DPTR指令时,MCS-51产生的控制信号是()(A)/PSEN (B)ALE (C)/RD (D)/WR8、MOV C,#00H的寻址方式是()(A)位寻址(B)直接寻址(C)立即寻址(D)寄存器寻址9、ORG 0000HAJMP 0040HORG 0040HMOV SP,#00H当执行完上面的程序后,PC的值是()(A)0040H (B)0041H (C)0042H (D)0043H10、对程序存储器的读操作,只能使用()(A)MOV指令(B)PUSH指令(C)MOVX指令(D)MOVC指令二、判断题1、MCS-51的相对转移指令最大负跳距是127B。
()2、当MCS-51上电复位时,堆栈指针SP=00H。
第一、二章单片机概述与结构一、填空题1.单片机复位后,SP、PC和I/O口的内容分别为07H\000H\FFH 。
2.单片机有四个工作寄存器区,由PSW状态字中的RS1和RS0两位的状态来决定。
单片机复位后,若执行SETB RS0指令,此时只能使用 1 区的工作寄存器,地址范围是08H---0FH 。
3.51单片机驱动能力最强的并行端口为P0端口。
4.51单片机PC的长度为16位,SP的长度为___8____位,DPTR的长度为_16__位。
5.访问51单片机程序存储器地址空间、片内数据存储器地址、片外数据存储器地址的指令分别为__movc_____,MOV和_movx______。
6.若A中的内容为63H,那么P标志位的值为1 。
7.当扩展外部存储器或I/O口时,P2口用作高八位地址总线。
8.51单片机内部RAM区有 4 个工作寄存器区。
9.51单片机内部RAM区有128 个位地址。
10.外部中断1()的中断入口地址为0013 ;定时器1的中断入口地址为001B 。
11.51单片机有 4 个并行I/O口,P0~P3是准双向口,所以由输出转输入时必须先写入 1 。
12.51单片机的堆栈建立在内部RAM 内开辟的区域。
二、选择题1.访问片外部数据存储器时,不起作用的信号是(C)。
A./RD B./WE C./PSEN D.ALE2.51单片机P0口用作输出时,应外接(A )。
A.上拉电阻B.二极管C.三极管D.下拉电阻3.进位标志CY在( C )中。
A.累加器B.算逻运算部件ALU C.程序状态字寄存器PSW D.DPTR4.堆栈数据的进出原则是(D )。
A.先进先出B.进入不出C.后进后出D.先进后出5.51单片机系统中,若晶振频率为6MHz,一个机器周期等于(D )μs。
A.1.5 B.3 C.1 D.26.在家用电器中使用单片机应属于微计算机的( B )。
A.辅助设计应用B.测量、控制应用C.数值计算应用D.数据处理应用7.PC的值是(C )。
《单片机应用技术》习题答案第一章1-1选择1.计算机中最常用的字符信息编码是( A )A ASCIIB BCD码C 余3码D 循环码2.要MCS-51系统中,若晶振频率屡8MHz,一个机器周期等于(A ) μsA 1.5B 3 C3.MCS-51的时钟最高频率是( A ).A 12MHzB 6 MHzC 8 MHzD 10 MHz4.以下不是构成的控制器部件(D ):A 程序计数器、B指令寄存器、C指令译码器、D存储器5.以下不是构成单片机的部件(D )A 微处理器(CPU)、B存储器C接口适配器(I\O接口电路) D 打印机6.下列不是单片机总线是(D )A 地址总线B 控制总线C 数据总线D 输出总线7.-49D的二进制补码为.( B )A 11101111B 11101101C 0001000D 111011008.十进制29的二进制表示为原码(C )A 11100010B 10101111C 00011101D 000011119. 十进制0.625转换成二进制数是( A )A 0.101B 0.111 C10 选出不是计算机中常作的码制是( D )A 原码B 反码C补码 D ASCII1-2填空题原码、反码和补码000111013.十进制数-29的8位补码表示为.11100011CPU、存储器和I\O接口三部分组成.EA必须接地.6.输入输出设备是计算机与外部世界交换信息的载体..110100018.-49D的二进制补码为.11101101ASCII10.计算机中的数称为机器数,它的实际值叫真值。
1-3判断题1.我们所说的计算机实质上是计算机的硬件系统与软件系统的总称。
(√)2.MCS-51上电复位时,SBUF=00H。
(×)。
SBUF不定。
3.使用可编程接口必须处始化。
(√)。
4.8155的复位引脚可与89C51的复位引脚直接相连。
(√)5.MCS-51是微处理器。
(×)不是。
一、填空题1、A T89S51单片机为8 位单片机,共有40 个引脚。
2、MCS-51系列单片机的典型芯片分别为8031 、8051 、8751 。
3、A T89S51访问片外存储器时,利用ALE 信号锁存来自P0口发出的低8位地址信号。
4、A T89S51的P3口为双功能口。
5、A T89S51内部提供 2 个可编程的16 位定时/计数器,定时器有4 种工作方式。
6、A T89S51有 2 级中断, 5 个中断源。
7、A T89S51的P2 口为高8位地址总线口。
8、设计一个以A T89C51单片机为核心的系统,如果不外扩程序存储器,使其内部4KB 闪烁程序存储器有效,则其EA* 引脚应该接+5V9、单片机系统中使用的键盘分为独立式键盘和行列式键盘,其中行列式键盘的按键识别方法有扫描法和线反转法。
10、A T89S51内部数据存储器的地址范围是00H~7FH ,位地址空间的字节地址范围是20H~2FH ,对应的位地址范围是00H~7FH ,外部数据存储器的最大可扩展容量是64K 。
11、如果(A)=34H,(R7)=0ABH,执行XCH A, R7;结果(A)= 0ABH ,(R7)= 34H 。
12、在R7初值为00H的情况下,DJNZ R7,rel指令将循环执行256 次。
13、欲使P1口的低4位输出0,高4位不变,应执行一条ANL P1, #0F0H 命令。
14、若CPU使用的是寄存器第1组,R0~R7的地址范围是08H-0FH。
15、单片机进行串行通信时,晶振频率最好选择11.0592MHz16、当MCS-51执行MOVX A,@R1指令时,伴随着RD* 控制信号有效。
17、若A中的内容为67H,那么,P标志位为 1 。
18、A T89S51唯一的一条16位数据传送指令为MOV DPTR,data16 。
19、LJMP的跳转范围是64K,AJMP的跳转范围是2K B,SJMP的跳转范围是±128 B (或256B)。
编程题:2.编一个子程序,将寄存器R0中的内容*10(积<256)3.编程将片内RAM 30H单元开始的15B的数据送到片外RAM 3000H开始的单元中去.4.用查表法编一子程序,将40H单元中的BCD码转换成ASCII码.4.片内RAM50H、51H单元中有一个10B的二进制数,高位在前,低位在后,请编程将其求补,存回原单元中去。
5.片内RAM30H开始的单元中有10B的二进制数,请编程求它们的和。
6.R1中存有一BCD码,请编程将它转换成ASKII码,存入外RAM1000H单元中去。
7.编一个程序,将累加器中的一个字符从串行接口发送出去。
8.片外RAM2000H开始的单元中有5B的数据,编程将它们传送到片内RAM20H开始的单元中去。
9 用查表法编一子程序,将R3中的BCD码转换成ASKII码。
10.片内RAM40H开始的单元内有10B二进制数,编程找出其中最大值并存于50H单元中。
11.编程将片外RAM3000H开始的20B的数据传送到片内RAM30H开始的单元中。
12.编程将R1、R2中的16位二进制数增1后送回原单元。
13.编程将片内RAM40H开始的单元存放的10B的二进制数传送到片外RAM4000H开始的单元中去。
14.编一子程序,从串行接口接受一个数据。
15.编写将30H和31H单元中2B二进制数乘2的子程序。
16.片外RAM2000H单元中有一BCD码,编程将其转换成ASKII码。
17.试编制单字节BCD码数的减法程序。
18.利用调子程序的方法,进行两个4B无符号数相加。
请编主程序及子程序。
19.若图11-2中数据为无符号数,求数据中最大值送A 。
编程并注释。
图11-2 片外 RAM中的数据块片外 RAM0001H┆20. 若图11-2中数据块是有符号数,求正数个数。
编程并注释。
21. 若图11-2中数据块为无符号数,求其累加和。
编程并注释。
22.已知20H单元有一位十进制数,通过查表找出与其对应的共阴极七段码,并存于30H单元。
单片机0一、填空题1.在8051汇编指令格式中,唯一不能缺省的部分是。
2.当MCS-51执行MOVC A,@A+PC指令时,伴随着PSEN 读控制信号有效。
3.当MCS-51单片机复位时PSW=00H,这时当前的工作寄存器区是0 区,R4所对应的存储单元地址为04 H。
4.MCS-51有4个并行I\O口,其中P0—P3是准双向口,所以,由输出转输入时必须先写入 1 。
5.MCS-51的堆栈是软件填写堆栈指针临时在内部RAM 内开辟的区域.6.在MCS-51单片机应用系统中,外部设备与外部数据存储器传送数据时,使用MOVEX 指令。
二、单选题1.MCS-51系列单片机的指令系统共(A)条指令。
A、111B、112C、113D、1152.在CPU内部,反映程序运行状态或反映运算结果的寄存器是(B )。
A、PCB、PSWC、AD、SP3.外扩程序存储器的高8位地址来自(C )口。
A、P0B、P1C、P2D、P34.要访问MCS-51的特殊功能寄存器应选用的寻址方式是(C)。
A、寄存器间接寻址B、变址寻址C、直接寻址D、相对寻址5.MCS-51的并行I/O口信息有两种读取方法,一种是读引脚,还有一种是(A )。
A、读锁存器B、读数据C、读A累加器D、读CPU6.8051单片机中,唯一一个用户可以使用的16位寄存器是(D)。
A、PSWB、ACCC、SPD、DPTR7.指令MOV A ,20H的字节数是(B )。
A、1B、2C、3D、48.下列指令能使累加器A的最高位置1的是(D )。
A、ANL A,#7FHB、ANL A,#80HC、ORL A,#7FHD、ORL A,#80H9.8031单片机的定时器T1用作计数方式时(A )。
A、外部计数脉冲由T1(P3.5)输入B、外部计数脉冲由内部时钟频率提供C、外部计数脉冲由T0(P3.4)输入D、以上均不是10.指令 MOV R0,#20H中的20H是指(A)。
1、编程将片内 RAM30H 单元开始的15 B 的数据传递到片外 RAM3000H 开始的单元中去。
解: STRAT: MOV R0,#30HMOV R7,#0FHMOV DPTR,#3000HLOOP: MOV A,@R0MOVX@DPTR,AINC R0INC DPTRDJNZ R7,LOOP3、将内部 RAM 40H 开始的 10 个字节的数搬到外面RAM 2000H 处MOV DPTR,#2000HMOV R0,#40HMOV R2,#0AHLOOP:MOV A,@R0MOVX @DPTR,AINC R0INC DPTRDJNZ R2,LOOPSJMP$ENDRET2 、编程将片内 RAM 40H 单元中的内容送到片外RAM2000H 单元中。
解:ORG0100HMOV A, 40HMOV DPTR, #2000HMOVX @DPTR, AEND4、将存于外面 RAM 8000H 开始的 50H 数据传递 0010H 的地区,请编程实现。
MOV DPTR, #8000HMOV R0,#10HMOV R2,#50HLOOP: MOVX A, @DPTR;取数MOVX @R0,A;存数1NC DPTR1NC R0DJNZ R2, LOOPRET5.片内 RAM40H 开始的单元内有10B 二进制数,编程找出此中最大值并存于50H 单元中.解START: MOV R0,#40H;数据块首地点送 R0MOV R7,#09H;比较次数送R7MOV A,@R0;取数送ALOOP:INC R0MOV30H,@R0;取数送30 HCJNE A,30H,NEHT;( A)与( 30H)对比NEXT:JNC BIE1(A)≥ (30H)转 BIR1MOV A,30H;(A)< (30H),大数送 ABIE1:DJNZ R7,LOOP;比较次数减 1,不为 0,持续比较MOV50H,A;比较结束,大数送 50HRET6.片内 RAM30H 开始的单元中有 10B 的二进制数,请编程求它们之和(和<256 ).解ADDIO:MOV R0,30H ADD A,@R0MOV R7,#9DJNZ R7,LOOPMOV A,@R0MOV30H,A LOOP: INC R0RET7、设从内存BLOCK单元开始寄存一无符号数的数据块,其长度为LEN。
1 编程将片内RAM30H单元开始的15B的数据传送到片外RAM3000H开始的单元中去。
解:STRAT:MOV R0,#30HMOV R7,#0FHMOV DPTR,#3000HLOOP: MOV A,@R0MOVX @DPTR,AINC R0INC DPTRDJNZ R7,LOOPRET2 片内RAM30H开始的单元中有10B的二进制数,请编程求它们之和(和<256 ).解ADDIO:MOV R0,30HMOV R7,#9MOV A,@R0LOOP: INC R0ADD A,@R0DJNZ R7,LOOPMOV 30H,ARET5 片内RAM40H开始的单元内有10B二进制数,编程找出其中最大值并存于50H单元中.解 START: MOV R0,#40H ;数据块首地址送R0MOV R7,#09H ;比较次数送R7MOV A,@R0 ;取数送ALOOP: INC R0MOV 30H,@R0 ;取数送30HCJNE A,30H,NEHT ;(A)与(30H)相比NEXT: JNC BIE1 (A)≥(30H)转BIR1MOV A,30H ;(A)<(30H),大数送ABIE1: DJNZ R7,LOOP ;比较次数减1,不为0,继续比较MOV 50H,A ;比较结束,大数送50HRET6 编一子程序,从串行接口接受一个字符.解: START: MOV TMOD,#20H ;定时器T1工作于模式2MOV TH1,#0E8H ;设置波特率为1 200b/sMOV TL1,#0E8HSETB TR1 ;启动T1MOV SCON,#50H ;串行接口工作于方式1,充许接收L1: JNB RI,L1 ;等待接收数据,末接收到数据,继续等待 CLR RI ;接收到数据,清RIMOV A,SBUF ;接收到数据送ARET9 编制一个循环闪烁灯的程序。
有8个发光二极管,每次其中某个灯闪烁点亮10次后,转到下一个闪烁10次,循环不止。
画出电路图。
解本程序的硬件连接如图所示。
当P1.0输出高电平时,LED灯亮,否则不亮。
其程序如下:MOV A,#01H ;灯亮初值SHIFT: LCAIL FLASH ;调闪亮10次子程序RR A ;右移一位SJMP SHIFT ;循环FLASH: MOV R2,#0AH 闪烁10次计数FLASH1; MOV P1,A ;点亮LCALL DELAY ;延时MOV P1,#00H ;熄灭LCALL DELAY ;延时DJNZ R2,FLASH1 ;循环RET1.编定一个软件延时1S和1min的子程序.设fosc=6Hz,则一个机器周期1μs。
解:(1)1S=2US*5*1000005*100000=250*200*10(2)ORG 1000HTIME:MOV R7,#10T3: MOV R6,#200T2: MOV R6,#250T1: DJNZ R5,T1DJNZ R6,T2DJNZ R7,T3RET(2)1min=60,调用上面1s子程序60次ORG 0030HMOV R0,#60LOOP:LCALL TIMEDJNZ R0,LOOPRET2.请编制串行通信的数据发送程序,发送片内RAM50H~5FH的16B数据,串行接口设定为方式2,采用偶校验方式。
设晶振频率为6MHz。
解:查询方式发送程序如下MOV SCON,#8OHM OV PCON,#80HMOV R0,#50HMOV R7,#16HLOOP: MOV A,@R0MOV C,PMOV TB8,CMOV SBUF,AJNB T1,$CLR T1INC R0DJNZ R7,LOOPRET4.应用单片机内部定时器T0工作在方式1下,从P1.0输出周期为2ms的方波脉冲信号,已知单片机的晶振频率为6MHZ。
请(1)计算时间常数X,应用公式X=216-t(f/12)(2)写出程序清单解:X=216-t(F/12)=216-1*10-3*6*106/12=OFEOCHORG 3000HSTART:MOV TMOD,#01HMOV TL0,#OCHMOV THO,#OFEHSETB TR0LOOP: JBC TFO,DONESJMP LOOPDONE: MOV TL0,#OCHMOV THO,#OFEHCPL P1.0SJMP LOOP6、用89C51的P1口,监测某一按键开关,使每按键一次,输出一个正脉冲(脉宽随意)。
编出汇编语言程序。
解: ORG 0100HABC:SETB P1.0SETB P1.7JB PI.7,$JNB P1.7,$CLR P1.0MOV R2,#0DAY: NOPNOPDJNZ R2,DAYSJMP ABC7、设计一个4位数码显示电路,并用汇编语言编程使"8"从右到左显示一遍。
解: ORG 0100HMOV A,#08HMOV R2,#01HMOV DPTR,#TABMOVC A,@A+DPTRMOV P1,ANEXT:MOV A,R2MOV P3,AACALL DAYJB ACC.4,LPDRL AMOV R2,AAJMP NEXTLPD: RETTAB: DBEND11.设计89C51和ADC0809的接口,采集2通道10个数据,存入内部RAM的50H~59H单元,画出电路图,编出:(2)查询方式;解:IN2的地址为7FFAH,P1.0查询转换结束信号,查询程序如下:ORG 0100HMOV R7,#0AHMOV R0,#50HMOV DPTR,#7FFAHNEXT: MOVX @DPTR,AJB P1.0,$MOVX A,@DPTRMOV @R0,AINC R0DJNZ NEXTSJMP $12、扫描子程序:KEY1: ACALL KS1 ;调用判断有无键按下子程序JNZ LK1 ;有键按下,转LK1AJMP KEY1 ;无键按下,返回LK1: ACALL T12MS ;调延时12ms子程序ACALL KS1 ;查有无键按下JNZ LK2 ;若有,则为键确实按下,转逐列扫描AJMP KEY1 ;无键按下,返回LK2: MOV R4,#00H ;首列号 R4MOV R2,#FEH ;首列扫描字 R2LK4: MOV A,R2 ;列扫描字 P1口MOV P1,A ;使第一列线为0MOV A,P1 ;读入行状态JB ACC.0,LONE;第0行无键按下,转查第一行MOV A,#00H ;第0行有键按下,该行首键号#00H A AJMP LKP ;转求键号LONE: JB ACC.1,NEXT ;第一行无键按下,转查下一列MOV A,#02 ;第一行有键按下,该行首键号#02 A LKP: ADD A,R4 ;键号=首行号+列号PUSH ACC ;键号进栈保护LK3: ACALL KS1 ;等待键释放JNZ LK3 ;未释放,等待POP AC ;键释放,键号 ARET ;键扫描结束NEXT: INC R4 ;列号加1,指向下一列MOV A,R2 ;列扫描字 AJNB ACC.1,KND ;判断2列全扫描完?扫描完,转KNDRL A ;没扫描完,扫描字左移一位,形成下一列扫描字 MOV R2,A ;扫描字 R2AJMP LK4 ;扫描下一列AJMP KEY1 ;全扫描完,返回MOV A,#FCH ;全扫描字11111100B AMOV P1,A ;全扫描字所有行MOV A,P1 ;读取列值CPL A ;取正逻辑,高电平表示有键按下ANL A,#0C0H ;屏蔽低6位,取高2位RET ;出口状态(A)!=0,有键按下2、如图所示,要求按下S1~S4中的任意一个键,则对应的(S1-D3、S2-D4、 S3-D5、S4-D6)发光二极管亮,松开键对应的发光二极管灭。
解答:ORG 0000HLJMP MAINORG 0030HMAIN: MOVP3,#0FFHLOOP: MOV A,P3MOV P1,ALJMP LOOPEND1、试编程采用软件延时的方法来延时5分钟。
(系统时钟为6MHZ)(10分)ORG 1000HMOV R3,#05HLP3:MOV R2,# 78HLP2: MOV R1,#0FAHLP1:MOV R0,# 0FAHLP: NOPNOPDJNZ R0,LPDJNZ R1,LP1DJNZ R2,LP2DJNZ R3,LP3END3、使用74ls164的并行输出端接8个发光二极管,利用它的串入并出的功能,把发光二极管从左到右轮流点亮一个灯,并反复循环。
(即流水灯效果)ORG 0000HLJMP MAINORG 0030HMAIN: MOV SCON #00HCLR ESMOV A #80HDELR: CLR P1.0MOV SBUF,AJNB TI,$SETB P1.0LCALL DELAYCLR TIRR ASJMP DELRDELAY: MOV R7,#10D1: MOV R6,#50D2: MOV R5,#200DJNZ R5,$DJNZ R6,D2DJNZ R7,D1RETEND。