当前位置:文档之家› 汇编51单片机考试常见试题

汇编51单片机考试常见试题

汇编51单片机考试常见试题
汇编51单片机考试常见试题

汇编51单片机考试常见试题

一、填空题

1.单片机是把中央处理器、存储器、定时器/计数器以及I/O接口电路等主要计算机部件集成在一块集成电路芯片上的微型计算机。

2.除了单片机这一名称之外,单片机还可称为微控制器、嵌入式控制器。

3.计算机的系统总线有地址总线、控制总线和数据总线。

4.80C51单片机基本型内部RAM有 128 个字节单元,这些单元可以分为三个用途不同的区域,一是工作寄存器区、二是位寻址区、三是数据缓冲区。5.8051单片机有2 个16位定时/计数器。

6.单片机存储器的主要功能是存储程序和数据。80C51含4 KB掩膜ROM。7.80C51在物理上有4个独立的存储器空间。

8.通常、单片机上电复位时PC= 0000H,SP=07H;而工作寄存器则缺省采用第00 组,这组寄存器的地址范围是从00H~ 07H。

9.8051的堆栈是向地址的高端生成的。入栈时SP先加1,再压入数据。10.使用8031芯片时,需将/EA引脚接低电平,因为其片内无程序存储器。11.MCS-51特殊功能寄存器只能采用直接寻址方式。

12.汇编语言中可以使用伪指令,它们不是真正的指令,只是用来对汇编过程进行某种控制。

13.半导体存储器的最重要的两个指标是存储容量和存储速度。

14.当PSW4=1,PSW3=0时,工作寄存器Rn,工作在第2组。

15.在8051单片机中,由 2 个振荡(晶振)周期组成1个状态(时钟)周期,由 6个状态周期组成1个机器周期。

16.假定累加器A的内容30H,执行指令:1000H:MOVC A,@A+PC后,把程序存储器1031H单元的内容送累加器A中。

17.MCS-51单片机访问外部存储器时,利用ALE信号锁存来自P0口的低8位地址信号。

18.内部RAM中,位地址为30H的位,该位所在字节的字节地址为26H。19.若A中的内容为63H,那么,P标志位的值为0。

20.在基址加变址寻址方式中,以累加器A作变址寄存器,以DPTR或PC作基址寄存器。

21.指令格式是由操作码和操作数所组成,也可能仅由操作码组成。

22.通过堆栈操作实现子程序调用,首先就要把PC的内容入栈,以进行断点保护。调用返回时,再进行出栈保护,把保护的断点送回到PC。

23.MCS-51单片机程序存储器的寻址范围是由程序计数器PC的位数所决定的,因为MCS-51的PC是16位的,因此其寻址的范围为64KB。

24.在寄存器间接寻址方式中,其“间接”体现在指令中寄存器的内容不是操作数,而是操作数的地址。

25.假定累加器A中的内容为30H,执行指令1000H:MOVC A,@A+PC 后,把程序存储器1031H单元的内容送入累加器A中。

26.12根地址线可寻址4 KB存储单元。

27.:假定A=55H,R3=0AAH,在执行指令ANL A,R3后,A=00H,R3=0AAH。28.MCS-51的P0口作为输出端口时,每位能驱动8个LSTTL负载。

29.MCS-51有4个并行I/O口,其中P1~P3是准双向口,所以由输出转输入时必须先写入“1”。

30.MCS-51的堆栈是软件填写堆栈指针临时在片内数据存储器内开辟的区域。

31.若不用MCS-51片内存储器,引脚EA必须接地。

32.MCS-51在外扩ROM、RAM或I/O时,它的地址总线是P0、P2口。33.MCS-51中凡字节地址能被8整除的特殊功能寄存器均能位寻址。

34.执行当前指令后,PC内容为下一条将要读取的指令码首地址。

35.当串口接收到一个数据,此时RI= 1,当串口发送完一个数据,此时TI= 1。36.对于80C51无嵌套的单级中断,响应时间至少 3 个机器周期,最多8 个机器周期。

37。.晶振的频率为6MHz时,一个机器周期为2μS。

38。当允许定时器1工作在方式1时,控制字TMOD应为10H。

39.MCS-51单片机8031中有2个16 位的定时/计数器,可以被设定的工作方式有四种。

40.MCS-51单片机有5 个中断源,可分为2个中断优先级。上电复位时外部中断0中断源的优先级最高。

41.用串行口扩展并行口时,串行接口的工作方式应选为方式0。

42.若某8位D/A转换器的输出满刻度电压为+5V,则D/A转换器的分辨率为5/255=0.0196V。

43.在串行通讯中,收发双方对波特率的设定应该是相等的。

44.单片机复位时P0的值为0FFH、PC为0000H。

45.外部中断1所对应的中断入口地址为0013H,T0中断服务程序入口地址为000B H。

46MCS-51系统中,当PSEN信号有效时,表示CPU要从程序存储器读取信息。47.MCS-51片内20H~2FH范围内的数据存储器,即可以字节寻址又可以位寻址。48.若用传送指令访问MCS-51的程序存储器,它的操作码助记符应为MOVC。49.MCS-51串行接口有4种工作方式,这可在初始化程序中用软件填写特殊功能寄存器SCON加以选择。

50.当使用慢速外设时,最佳的传输方式是中断。

51.当定时器T0工作在方式3时,要占用定时器T1的TR1和TF1两个控制位。52.MCS-51有5个中断源,有2个中断优先级,优先级由软件填写特殊功能寄存器IP加以选择。

53.要串口为10位UART,工作方式应选为方式1。

54.用串口扩并口时,串行接口工作方式应选为方式0。

55.在串行通信中,有数据传送方向单工、半双工、全双工三种工作方式。56.MOV PSW,#10H是将MCS-51的工作寄存器置为第2组。

57.指令DJNZ R7,e操作码所在地址为3000H,e=EFH,则它的转移目的地址应为2FF1H。

58.累加器(A)=80H,执行完指令ADD A,#83H后,进位位C=1。

执行ANL A,#0FH指令后,累加器A的高4位=0000。

59.SJMP e 的指令操作码地址为0050H,e=65H,那么它的转移目的地址为00B7H。60.设DPTR=2000H,(A)=80H,则MOVC A,@A+DPTR的操作数的实际地址为2080H。61.十进制数—47用8位二进制补码表示为1101 0001。—19D的二进制补码表示为1110 1101。

判断题

三、判断题

1.8051单片机必须使用内部ROM。(x)

2、当EA脚接高电平时,对ROM的读操作只访问片外程序存储器。(x)

3.51单片机只能做控制用,不能完成算术运算。(x)

4.单片机内部RAM和外部RAM是统一编址的,它们的访问指令相同。(x)

5.判断寻址方式

(1).MOV A,11H,是直接寻址。( √ )。

(2).MOV A, R0, 是寄存器寻址。( √ )。

(3).MOV A,#22H, SUBB A,#11H, Cy = 1 ( x )。

(4).MOV A,@R0 是寄存器间接寻址( √ )。

(5). MOV A,#11H 是立即数寻址(√ )。

6.下面几条指令是否正确:

(1)MOV @R1, 80H ( x )

(2)INC DPTR ( √ )

(3)CLR R0 ( x )

(4)MOV @R1,#80H (√)

(5)ANL R1,#0FH (x)

(6)ADDC A,C (x)

(7)XOR P1,#31H ( x )

7.判断下面指令的运行结果

(1)MOV A,#11H

ANL A,#FFH

(A)= 11H (√ )

(2)MOV A,#11H

ORL A,#FFH

(A)= 11H ( X )

8.累加器A中存放着一个其值小于等于127的8位无符号数,CY清“0”后执行RLC A指令,则A中数变为原来的2倍。(√)

9.必须有中断源发出中断请求,并且CPU打开中断,CPU才可能响应中断。(√)

10.E2PROM不需紫外线能擦除,如2816在写入时就能自动完成擦除。(√)

11.8155是一种8位单片机。(x)

12.MCS-51的中断源全部编程为同级时,优先级最高的是INT1。(x )

13.指令AJMP的跳转范围是1KB。(x)

14.外部中断0的入口地址是0003H。(√)

15.MCS-51有中断源5个。( √ )

16.A/D转换器的作用是将模拟量转换为数字量;D/A转换器的作用是将数字量转为模拟量。(Y )

17.MOVX A,3057H (x)

18.ANL R1,#0FH (x)

19.MCS-51单片机的CPU能同时处理8位二进制数据。(√)

20.当EA脚接高电平时,对ROM的读操作只访问片外程序存储器。(x)

21.读内部ROM时使用的是“MOV”指令,读外部RAM时使用的是“MOVX”指令。(x)

22.51单片机只能做控制用,不能完成算术运算。(x)

(A)MOV (B)MOVX (C)MOVC (D)以上都是

8.指令AJMP的跳转范围是(C)

(A)256B (B)1KB (C)2KB (D)64KB

9.在CPU内部,反映程序运行状态或反映运算结果的一些特征的寄存器是( B )(A)PC (B)PSW (C)A (D)SP

10.下列四条叙述中,有错误的一条是(A)

(A)16根地址线的寻址空间可达1MB

(B)内存储器的存储单元是按字节编址的

(C)CPU中用于存放地址的寄存器称为地址寄存器

(D)地址总线上传送的只能是地址信息

11. PSW=18H时,则当前工作寄存器是(D)

(A)0组(B) 1组(C)2组(D)3组

12. 8051与8751的区别是:( C )

(A)内部数据存储单元数目的不同(B)内部数据存储器的类型不同

(C)内部程序存储器的类型不同(D)内部的寄存器的数目不同

13.在家用电器中使用单片机应属于微计算机的( B)

(A)辅助设计应用(B)测量、控制应用(C)数值计算应用(D)数据处理应用

14.中断查询确认后,在下列各种8031单片机运行情况中,能立即进行响应的是:(D)

(A)当前正在执行高优先级中断处理

(B)当前正在执行RETI指令

(C)当前指令是DIV指令,且正处于取指令的机器周期

(D)当前指令是MOV A,R3

15.下列说法错误的是:(B)

(A)同一级别的中断请求按时间的先后顺序响应。

(B)同一时间同一级别的多中断请求,将形成阻塞,系统无法响应。

(C)低优先级中断请求不能中断高优先级中断请求,但是高优先级中断请求能中断低优先级中断请求。

(D)同级中断不能嵌套。

16.定时器/计数器工作于模式1时,其计数器为几位?(B)

(A)8位 (B)16位 (C)14位 (D)13位

17.堆栈数据的进出原则是(B)

(A)先进先出 (B)先进后出 (C)后进后出 (D)进入不出

18.开机复位后,CPU使用的是寄存器第一组,地址范围是(B)

(A)00H-10H (B)00H-07H (C)10H-1FH (D)08H-0FH

19.若某存储器芯片地址线为12根,那么它的存储容量为( C )

(A)1KB (B)2KB (C)4KB (D)8KB

20.控制串行接口工作方式的寄存器是(C)

(A)TCON (B)PCON (C)SCON (D)TMOD

21.要使MCS-51能够响应定时器T1中断,串行接口中断,它的中断允许寄存器IE的内容应是( A )

(A)98H (B)84H (C)42H (D)22H

22. 51执行完MOV A,#08H后,PSW的一位被置位(D)

(A)C (B)F0 (C)OV (D)P

23.计算机中最常用的字符信息编码是( A )

(A) ASCII (B) BCD码 (C) 余3码 (D) 循环码

24.某种存储器芯片是8KB*4/片,那么它的地址线根数是(C)

(A)11根(B)12根(C)13根(D)14根

25.在 MCS-51系统中,若晶振频率是8MHz,一个机器周期等于( A ) μs (A)1.5 (B)3 (C)1 (D)0.5

26.MCS-51的时钟最高频率是 ( A ).

(A)12MHz (B)6 MHz (C)8 MHz (D)10 MHz

27.P1口的每一位能驱动(B)

(A)2个TTL低电平负载(B)4个TTL低电平负载

(C)8个TTL低电平负载(D)10个TTL低电平负载

28.对程序存储器的读操作,只能使用( D )

(A)MOV指令(B)PUSH指令(C)MOVX指令(D)MOVC指令

29.要想测试INT0引脚上的一个正脉冲宽度,那么特殊功能寄存器TMOD的内容应为(A)

(A)09H (B)87 H (C)00H (D)80H

30.在中断服务程序中,至少应有一条( D )

(A)传送指令(B)转移指令(C)加法指法(D)中断返回指令

31.控制串行口工作方式的寄存器是(C)

(A)TCON (B)PCON (C)SCON (D)TMOD

32.下列说法正确的是:(D)

(A)各中断发出的中断请求信号,都会标记在MCS-51系统的IE寄存器中。(B)各中断发出的中断请求信号,都会标记在MCS-51系统的TMOD寄存器中。(C)各中断发出的中断请求信号,都会标记在MCS-51系统的IP寄存器中。(D)各中断发出的中断请求信号,都会标记在MCS-51系统的TCON与SCON 寄存器中。

33.下面哪一种传送方式适用于处理外部事件( C )

(A)DMA (B)无条件传送 (C)中断 (D)条件传递

34. MOV C,#00H的寻址方式是(A)。

(A)位寻址(B)直接寻址(C)立即寻址(D)寄存器寻址

35.MCS-51系列中断源有(A)。

(A)5个(B)2个(C)3个(D)6个

36.使用定时器T1时,有几种工作模式(C)

(A)1种B)2种C)3种(D)4种

37.执行MOVX A,@DPTR指令时,MCS-51产生的控制信号是(C)。(A)/PSEN (B)ALE (C)/RD (D)/WR

38. 当优先级的设置相同时,若以下几个中断同时发生,( D)中断优先响应。(A)外部中断1 (B)T1 (C)串口(D)T0

39.当需要扩展一片8K的RAM时,应选用的存储器为(B)。

(A)2764 (B)6264 (C)6116 (D)62128

40.若想扩展键盘和显示,并希望增加256字节的RAM时,应选择(A)芯片。(A)8155 (B)8255 (C)8279 (D)74LS164

4180C51单片机要进行10位帧格式的串行通讯时,串行口应工作在(B)。

(A)方式0 (B)方式1 (C)方式2 (D)方式3

42.要使MCS-51能够响应定时器T1中断、串行接口中断,它的中断允许寄存器IE的内容应是(A)

(A)98H (B)84H (C)42 (D)22H

43.CPU寻址外设端口地址的方法有两种,一种是统一编址,还有一种是(C)(A)混合编址(B)动态编址(C)独立编址(D)变址编址44. MCS-51外扩一个8255时,需占用(D)个端口地址

(A)1个(B)2个(C)3个(D)4个

45.MCS-51用串行扩展并行I/O口时,串行接口工作方式选择(A)(A)方式0 (B)方式1 (C)方式2 (D)方式3

46.使用8255可以扩展出的I/O口线是( B )

(A)16根(B)24根(C)22根(D)32根

47.当8031外出扩程序存储器8KB时,需使用EPROM 2716(C)(A)2片(B)3片(C)4片(D)5片

48.MCS-51外扩ROM,RAM和I/O口时,它的数据总线是(B)(A)P0 (B)P1 (C)P2 (D)P3

49.MCS-51在响应中断时,下列哪种操作不会发生( A ).

(A)保护现场 (B)保护PC (C)找到中断入口 (D)保护PC转入中断入口

50.MCS-51响应中断时,下面哪一个条件不是必须的(D)

(A)当前指令执行完毕(B)中断是开放的

(C)没有同级或高级中断服务(D)必须有RET1指令

51.计算机在使用中断方式与外界交换信息时,保护现场的工作方式应该是( C )

(A)由CPU自动完成 (B)在中断响应中完成

(C)应由中断服务程序完成 (D)在主程序中完成

52.6264芯片是(B)

(A)EEPROM (B)RAM (C)FLASH ROM (D)EPROM 53.8051与8751的区别是:(C)

(A)内部数据存储但也数目的不同(B)内部数据存储器的类型不同(C)内部程序存储器的类型不同(D)内部的寄存器的数目不同54.PC的值是(C)

(A)当前正在执行指令的前一条指令的地址(B)当前正在执行指令的地址

(C)当前正在执行指令的下一条指令的地址(D)控制器中指令寄存器的地址

55.访问片外数据存储器的寻址方式是(D)

(A)立即寻址(B)寄存器寻址(C)寄存器间接寻址(D)直接寻址

56.当8031外扩程序存储器32KB时,需使用EPROM2764(C)

(A)2片(B)3片(C)4片(D)5片

57.当使用快速外部设备时,最好使用的输入/输出方式是(C)

(A)中断(B)条件传送(C)DMA (D)无条件传送58.MCS-51的中断源全部编程为同级时,优先级最高的是(D)(A)INT1 (B)TI (C)串行接口(D)INT0

59.MCS-51的并行I/O口信息有两种读取方法:一种是读引脚,还有一种是( A )

(A)读锁存器(B)读数据库(C)读A累加器(D)读CPU 60.MCS-51的并行I/O口读-改-写操作,是针对该口的(D)(A)引脚(B)片选信号(C)地址线(D)内部锁存器61.在MCS-51中,需要外加电路实现中断撤除的是:(D)(A)定时中断(B)脉冲方式的外部中断

(C)外部串行中断(D)电平方式的外部中断

62.串行口工作方式1的波特率是:(C)

(A)固定的,为

32

/

OSC

f。(B)固定的,为16

/

OSC

f。

(C)可变的,通过定时器/计数器T1的溢出率设定。(D)固定的,为

64

/

OSC

f。

63.80C51单片机要进行10位帧格式的串行通讯时,串行口应工作在(B)。(A)方式0 (B)方式1 (C)方式2 (D)方式3

64.80C51复位初始化时未改变SP的内容,第一个入栈的单元地址为( A )。(A)08H (B)80H (C)00H (D)07H

65.51系列单片机有五个中断源,外中断INT1的入口地址是( C ),定时器T0的中断入口地址是( B )。

A、0003H

B、000BH

C、0013H

D、001BH

E、0023H

四、程序分析及编程

1.设(A)=04H,(CY)=1, 写出下列各条指令的结果。

RL A; (A)= 08H

RR A; (A)= 02H

RLC A; (A)= 09H

RRC A; (A)= 82H

2.设(A)=7AH,(R0)=30H,(30H)=A5H,(CY)=1, 写出下列各条指令的结果。

MOV A ,R0 (A)=30H (R0)=30H

XCH A, R0 (A)=30H (R0)=30H

XCHD A,@R0 (A)=A5H (R0)=30H (30H)=30H

ADD A,#30H (A)=D5H (CY)=1

ADDC A,30H (A)=06H (CY)=1

SUBB A,#30H (A)=D5H (CY)=1

3.下列程序段的功能是什么?

PUSH A

PUSH B

POP A

POP B

答:交换A、B的内容

4.已知程序执行前有A=02H,SP=52H,(51H)=FFH,(52H)=FFH。下述程序执行后:请问:A=(),SP=(),(51H)=(),(52H)=(),PC=()。

POP DPH

POP DPL

MOV DPTR,#4000H

RL A

MOV B,A

MOVC A,@A+DPTR

PUSH A

MOV A,B

INC A

MOVC A,@A+DPTR

PUSH A

RET

ORG 4000H

DB 10H,80H,30H,50H,30H,50H

答:(A)=50H , (SP)=50H , (51H)=30H , (52H)=50H , (PC)=5030H 5.假定A=83H,(R0)=17H,(17H)=34H,执行以下指令后,A的内容为()。:

ANL A,#17H

ORL 17H,A

XRL A,@R0

CPL A

答:0CBH

6.如果DPTR=507BH,SP=32H,(30H)=50H,(31H)=5FH,(32H)=3CH,则执行

下列指令后则:DPH=(),DPL=(),SP=():

POP DPH

POP DPL

POP SP

答:DPH=3CH , DPL=5FH , SP=4FH

7.假定,SP=60H,A=30H,B=70H,执行下列指令后,SP的内容为(),61H单元的内容为(),62H单元的内容为()。

PUSH A

PUSH B

答:62H , 30H , 70H

8.计算下面子程序中指令的偏移量和程序执行的时间(晶振频率为 12MHz)。

MOV R3,#15H ;1个机器周期

DL1:MOV R4,#255 ;1个机器周期

DL2:MOV P1,R3 ;2个机器周期

DJNZ R4,DL2 ;2个机器周期

DJNZ R3,DL1 ;2个机器周期

RET ;2个机器周期

答:15348us

析:((2+2)×255+1+2)×15+1+2=15348us

9. 假定A=83H,(R0)=17H,(17H)=34H,执行以下指令后,A的内容为()。

ANL A,#17H

ORL 17H,A

XRL A,@R0

CPL A

答:0CBH

10. 如果(DPTR)=507BH,(SP)=32H,(30H)=50H,(31H)=5FH,(32H)=3CH,则执行下列指令后:DPH内容为(),DPL内容为(),SP内容为()。POP DPH;

POP DPL;

POP SP;

答:(DPH)= 3CH,(DPL)=5FH,(SP)=50H

11.假设外部数据存储器2000H单元的内容为80H,执行下列指令后,累加器A 中的内容为()。

MOV P2,#20H

MOV R0,#00H

MOVX A,@R0

答:累加器A中的内容为(80H)

12.阅读下列程序段并回答问题。(1).该程序执行何种操作? (2).已知初值(60H)=23H,(61H)=61H,运行程序后62H内容()

CLR C

MOV A,#9AH

SUBB A,60H

ADD A,61H

DA A

MOV 62H,A

答: 1)、该程序是单字节BCD码运算,是将(61H)—(60H)→62H

2)、(62H)=38H

13.试编写1个程序,将内部RAM中45H单元的高4位清0,低4位置1。

答:MOV A, 45H

ANL A, #0FH

ORL A, #0FH

MOV 45H, A

14.试编写程序,查找在内部RAM的30H~50H单元中是否有0AAH这一数据。若

有,则将51H单元置为“01H”;若未找到,则将51H单元置为“00H”。

答:START: MOV R0,#30H

MOV R2,#20H

LOOP: MOV A,@R0

CJNE A,#0AAH,NEXT

MOV 51H,#01H

LJMP EXIT

NEXT: INC R0

DJNZ R2,LOOP

MOV 51H,#00H

EXIT: RET

15. 编写程序,要求使用T0,采用方式2定时,在P1.0输出周期为400μs ,占空比为10:1的矩形脉冲。

解:根据题意,从P1.0输出的矩形脉冲的高低电平的时间为10:1,则高低电平的时间分别为363.63μs 和36.37μs 。如果系统采用6MHz 晶振的话,s T cy μ2=,因此高低电平输出取整,则约为364μs 和36μs 。编写程序如下: ORG 0000H

LJMP MAIN

ORG 000BH

LJMP IT0P

MAIN: MOV TMOD,#02H ;定时器/计数器T0为定时方式2

MOV TL0,#4AH ;定时364μs 初值赋值

SETB TR0 ;启动T0,开始计数

SETB ET0 ;允许T0中断

SETB EA ;CPU 开中断

SETB P1.0

WAIT: AJMP WAIT

IT0P: CLR EA

CLR P1.0 ;关中断

MOV R0,#9

DLY: DJNZ R0,DLY ;延时26μs

MOV TL0,#4AH ;定时364μs 初值赋值

SETB P1.0

SETB EA

RETI

16. 设在外部RAM 中有三个连续单元2001H ,2002H ,2003H ,其中2001H 和2002H 单元中分别存放两个8位无符号二进制数,比较这两个数的大小,然后将大数送到2003H 单元。

COMPARE:MOV DPTR, #2001H

MOVX A , @DPTR

MOV R0,A

INC DPTR

MOVX A,@DPTR

SUBB A ,R0

JNC LOOP

MOV A, R0

INC DPTR

MOVX @DPTR ,A

RET

LOOP:INC DPTR

MOVX @DPTR ,A

RET

17.将内部RAM 40H开始的10个单元,搬移到50H开始的10个单元中。

MOV R0,#40H

MOV R1,#50H

MOV R2, #10

LOOP1:MOV A, @R0

MOV @R1,A

INC R0

INC R1

DJNZ R2 ,LOOP1

RET

18. 设单片机晶振频率为6MHz,使用定时器0,以工作方式2,在P1.5引脚输出一个周期为200us连续方波?

解: MOV TMOD,#02H

MOV TH0, #0CEH

MOV TL0 ,#0CEH

SETB TR0

LOOP: JBC TF0,LOOP1

AJMP LOOP

LOOP1: CPL P1.0

19. 编写一段程序,功能要求为:当P1.0引脚的电平正跳变时,对P1.1的输入脉冲进行计数;当P1.2引脚的电平负跳变时,停止计数,并将计数值写入R0、R1(高位存R1,低位存R0)。

答:将P1.1的输入脉冲接入INT0,即使用T0计数器完成对P1.1口的脉冲计数。编写程序如下:

ORG 0000H

LJMP MAIN

ORG 000BH

LJMP IT0P

MAIN: JNB P1.0,MAIN

MOV TMOD,#05H ;定时器/计数器T0为计数方式1

SETB TR0 ;启动T0,开始计数

SETB ET0 ;允许T0中断

SETB EA ;CPU开中断

WAIT: JB P1.2,WAIT

CLR EA

CLR TR0

MOV R1,TH0

MOV R0,TL0

AJMP $

IT0P: INC R2

RETI

20.试编写一个程序(例如将05H和06H拼为56H),设原始数据放在片外数据区2001H单元和2002H单元中,按顺序拼装后的单字节数放入2002H。

答:编程思路:首先读取2001H的值,保存在寄存器A中,将寄存器A 的高四位和低四位互换,再屏蔽掉低四位然后将寄存器A的值保存到30H中,然后再读取2002H的值,保存在寄存器A中,屏蔽掉高四位,然后将寄存器A的值与30H进行或运算,将运算后的结果保存在2002H中。

ORG 0000H

MAIN:MOV DPTR,#2001H ;设置数据指针的初值

MOVX A,@DPTR ;读取2001H的值

SWAP A

ANL A,#0F0H ;屏蔽掉低四位

MOV 30H,A ;保存A

INC DPTR ;指针指向下一个

MOVX A,@DPTR ;读取2002H的值

ANL A,#0FH ;屏蔽掉高四位

ORL A,30H ;进行拼装

MOVX @DPTR,A ;保存到2002H

END

21.编写程序,将外部数据存储器中的4000H—40FFH单元全部清零。

解:本题主要考察了对外部数据块的写操作;编程时只要注意循环次数和MOVX 指令的使用就可以了。

ORG 0000H

MAIN: MOV A,#0 ;送预置数给A

MOV R0,#0FFH ;设置循环次数

MOV DPTR,#4000H ;设置数据指针的初值

LOOP: MOVX @DPTR,A ;当前单元清零

INC DPTR ;指向下一个单元

DJNZ R0,LOOP ;是否结束

END

22.编写程序,采用8255A的C口按位置位/复位控制字,将PC7置0,PC4置1,(已知8255A各端口的地址为7FFCH-7FFFH)。

解:本题主要考察对8255A的C口的操作。其方式控制字的高位为0时,低四位对C口进行置位。由题目我们得到了方式控制字的地址为7FFFH。

ORG 0000H

MAIN: MOV DPTR,#7FFFH ;控制字寄存器地址送DPTR

MOV A,#0EH ;将PC7置0

MOVX @DPTR,A

MOV A,#09H ;将PC4置1

MOVX @DPTR,A

END

23.试编写逻辑运算程序,功能为:

F=X(Y+Z);

F=XYZ

其中F X Y Z均为位变量,依次存在以30H为首址的位寻址区中。

解(1):

F BIT 30H

X BIT 31H

Y BIT 32H

Z BIT 33H

LOG1:MOV C,Y ;Y→C

ORL C,Z ;(Y+Z)→C

ANL C,X ;X(Y+Z)→C

MOV F,C ;X(Y+Z)→F

RET ;

解(2):

LOG2:MOV C,Y ;Y→C

ANL C,Z ;YZ→C

ANL C,/X ;XYZ→C

CPL C ;XYZ→C

MOV F,C ;XYZ→F

RET ;

24.试编写程序,统计内RAM 30H~50H单元中FFH的个数,并将统计结果存51H。解:编程如下:

LOKF:MOV 51H,#0 ;计数器清零

MOV R0,#30H ;置数据区首址

LOP: MOV A,@R0 ;读数据

CPL A ;取反

JNZ LP1 ;判FFH,非FFH,转

INC 51H ;FFH,计数

LP1: INC RO ;指向下一数据

CJNE R0,#51H,LOP;判循环

RET

25.试编写程序,找出外RAM 2000H~200FH数据区中的最小值,并放入R2中。解:编程如下:

SECH:MOV DPTR,#2000H ;置外RAM数据区首址

MOV R2,#OFH ;置外RAM数据区长度(N-1)

MOVX A,@DPTR ;读第一个数据

MOV B,A ;假设第一个数据为最小值

SLOP:INC DPTR ;指向下一个数据

MOVX A,@DPTR ;读下一个数据

CJNE A,B,SLP1 ;新数据与最小值比较

SLP1:JNC SLP2 ;新数据≥最小值,判断循环

MOV B,A ;新数据<最小值,新数据→B

SLP2:DJNZ R2,SLOP ;判循环结束否?

MOV R2,B ;最小值→R2

RET

26.已知ROM中存有0~100的平方表,首地址为TABDS,试根据累加器A(≤100)中的数值查找对应的平方值,存入内RAM31H30H(双字节)。

解:编程如下:

DSQR:MOV DPTR,#TABDS ;置ROM平方表首地址

ADD A,Acc ;A×2→A

MOVC A, @A+DPTR ;读平方值高8位

MOV 31H,A ;平方值高8位→31H

INC A ;指向平方值低8位

MOVC A,@A+DPTR ;读平方值低8位

MOV 30H,A ;平方值低8位→30H

RET

TABDS:DW 0,0,0,1,0,4,0,9,0,16,0,25,…,27H,10H;0~100平方表(双字节)

27.试编程实现3字节无符号数加法:R7R6R5+R4R3R2→@R0(3个连续单元)。解:编程如下:

ADD3: MOV A,R5

ADD A,R2 ;低位加

MOV @R0,A ;存低位和

INC R0 ;修改存储单元

MOV A,R6 ;

ADDC A,R3 ;中位加

MOV @R0,A ;存中位和

INC R0 ;修改存储单元

MOV A,R7 ;

ADDC A,R7 ;高位加

MOV @R0,A ;存高位和

RET

28.试编写程序,将外部RAM2000H~20FH数据块,传送到3000H~30FFH区域。解:编程如下:

DMOV:MOV DPTR,#2000H ;置源数据区首址

MOV R2,#00H ;置数据长度(256个)

DLOP:MOVX A,@DPTR ;读数据

MOV DPH,#30H ;置目的数据区高8位地址

MOVX @DPTR,A ;存数据

MOV DPH,#20H ;置源数据区高8位地址

INC DPTR ;修改源数据区地址

DJNZ R2,DLOP ;判循环结束否?

RET

29.从内RAM20H单元开始存有一组带符号数(补码),其个数已存放在1FH单元。要求统计其中大于0,等于0和小于0的数的个数,并把统计结果分别存入ONE,TWO,THREE3个单元。

解:编程如下:

ONE EQU 30H

TWO EQU 31H

THREE EQU 32H

STOR:MOV R0,#20H ;置数据区首址

SLOP: MOV A,@R0 ;读数据

JZ LP1 ;数据=0,转

JB Acc.7,LP2 ;数据<0,转

INC ONE ;数据>0,ONE单元加1

LP0: INC RO ;指向下一数据

DJNZ 1FH,SLOP ;判统计结束否?未结束循环

RET ;统计结束,TWO单元加1

LP1: INC TWO ;数据=0,TWO单元加1

SJMP LPO ;返回循环体

LP2: INC THREE ;数据<0,THREE单元加1

SJMP LPO ;返回循环体

30.设在内部数据存储器中存放有20个字节数据,其起始地址为M。试编写程序,找出数0AH的存放地址,并送入N单元。若OAH不存在,则将N单元清零。解:程序如下:

M EQU 30H

N EQU 2FH

SECH:MOV R0,#M

MOV R1,#20

LOOP:CJNE @R0,#0AH,LP1

MOV N,R0

RET

LP1: INC R0

DJNZ R1,LOOP

MOV N,#0

RET

31.试编写程序,求出内RAM20H单元中“1”的个数,并将结果存入21H单元。解:编程如下:

LOK1:MOV 21H,#O

MOV R2,#08H

MOV A,20H

LOP: RLC A

JNC LP1

JNC 21H

LP1:DJNE R2,LOP

RET

32.试编写统计数据区长度的程序,设数据区从内RAM30H开始,该数据区以0结束,统计结果送入2FH中。

解:编程如下:

ADUP:MOV 2FH,#0

MOV R0,#30H

ALOP:MOV A,@R0

JNZ LP1

RET

LP1: INC 2FH

INC R0

SJMP ALOP

33.从内RAM30H单元开始存放着一组无符号数,其个数存在21H单元中。试编写程序,找出其中最小的数,并将其存入20H单元中。

解:编程如下:

SECH: MOV RO,#3OH

MOV 20H,#FFH

SLOP: MOV A,@R0

CJNE A,20H,NEXT

NEXT: JNC SLP1

MOV 20H,A

SLP1: INC R0

DJNZ 21H,SLOP

RET

34.用程序实现c=a2+b2。设a2b2存于内RAM,AA,BB单元;c为双字节,存于内RAMCC,DD单元。

解:该题可用于程序来实现。通过两次调用查平方表子程序来得到a和b,并在主程序中完成相加。编程如下:

AA EQU 40H

BB EQU 41H

CC EQU 42H

DD EQU 43H

FUNC:MOV A,AA

LCALL DSQR

MOV DD,A

MOV CC,31H

MOV A,BB

LCALL DSQR

ADD A,DD

MOV DD,A

ADDC A,CC

MOV CC,A

RET

35.利用定时、计数器T1测量某正脉冲宽度,并存入内RAM31H30H。设fosc=12MHz,脉冲从P3.3引脚输入,宽度小于65536us。

解:编程如下:

PLUS: MOV TMOD,#90H

MOV TH1,#0

MOV TL1,#0

JB P3.3,$

SETB TR1

JNB P3.3,$

JB P3.3,$

CLR TR1

MOV 31H,THO

MOV 30H,TLO

RET

36. 设在内部RAM中50H开始有连续的10个单元,求这10个单元之和,结果放在60H,61H,低位放在60H,高位在61H.

解:程序编写如下:

ORG 0000H

ACALL ADDTEN

WAIT: AJMP WAIT

ADDTEN:MOV R0 ,50H

MOV R1,#10

MOV A,#00H

MOV 60H, A

MOV 61H, A

LOOP1:ADD A, @R0

INC R0

MOV 60H,A

JC LOOP2

DJNZ R1,LOOP1

RET

LOOP2:

MOV A,61H;

ADD A,#01H

DJNZ R1 ,LOOP1

RET

END

51单片机汇编程序范例

16位二进制数转换成BCD码的的快速算法-51单片机2010-02-18 00:43在做而论道上篇博文中,回答了一个16位二进制数转换成BCD码的问题,给出了一个网上广泛流传的经典转换程序。 程序可见: http: 32.html中的HEX2BCD子程序。 .说它经典,不仅是因为它已经流传已久,重要的是它的编程思路十分清晰,十分易于延伸推广。做而论道曾经利用它的思路,很容易的编写出了48位二进制数变换成16位BCD码的程序。 但是这个程序有个明显的缺点,就是执行时间太长,转换16位二进制数,就必须循环16遍,转换48位二进制数,就必须循环48遍。 上述的HEX2BCD子程序,虽然长度仅仅为26字节,执行时间却要用331个机器周期。.单片机系统多半是用于各种类型的控制场合,很多时候都是需要“争分夺秒”的,在低功耗系统设计中,也必须考虑因为运算时间长而增加系统耗电量的问题。 为了提高整机运行的速度,在多年前,做而论道就另外编写了一个转换程序,程序的长度为81字节,执行时间是81个机器周期,(这两个数字怎么这么巧!)执行时间仅仅是经典程序的!.近来,在网上发现了一个链接: ,也对这个经典转换程序进行了改进,话是说了不少,只是没有实质性的东西。这篇文章提到的程序,一直也没有找到,也难辩真假。 这篇文章好像是选自某个著名杂志,但是在术语的使用上,有着明显的漏洞,不像是专业人员的手笔。比如说文中提到的:

“使用51条指令代码,但执行这段程序却要耗费312个指令周期”,就是败笔。51条指令代码,真不知道说的是什么,指令周期是因各种机型和指令而异的,也不能表示确切的时间。 .下面说说做而论道的编程思路。;----------------------------------------------------------------------- ;已知16位二进制整数n以b15~b0表示,取值范围为0~65535。 ;那么可以写成: ; n = [b15 ~ b0] ;把16位数分解成高8位、低8位来写,也是常见的形式: ; n = [b15~b8] * 256 + [b7~b0] ;那么,写成下列形式,也就可以理解了: ; n = [b15~b12] * 4096 + [b11~b0] ;式中高4位[b15~b12]取值范围为0~15,代表了4096的个数; ;上式可以变形为: ; n = [b15~b12] * 4000 + {[b15~b12] * (100 - 4) + [b11~b0]} ;用x代表[b15~b12],有: ; n =x * 4000 + {x * (100 - 4) + [b11~b0]} ;即: ; n =4*x (千位) + x (百位) + [b11~b0] - 4*x ;写到这里,就可以看出一点BCD码变换的意思来了。 ;;上式中后面的位:

51单片机汇编指令速查表

51单片机汇编指令速查表 指令格式功能简述字节数周期 一、数据传送类指令 MOV A, Rn 寄存器送累加器 1 1 MOV Rn,A 累加器送寄存器 1 1 MOV A ,@Ri 内部RAM单元送累加器 1 1 MOV @Ri ,A 累加器送内部RAM单元 1 1 MOV A ,#data 立即数送累加器 2 1 MOV A ,direct 直接寻址单元送累加器 2 1 MOV direct ,A 累加器送直接寻址单元 2 1 MOV Rn,#data 立即数送寄存器 2 1 MOV direct ,#data 立即数送直接寻址单元 3 2 MOV @Ri ,#data 立即数送内部RAM单元 2 1 MOV direct ,Rn 寄存器送直接寻址单元 2 2 MOV Rn ,direct 直接寻址单元送寄存器 2 2 MOV direct ,@Ri 内部RAM单元送直接寻址单元 2 2 MOV @Ri ,direct 直接寻址单元送内部RAM单元 2 2 MOV direct2,direct1 直接寻址单元送直接寻址单元 3 2 MOV DPTR ,#data16 16位立即数送数据指针 3 2 MOVX A ,@Ri 外部RAM单元送累加器(8位地址) 1 2 MOVX @Ri ,A 累加器送外部RAM单元(8位地址) 1 2 MOVX A ,@DPTR 外部RAM单元送累加器(16位地址) 1 2 MOVX @DPTR ,A 累加器送外部RAM单元(16位地址) 1 2 MOVC A ,@A+DPTR 查表数据送累加器(DPTR为基址) 1 2 MOVC A ,@A+PC 查表数据送累加器(PC为基址) 1 2 XCH A ,Rn 累加器与寄存器交换 1 1 XCH A ,@Ri 累加器与内部RAM单元交换 1 1 XCHD A ,direct 累加器与直接寻址单元交换 2 1 XCHD A ,@Ri 累加器与内部RAM单元低4位交换 1 1 SWAP A 累加器高4位与低4位交换 1 1 POP direct 栈顶弹出指令直接寻址单元 2 2 PUSH direct 直接寻址单元压入栈顶 2 2 二、算术运算类指令 ADD A, Rn 累加器加寄存器 1 1

51单片机汇编指令集(附记忆方法)

51单片机汇编指令集 一、数据传送类指令(7种助记符) MOV(英文为Move):对内部数据寄存器RAM和特殊功能寄存器SFR的数据进行传送; MOVC(Move Code)读取程序存储器数据表格的数据传送; MOVX (Move External RAM) 对外部RAM的数据传送; XCH (Exchange) 字节交换; XCHD (Exchange low-order Digit) 低半字节交换; PUSH (Push onto Stack) 入栈; POP (Pop from Stack) 出栈; 二、算术运算类指令(8种助记符) ADD(Addition) 加法; ADDC(Add with Carry) 带进位加法; SUBB(Subtract with Borrow) 带借位减法; DA(Decimal Adjust) 十进制调整; INC(Increment) 加1; DEC(Decrement) 减1; MUL(Multiplication、Multiply) 乘法; DIV(Division、Divide) 除法; 三、逻辑运算类指令(10种助记符) ANL(AND Logic) 逻辑与; ORL(OR Logic) 逻辑或; XRL(Exclusive-OR Logic) 逻辑异或; CLR(Clear) 清零; CPL(Complement) 取反; RL(Rotate left) 循环左移; RLC(Rotate Left throught the Carry flag) 带进位循环左移; RR(Rotate Right) 循环右移; RRC (Rotate Right throught the Carry flag) 带进位循环右移; SWAP (Swap) 低4位与高4位交换; 四、控制转移类指令(17种助记符) ACALL(Absolute subroutine Call)子程序绝对调用; LCALL(Long subroutine Call)子程序长调用; RET(Return from subroutine)子程序返回; RETI(Return from Interruption)中断返回; SJMP(Short Jump)短转移; AJMP(Absolute Jump)绝对转移; LJMP(Long Jump)长转移; CJNE (Compare Jump if Not Equal)比较不相等则转移;

51单片机汇编语言

51单片机汇编语言 a)单个与多个LED灯,位操作与字节操作—输出 ORG 0000H START: CLR C MOV P0.0,C MOV P1.1,C MOV P2.2,C MOV P3.3,C CLR A

CPL A MOV P0,A MOV P1,A MOV P2,A MOV P3,A END 程序说明: 可以用7段数码管来代替各端口的8个LED灯,硬件的这种显示方式使得数字表达成为实用。数字显示由数码管的硬件结构与工作原理(7个LED灯的几何变形组合)和数字表达的数据格式确定。 如: 共阳极数码管显示数字3,则有P1口送数据#4FH;MOVP1, #0B0H 共阴极数码管显示数字8,则有P1口送数据#80H;MOVP1, #7F H 用数据表表示则有: TABshuziyang: //阳极管(共阴极管取反即可) DB(数字0~F) C0H,F9H,A4H,B0H,99H,92H,82H,F8H,80H,90H,88H,83H,C 6H,A1H,86H,8EH

TABshuziyin: //阴极管(共阳极管取反即可) DB(数字0~F) 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,3 9H,5EH,79H,71H b)单个与多个LED灯闪烁—延时子程序—注意定时器 前边已经看到,通过改变位或字节的赋值,可以使得LED灯亮或灭,以此形成闪烁效果。但是硬件的响应时间太短,使得效果不佳。虽然可以通过改变单片机的时钟设置来改变效果。但时钟的改变极其不方便,因此需要利用延时指令(注意定时器功能)获得理想的效果。延时效果是利用单片机空转来实现的。 ACALLDELAY;调延时子程序 ************************************************* ************************

51单片机汇编语言教程:13课单片机逻辑与或异或指令详解

51单片机汇编语言教程:第13课-单片机逻辑与或异或指令详解

结果11111001 而所有的或指令,就是将与指仿中的ANL换成ORL,而异或指令则是将ANL换成XRL。即或指令: ORL A,Rn;A和Rn中的值按位'或',结果送入A中 ORL A,direct;A和与间址寻址单元@Ri中的值按位'或',结果送入A中 ORL A,#data;A和立direct中的值按位'或',结果送入A中 ORL A,@Ri;A和即数data按位'或',结果送入A中 ORL direct,A;direct中值和A中的值按位'或',结果送入direct中 ORL direct,#data;direct中的值和立即数data按位'或',结果送入direct中。 异或指令: XRL A,Rn;A和Rn中的值按位'异或',结果送入A中 XRL A,direct;A和direct中的值按位'异或',结果送入A中 XRL A,@Ri;A和间址寻址单元@Ri中的值按位'异或',结果送入A中 XRL A,#data;A和立即数data按位'异或',结果送入A中 XRL direct,A;direct中值和A中的值按位'异或',结果送入direct中 XRL direct,#data;direct中的值和立即数data按位'异或',结果送入direct中。 练习: MOV A,#24H MOV R0,#37H ORL A,R0 XRL A,#29H MOV35H,#10H ORL35H,#29H MOV R0,#35H ANL A,@R0 四、控制转移类指令 无条件转移类指令 短转移类指令 AJMP addr11 长转移类指令

51单片机常用汇编语言助记符英文全称

51单片机常用汇编语言助记符英文全称 (1)数据传送类指令(7种助记符) MOV(英文为Move):对内部数据寄存器RAM和特殊功能寄存器SFR的数据进行传送;MOVC(Move Code)读取程序存储器数据表格的数据传送; MOVX (Move External RAM) 对外部RAM的数据传送; XCH (Exchange) 字节交换; XCHD (Exchange low-order Digit) 低半字节交换; PUSH (Push onto Stack) 入栈; POP (Pop from Stack) 出栈; (2)算术运算类指令(8种助记符) ADD(Addition) 加法; ADDC(Add with Carry) 带进位加法; SUBB(Subtract with Borrow) 带借位减法; DA(Decimal Adjust) 十进制调整; INC(Increment) 加1;DEC(Decrement) 减1; MUL(Multiplication、Multiply) 乘法; DIV(Division、Divide) 除法; (3)逻辑运算类指令(10种助记符) ANL(AND Logic) 逻辑与; XRL(Exclusive-OR Logic) 逻辑异或; CLR(Clear) 清零;CPL(Complement) 取反; RL(Rotate left) 循环左移; RLC(Rotate Left throught the Carry flag) 带进位循环左移; RR(Rotate Right) 循环右移; RRC (Rotate Right throught the Carry flag) 带进位循环右移; SWAP (Swap) 低4位与高4位交换; (4)控制转移类指令(17种助记符) ACALL(Absolute subroutine Call)子程序绝对调用;

51单片机经典编辑流水灯汇编程序

单片机流水灯汇编程序设计 流水灯汇编程序 8只LED为共阳极连接,即单片机输出端为低电平时即可点亮LED。 ;用最直接的方式实现流水灯 ORG 0000H START:MOV P1,#01111111B ;最下面的LED点亮 LCALL DELAY ;延时1秒 MOV P1,#10111111B ;最下面第二个的LED点亮 LCALL DELAY ;延时1秒 MOV P1,#11011111B ;最下面第三个的LED点亮(以下省略) LCALL DELAY MOV P1,#11101111B LCALL DELAY MOV P1,#11110111B LCALL DELAY MOV P1,#11111011B LCALL DELAY MOV P1,#11111101B LCALL DELAY MOV P1,#11111110B LCALL DELAY MOV P1,#11111111B ;完成第一次循环点亮,延时约0.25秒 AJMP START ;反复循环 ;延时子程序,12M晶振延时约250毫秒 DELAY: ;大约值:2us*256*256*2=260ms,也可以认为为250ms PUSH PSW ;现场保护指令(有时可以不加) MOV R4,#2 L3: MOV R2 ,#00H L1: MOV R3 ,#00H L2: DJNZ R3 ,L2 ;最内层循环:(256次)2个周期指令(R3减一,如果比1大,则转向L2) DJNZ R2 ,L1 ; 中层循环:256次 DJNZ R4 ,L3 ;外层循环:2次 POP PSW RET END

51单片机汇编程序集(二) 2008年12月12日星期五 10:27 辛普生积分程序 内部RAM数据排序程序(升序) 外部RAM数据排序程序(升序) 外部RAM浮点数排序程序(升序) BCD小数转换为二进制小数(2位) BCD小数转换为二进制小数(N位) BCD整数转换为二进制整数(1位) BCD整数转换为二进制整数(2位) BCD整数转换为二进制整数(3位) BCD整数转换为二进制整数(N位) 二进制小数(2位)转换为十进制小数(分离BCD码) 二进制小数(M位)转换为十进制小数(分离BCD码) 二进制整数(2位)转换为十进制整数(分离BCD码) 二进制整数(2位)转换为十进制整数(组合BCD码) 二进制整数(3位)转换为十进制整数(分离BCD码) 二进制整数(3位)转换为十进制整数(组合BCD码) 二进制整数(M位)转换为十进制整数(组合BCD码) 三字节无符号除法程序(R2R3R4/R7)=(R2)R3R4 余数R7 ;二进制整数(2位)转换为十进制整数(分离BCD码) ;入口: R3,R4 ;占用资源: ACC,R2,NDIV31 ;堆栈需求: 5字节 ;出口: R0,NCNT IBTD21 : MOV NCNT,#00H MOV R2,#00H IBD211 : MOV R7,#0AH LCALL NDIV31 MOV A,R7 MOV @R0,A INC R0 INC NCNT MOV A,R3 ORL A,R4 JNZ IBD211 MOV A,R0 CLR C SUBB A,NCNT MOV R0,A RET ;二进制整数(2位)转换为十进制整数(组合BCD码) ;入口: R3,R4 ;占用资源: ACC,B,R7 ;堆栈需求: 3字节

51单片机汇编指令集(附记忆方法)

51 单片机汇编指令集 一、数据传送类指令( 7 种助记符) MOV(英文为Move :对内部数据寄存器RAM 和特殊功能寄存器SFR 的数据进行 传送; MOV Q Move Code )读取程序存储器数据表格的数据传送; MOVX (Move External RAM) 对外部 RAM 勺数据传送; XCH (Exchange) 字节交换; XCHD (Exchange low-order Digit) 低半字节交换; PUSH (Push onto Stack) 入栈; POP (Pop from Stack) 出栈; 二、算术运算类指令( 8 种助记符) ADD(Addition) 加法; ADDC(Add with Carry) 带进位加法; SUBB(Subtract with Borrow) 带借位减法; DA(Decimal Adjust) 十进制调整; INC(Increment) 加 1; DEC(Decrement) 减 1; MUL(Multiplication 、Multiply) 乘法; DIV(Division 、Divide) 除法; 三、逻辑运算类指令( 10 种助记符) ANL(AND Logic) 逻辑与; ORL(OR Logic) 逻辑或; XRL(Exclusive-OR Logic) 逻辑异或; CLR(Clear) 清零; CPL(Complement) 取反; RL(Rotate left) 循环左移; RLC(Rotate Left throught the Carry flag) RR(Rotate Right) 循环右移; RRC (Rotate Right throught the Carry flag) SWAP (Swap) 低 4 位与高 4 位交换; 四、控制转移类指令( 17 种助记符) ACALL ( Absolute subroutine Call )子程序绝对调用; LCALL ( Long subroutine Call )子程序长调用; RET ( Return from subroutine )子程序返回; RETI ( Return from Interruption )中断返回; SJMP ( Short Jump )短转移; AJMP ( Absolute Jump )绝对转移; LJMP( Long Jump )长转移; CJNE (Compare Jump if Not Equal) 比较不相等则转移; DJNZ (Decreme nt Jump if Not Zero) 减1后不为0则转移; JZ (Jump if Zero) 结果为0则转移; JNZ (Jump if Not Zero) 结果不为0则转移; JC (Jump if the Carry flag is set) 有进位则转移; JNC (Jump if Not Carry) 无进位则转移; JB (Jump if the Bit is set) 位为1则转移; JNB (Jump if the Bit is Not set) 位为0则转移; 带进位循环左移; 带进位循环右移;

快速入门单片机大全语言

快速入门单片机汇编语言 简要: 单片机有通用型和专用型之分。专用型是厂家为固定程序的执行专门开发研制的一种单片机,其程序不可更改。通用型单片机是常用的一种供学习或自主编制程序的单片机,其程序需要自己写入,可更改。单片机根据其基本操作处理位数不同可以分为:1位、4位、8位、16、32位单片机。 正文: 在此我们主要讲解美国ATMEL公司的89C51单片机。 一、89C51单片机PDIP(双列直插式)封装引脚图: 其引脚功能如下: P0口(—):为双向三态口,可以作为输入/输出口。但在实际应用中通常作为地址/数据总线口,即为低8位地址/数据总线分时复用。低8位地址在ALE信号的负跳变锁存到外部地址锁存器中,而高8位地址由P2口输出。 P1口(—):其每一位都能作为可编程的输入或输出线。 P2口(—):每一位也都可作为输入或输出线用,当扩展系统外设时,可作为扩展系统的地址总线高8位,与P0口一起组成16位地址总线。对89c51单片机来说,P2口一般只作为地址总线使用,而不作为I/O线直接与外设相连。 P3口(—):其为双功能口,作为第一功能使用时,其功能与P1口相同。当作为第二功能使用时,每一位功能如下表所示。 XTAL1(xtal2):外接晶振一脚,分别接晶振的一端。 Gnd:电源地。 Vcc:电源正级,接+5V。 PROG\ALE:地址锁存控制端 PSEN:片外程序存储器读选通信号输出端,低电平有效。 EA\vpp:访问外部程序储存器控制信号,低电平有效。当EA为高电平时访问片内存储器,若超出范围则自动访问外部程序存储器。当EA为低电平时只访问外部程序存储器。 二、常用指令及其格式介绍: 1、指令格式:

(完整版)51单片机汇编指令(全)

指令中常用符号说明 Rn当前寄存器区的8个工作寄存器R0~R7(n=0~7) Ri当前寄存器区可作为地址寄存器的2个工作寄存器R0和R1(i=0,1) Direct8位内部数据寄存器单元的地址及特殊功能寄存器的地址 #data表示8位常数(立即数) #data16表示16位常数 Add16表示16位地址 Addr11表示11位地址 Rel8位代符号的地址偏移量 Bit表示位地址 @间接寻址寄存器或基址寄存器的前缀 ( )表示括号中单元的内容 (( ))表示间接寻址的内容 指令系统 数据传送指令(8个助记符) 助记符中英文注释 MOV Move 移动 MOV A , Rn;Rn→A,寄存器Rn的内容送到累加器A MOV A , Direct;(direct)→A,直接地址的内容送A MOV A ,@ Ri;(Ri)→A,RI间址的内容送A MOV A , #data;data→A,立即数送A MOV Rn , A;A→Rn,累加器A的内容送寄存器Rn MOV Rn ,direct;(direct)→Rn,直接地址中的内容送Rn MOV Rn , #data;data→Rn,立即数送Rn MOV direct , A;A→(direct),累加器A中的内容送直接地址中 MOV direct , Rn;(Rn)→direct,寄存器的内容送到直接地址 MOV direct , direct;(direct)→direct,直接地址的内容送到直接地址 MOV direct , @Ri;((Ri))→direct,间址的内容送到直接地址 MOV direct , #data;8位立即数送到直接地址中 MOV @Ri , A;(A)→@Ri,累加器的内容送到间址中 MOV @Ri , direct;direct→@Ri,直接地址中的内容送到间址中 MOV @Ri , #data; data→@Ri ,8位立即数送到间址中 MOV DPTR , #data16;data16→DPTR,16位常数送入数据指针寄存器,高8位送入DPH,低8位送入DPL中(单片机中唯一一条16位数据传送指令) (MOV类指令共16条)

51单片机初学者学习必须用到的汇编和C语言的例子

1.闪烁灯 1.实验任务 如图4.1.1所示:在P1.0端口上接一个发光二极管L1,使L1在不停地一亮一灭,一亮一灭的时间间隔为0.2秒。 2.电路原理图 图4.1.1 3.系统板上硬件连线 把“单片机系统”区域中的P1.0端口用导线连接到“八路发光二极管指示模块”区域中的L1端口上。 4.程序设计内容 (1).延时程序的设计方法 作为单片机的指令的执行的时间是很短,数量大微秒级,因此,我们要 求的闪烁时间间隔为0.2秒,相对于微秒来说,相差太大,所以我们在 执行某一指令时,插入延时程序,来达到我们的要求,但这样的延时程 序是如何设计呢?下面具体介绍其原理:

如图4.1.1所示的石英晶体为12MHz,因此,1个机器周期为1微秒机器周期微秒 MOV R6,#20 2个机器周期 2 D1: MOV R7,#248 2个机器周期 2 2+2×248=498 20× DJNZ R7,$ 2个机器周期2×248 498 DJNZ R6,D1 2个机器周期2×20=40 10002 因此,上面的延时程序时间为10.002ms。 由以上可知,当R6=10、R7=248时,延时5ms,R6=20、R7=248时, 延时10ms,以此为基本的计时单位。如本实验要求0.2秒=200ms, 10ms×R5=200ms,则R5=20,延时子程序如下: DELAY: MOV R5,#20 D1: MOV R6,#20 D2: MOV R7,#248 DJNZ R7,$ DJNZ R6,D2 DJNZ R5,D1 RET (2).输出控制 如图1所示,当P1.0端口输出高电平,即P1.0=1时,根据发光二极管 的单向导电性可知,这时发光二极管L1熄灭;当P1.0端口输出低电平, 即P1.0=0时,发光二极管L1亮;我们可以使用SETB P1.0指令使P1.0 端口输出高电平,使用CLR P1.0指令使P1.0端口输出低电平。 5.程序框图 如图4.1.2所示

51单片机串行口汇编语言教程

51单片机汇编语言教程:22课:单片机串行口通信程序设计 1.串行口方式0应用编程8051单片机串行口方式0为移位寄存器方式,外接一个串入并出的移位寄存器,就能扩展一个并行口。 <单片机串行口通信程序设计硬件连接图> 例:用8051单片机串行口外接CD4094扩展8位并行输出口,如图所示,8位并行口的各位都接一个发光二极管,要求发光管呈流水灯状态。串行口方式0的数据传送可采用中断方式,也可采用查询方式,无论哪种方式,都要借助于TI或RI标志。串行发送时,能靠TI置位(发完一帧数据后)引起中断申请,在中断服务程序中发送下一帧数据,或者通过查询TI的状态,只要TI为0就继续查询,TI为1就结束查询,发送下一帧数据。在串行接收时,则由RI引起中断或对RI查询来确定何时接收下一帧数据。无论采用什么方式,在开始通信之前,都要先对控制寄存器SCON进行初始化。在方式0中将,将00H送SCON 就能了。 -----------------单片机串行口通信程序设计列子-------------------------- ORG 2000H START: MOV SCON,#00H ;置串行口工作方式0 MOV A,#80H ;最高位灯先亮 CLR P1.0 ;关闭并行输出(避象传输过程中,各LED的"暗红"现象) OUT0: MOV SBUF,A ;开始串行输出 OUT1: JNB TI,OUT1 ;输出完否 CLR TI ;完了,清TI标志,以备下次发送 SETB P1.0 ;打开并行口输出 ACALL DELAY ;延时一段时间 RR A ;循环右移 CLR P1.0 ;关闭并行输出 JMP OUT0 ;循环 说明:DELAY延时子程序能用前面我们讲P1口流水灯时用的延时子程序,这里就不给出

51单片机汇编指令

按功能分为五大类: (1)数据传送类指令(7种助记符) MOV(Move)对内部数据寄存器RAM和特殊功能寄存器SFR的数据进行传送;MOVC(Move Code)读取程序存储器数据表格的数据传送; MOVX (Move External RAM) 对外部RAM的数据传送; XCH (Exchange) 字节交换; XCHD (Exchange low-order Digit) 低半字节交换; PUSH (Push onto Stack) 入栈; POP (Pop from Stack) 出栈; (2)算术运算类指令(8种助记符) ADD(Addition) 加法; ADDC(Add with Carry) 带进位加法; SUBB(Subtract with Borrow) 带借位减法; DA(Decimal Adjust) 十进制调整; INC(Increment) 加1; DEC(Decrement) 减1; MUL(Multiplication、Multiply) 乘法; DIV(Division、Divide) 除法; (3)逻辑运算类指令(10种助记符) ANL(AND Logic) 逻辑与; ORL(OR Logic) 逻辑或; XRL(Exclusive-OR Logic) 逻辑异或; CLR(Clear) 清零; CPL(Complement) 取反; RL(Rotate left) 循环左移; RLC(Rotate Left throught the Carry flag) 带进位循环左移; RR(Rotate Right) 循环右移; RRC (Rotate Right throught the Carry flag) 带进位循环右移; SWAP (Swap) 低4位与高4位交换; (4)控制转移类指令(17种助记符) ACALL(Absolute subroutine Call)子程序绝对调用; LCALL(Long subroutine Call)子程序长调用; RET(Return from subroutine)子程序返回; RETI(Return from Interruption)中断返回; SJMP(Short Jump)短转移; AJMP(Absolute Jump)绝对转移; LJMP(Long Jump)长转移; CJNE (Compare Jump if Not Equal)比较不相等则转移; DJNZ (Decrement Jump if Not Zero)减1后不为0则转移; JZ (Jump if Zero)结果为0则转移; JNZ (Jump if Not Zero) 结果不为0则转移;

51单片机汇编程序2

§2.3.2软件结构及程序设计 一、主程序及其说明 ORG 0000H AJMP MAIN ;主程序 ORG 0003H AJMP X0S ;外部中断入口 ORG 000BH LJMP T0S ;定时器T0中断入口 ORG 001BH AJMP T1S ;定时器T1中断入口 ORG 0023H LJMP SSV ;串行中断入口 ORG 0030H MAIN: CLR EA MOV SP, #50H MOV A, 48H ;48H、49H单元为冷热启动标志单元 CJNE A, #0AAH, LRE ;如等于0AAH、55H,则说明为热启动 MOV A, 49H ;否则,为冷启动,则进行自检 CJNE A, #55H, LRE SJMP HRE LRE: LCALL ZJ ;冷启动,则自检 SETD: MOV 48H,#0AAH ;自检完后,设置为热启动标志字节 MOV 49H,#55H HRE: MOV A, P1 ;读判采样周期档位 ANL A, #0FH XRL A, #09H JZ M17 ;数据掉电保护故不进行采样,分析原数据 SJMP M18 M17: CLR P3.5 AJMP M19

M18: MOV R7, #00H ;非掉电保护方式,则将所有采样数据单元 MOV DPTR,#8020H ;清0 MOV R6, #00H MOV A, R6 M20: MOVX @DPTR,A INC R7 INC DPTR CJNE R7,#00H, M20 M21: MOV R7,#19H MOV DPTR, #8000H MOV A, #14H M1: MOVX @DPTR, A INC DPTR DJNZ R7,M1 SETB IT0 CLR P3.5 MOV TMOD,#11H M0: MOV A, P1 ANL A, #0FH JNZ M2 MOV TH0,#0FFH ;由T0设置采样周期 MOV TL0,#0F6H MOV 3EH,#02H AJMP M10 M2: JB ACC.3,M10 JB ACC.2,M8 JB ACC.1,M7 MOV TH0,#0FFH MOV TL0,#0CEH MOV 3EH,#00H

51单片机汇编语言教程:28课音乐程序设计

51单片机汇编语言教程:第28课-音乐程序设计

下面给出程序序清单,可直接在TD-III型学习机上演奏,对其它不一样型号的学习机,只需对应地改变一下地址即可。本程序演奏的是民歌“八月桂花遍地开”,C调,节奏为94拍/分。读者也能自行找出一首歌,按表1和表2给定的常数,将乐曲翻译成码表输入机器,而程序不变。本实验办法简便,即使不懂音乐的人,将一首陌生的曲子翻译成代码也是易事,和着机器的演奏学唱一首歌曲,其趣味无穷。 程序清单(略,请参看源程序的说明)。 程序框图如图2所示。 <单片机音乐程序的设计图> 本课由单片机教程网提供,有问题指出. 硬件连接说明: 随便找一个仿真机或者什么单片机实验板,只要能工作的就行,将程序输入,运行,然后找个音箱(你计算机旁边应当就有一对吧)拨出插头,插头的前端接在P1。0上,后面部分找根线接单片机的地,就应当有声了,然后怎么改进硬件连接就是你的事了。。。。 音乐程序汇编代码代码1-------------Voice.asm--------------------------ORG0000H

LJMP START ORG000BH INC20H;中断服务,中断计数器加1 MOV TH0,#0D8H MOV TL0,#0EFH;12M晶振,形成10毫秒中断 RETI START: MOV SP,#50H MOV TH0,#0D8H MOV TL0,#0EFH MOV TMOD,#01H MOV IE,#82H MUSIC0: NOP MOV DPTR,#DAT;表头地址送DPTR MOV20H,#00H;中断计数器清0 MOV B,#00H;表序号清0 MUSIC1: NOP CLR A MOVC A,@A+DPTR;查表取代码 JZ END0;是00H,则结束 CJNE A,#0FFH,MUSIC5 LJMP MUSIC3 MUSIC5: NOP MOV R6,A INC DPTR MOV A,B MOVC A,@A+DPTR;取节拍代码送R7

第3章-MCS-51系列单片机的指令系统和汇编语言程序范文

第3章MCS一51系列单片机的指令系统 和汇编语言程序 3·1汇编指令 3·1·1请阐明机器语言、汇编语言、高级语言三者的主要区别,进一步说明为什么这三种语言缺一不可。 3·1·2请总结: (1)汇编语言程序的优缺点和适用场合。 (2)学习微机原理课程时,为什么一定要学汇编语言程序? 3·1·3MCS一51系列单片机的寻址方式有哪儿种?请列表分析各种寻址方式的访问对象与寻址范围。 3·1·4要访问片内RAM,可有哪几种寻址方式? 3·1·5要访问片外RAM,有哪几种寻址方式? 3·1·6要访问ROM,又有哪几种寻址方式? 3·1·7试按寻址方式对MCS一51系列单片机的各指令重新进行归类(一般根据源操作数寻址方式归类,程序转移类指令例外)。 3·1·8试分别针对51子系列与52子系列,说明MOV A,direct指令与MOV A,@Rj 指令的访问范围。 3·1·9传送类指令中哪几个小类是访问RAM的?哪几个小类是访问ROM的?为什么访问ROM的指令那么少?CPU访问ROM多不多?什么时候需要访问ROM? 3·1·10试绘图示明MCS一51系列单片机数据传送类指令可满足的各种传送关系。3·1·11请选用指令,分别达到下列操作: (1)将累加器内容送工作寄存器R6. (2)将累加器内容送片内RAM的7BH单元。 (3)将累加器内容送片外RAM的7BH单元。 (4)将累加器内容送片外RAM的007BH单元。 (5)将ROM007BH单元内容送累加器。 3·1·12 区分下列指令的不同功能: (l)MOV A,#24H 与MOV A.24H (2)MOV A,R0与MOV A,@R0 (3)MOV A,@R0与MOVX A,@R0 3·1·13设片内RAM 30H单元的内容为40H; 片内RAM 40H单元的内容为l0H; 片内RAM l0H单元的内容为00H; (Pl)=0CAH。 请写出下列各指令的机器码与执行下列指令后的结果(指各有关寄存器、RAM单元与端口的内容)。 MOV R0,#30H MOV A,@R0 MOV RI,A MOV B,@Rl MOV @R0,Pl MOV P3,Pl MOV l0H,#20H MOV 30H,l0H

常用51单片机汇编指令

常用单片机汇编指令: 1 .MOV A,Rn寄存器内容送入累加器 2 .MOV A,direct 直接地址单元中的数据送入累加器 3 .MOV A,@Ri (i=0,1) 间接RAM中的数据送入累加器 4 .MOV A,#data 立即数送入累加器 5 .MOV Rn,A累加器内容送入寄存器 6 .MOV Rn,direct 直接地址单元中的数据送入寄存器 7 .MOV Rn,#data 立即数送入寄存器 8 .MOV direct,A 累加器内容送入直接地址单元 9 .MOV direct,Rn 寄存器内容送入直接地址单元 10. MOV direct,direct 直接地址单元中的数据送入另一个 直接地址单元 11 .MOV direct,@Ri (i=0,1) 间接RAM中的数据送入直接地址单元 12 MOV direct,#data 立即数送入直接地址单元 13 .MOV @Ri,A (i=0,1) 累加器内容送间接RAM单元 14 .MOV@Ri,direct (i=0,1)直接地址单元数据送入间接RAM 单元 15 .MOV @Ri,#data (i=0,1) 立即数送入间接RAM单元 16 .MOV DPTR,#data16 16 位立即数送入地址寄存器 17 .MOVC A,@A+DPTR以DPTR^基地址变址寻址单元中的数 据送入累加器

18 .MOVC A,@A+PC以PC为基地址变址寻址单元中的数据送入累加器 19 .MOVX A,@Ri (i=0,1) 外部RAM(8位地址)送入累加器 20 .MOVX A,@DPTR外部RAM(16位地址)送入累加器 21 .MOVX @Ri,A (i=0,1) 累计器送外部RAM(8位地址) 22 .MOVX @DPTR,A累计器送外部RAM( 16位地址) 23 .PUSH direct 直接地址单元中的数据压入堆栈 24 .POP direct 弹栈送直接地址单元 25 .XCH A,Rn 寄存器与累加器交换 26 .XCH A,direct 直接地址单元与累加器交换 27 .XCH A,@Ri (i=0,1) 间接RAM与累加器交换 28 .XCHD A,@Ri (i=0,1) 间接RAM的低半字节与累加器交换算术操作类指令: 1. ADD A,Rn 寄存器内容加到累加器 2 .ADD A,direct 直接地址单元的内容加到累加器 3 A.DD A,@Ri (i=0,1) 间接ROM的内容加到累加器 4 .ADD A,#data 立即数加到累加器 5 .ADDC A,Rn寄存器内容带进位加到累加器 6 .ADDC A,direct 直接地址单元的内容带进位加到累加器 7 .ADDC A,@Ri(i=0,1) 间接ROM的内容带进位加到累加器 8 .ADDC A,#data 立即数带进位加到累加器

汇编51单片机考试常见试题

汇编51单片机考试常见试题

一、填空题 1.单片机是把中央处理器、存储器、定时器/计数器以及I/O接口电路等主要计算机部件集成在一块集成电路芯片上的微型计算机。 2.除了单片机这一名称之外,单片机还可称为微控制器、嵌入式控制器。 3.计算机的系统总线有地址总线、控制总线和数据总线。 4.80C51单片机基本型内部RAM有 128 个字节单元,这些单元可以分为三个用途不同的区域,一是工作寄存器区、二是位寻址区、三是数据缓冲区。5.8051单片机有2 个16位定时/计数器。 6.单片机存储器的主要功能是存储程序和数据。80C51含4 KB掩膜ROM。7.80C51在物理上有4个独立的存储器空间。 8.通常、单片机上电复位时PC= 0000H,SP=07H;而工作寄存器则缺省采用第00 组,这组寄存器的地址范围是从00H~ 07H。 9.8051的堆栈是向地址的高端生成的。入栈时SP先加1,再压入数据。10.使用8031芯片时,需将/EA引脚接低电平,因为其片内无程序存储器。11.MCS-51特殊功能寄存器只能采用直接寻址方式。 12.汇编语言中可以使用伪指令,它们不是真正的指令,只是用来对汇编过程进行某种控制。 13.半导体存储器的最重要的两个指标是存储容量和存储速度。 14.当PSW4=1,PSW3=0时,工作寄存器Rn,工作在第2组。 15.在8051单片机中,由 2 个振荡(晶振)周期组成1个状态(时钟)周期,由 6个状态周期组成1个机器周期。 16.假定累加器A的内容30H,执行指令:1000H:MOVC A,@A+PC后,把程序存储器1031H单元的内容送累加器A中。 17.MCS-51单片机访问外部存储器时,利用ALE信号锁存来自P0口的低8位地址信号。 18.内部RAM中,位地址为30H的位,该位所在字节的字节地址为26H。19.若A中的内容为63H,那么,P标志位的值为0。 20.在基址加变址寻址方式中,以累加器A作变址寄存器,以DPTR或PC作基址寄存器。 21.指令格式是由操作码和操作数所组成,也可能仅由操作码组成。 22.通过堆栈操作实现子程序调用,首先就要把PC的内容入栈,以进行断点保护。调用返回时,再进行出栈保护,把保护的断点送回到PC。 23.MCS-51单片机程序存储器的寻址范围是由程序计数器PC的位数所决定的,因为MCS-51的PC是16位的,因此其寻址的范围为64KB。 24.在寄存器间接寻址方式中,其“间接”体现在指令中寄存器的内容不是操作数,而是操作数的地址。 25.假定累加器A中的内容为30H,执行指令1000H:MOVC A,@A+PC 后,把程序存储器1031H单元的内容送入累加器A中。 26.12根地址线可寻址4 KB存储单元。 27.:假定A=55H,R3=0AAH,在执行指令ANL A,R3后,A=00H,R3=0AAH。28.MCS-51的P0口作为输出端口时,每位能驱动8个LSTTL负载。 29.MCS-51有4个并行I/O口,其中P1~P3是准双向口,所以由输出转输入时必须先写入“1”。 30.MCS-51的堆栈是软件填写堆栈指针临时在片内数据存储器内开辟的区域。

相关主题
文本预览
相关文档 最新文档