51单片机实用汇编程序库(word)

合集下载

第三章MCS51单片机的指令系统和汇编语言程序示例(第5.

第三章MCS51单片机的指令系统和汇编语言程序示例(第5.

第三章MCS51单片机的指令系统和汇编语言程序示例(第5、6、7节)

1.试分析单片机执行下列指令后累加器A和PSW中各标志位的变化状况?

(1)MOV A,#19H

ADD A,#66H

(2)MOV A,#5AH

ADD A,#6BH

2.已知:A=85H,R0=30H,(30H)=11H, (31H)=0FFH,C=1,试计算单片机执行下列指令后累加器A和C中的值各是多少?

(1)ADDC A,R0, (2)ADDC A,31H

(3) ADDC A,@R0, (4) ADDC A,#85H

3.已知M1和M2中分别存放两个16位无符号数的低8位,M1+1和M2+1中分别存放两个16位无符号数的高8位,计算两数之和(低8位存放在M1,高8位存放在M1+1,设两数之和不超过16位)。

4.试分析单片机执行下列指令后累加器A和PSW中各标志位的变化状况?

CLR C

MOV A,#52H

SUBB A,#0B4H

5.已知:A=0DFH,R1=40H,R7=19H,(30H)=00H,(40H)=0FFH,试分析单片机执行下列指令后累加器A和PSW中各标志位的变化状况?

(1) DEC A (2) DEC R7 (3) DEC 30H (4) DEC @R1

6.试写出能完成85+59的BCD加法程序,并对工作过程进行分析。

7.已知:两个8位无符号乘数分别放在30H和31H单元中,编程实现他们乘积的低8位存放在32H,高8位存放在33H。

8.已知:R0=30H,(30H)=0AAH,试分析执行下列指令后累加器A和30H单元的内容是什么?

51单片机汇编语言程序设计

51单片机汇编语言程序设计

51单片机汇编语言程序设计

1.题目:数码管显示1~7

2.题目分析

本实验将要求51单片机采用汇编程序来实现以上程序,我们首先要对51单片机进行硬件电路设计,然后编写相应的汇编程序

3.硬件电路

4.程序设计

;-------------------------------------------------------------------------------

;选择P1口作为数码管位选

;-------------------------------------------------------------------------------

org 0h

mov p1,h ;启动P1作为数码管位选

again: m ov p2,Fh ;0000 0011 1111 显示数字1

sjmp again

mov p2,h ;0000 0110 显示数字2

sjmp again

mov p2,Bh ;0101 1011 显示数字3

sjmp again

mov p2,Fh ;0100 1111 显示数字4

sjmp again

mov p2,h ;0110 0110 显示数字5

sjmp again

mov p2,Dh ;0110 1101 显示数字6

sjmp again

mov p2,dh ;0111 1101 显示数字7

sjmp again

end

5.程序流程

本汇编程序的程序流程如下:

1)将P1口设置为数码管的位选;

2)通过P2口设置相应的数字,P2口的值将会根据数字的不同而不同,以便实现将不同的数字显示到数码管上;

完整word版,单片机汇编语言经典一百例

完整word版,单片机汇编语言经典一百例

51单片机实用程序库

4.1 流水灯

程序介绍:利用P1 口通过一定延时轮流产生低电平

输出,以达到发光二极管轮流亮的效果。实际应用中例如:广告灯箱彩灯、霓虹灯闪烁。

程序实例(LAMP.ASM)

ORG 0000H

AJMP MAIN

ORG 0030H

MAIN:

9

MOV A,#00H

MOV P1,A ;灭所有的灯

MOV A,#11111110B

MAIN1:

MOV P1,A ;开最左边的灯

ACALL DELAY ;延时

RL A ;将开的灯向右边移

AJMP MAIN ;循环

DELAY:

MOV 30H,#0FFH

D1: MOV 31H,#0FFH

D2: DJNZ 31H,D2

DJNZ 30H,D1

RET

END

4.2 方波输出

程序介绍:P1.0 口输出高电平,延时后再输出低电

平,循环输出产生方波。实际应用中例如:波形发生器。

程序实例(FAN.ASM):

ORG 0000H

MAIN:

;直接利用P1.0口产生高低电平地形成方波////////////// ACALL DELAY

SETB P1.0

ACALL DELAY

10

CLR P1.0

AJMP MAIN

;////////////////////////////////////////////////// DELAY:

MOV R1,#0FFH

DJNZ R1,$

RET

END

五、定时器功能实例

5.1 定时1秒报警

程序介绍:定时器1每隔1秒钟将p1.o的输出状态改变1 次,以达到定时报警的目的。实际应用例如:定时报警器。程序实例(DIN1.ASM):

ORG 0000H

51单片机汇编语言教程

51单片机汇编语言教程

51单片机汇编语言教程:10课:单片机数据传送类指令 单片机的累加器A与片外RAM之间的数据传递类指令MOVX A,@RiMOVX @Ri,AMOVX A,@DPTRMOVX @DPTR,A说明:1)在51系列单片机中,与外部存储器RAM打交道的只能是A累加器。所有需要传送入外部RAM的数据必需要通过A送去,而所有要读入的外部RAM中的数据也必需通过A读入。在此我们能看出内外部RAM的区别了,内部RAM间能直接进行数据的传递,而外部则不行,比如,要将外部RAM中某一单元(设为0100H单元的数据)送入另一个单元(设为0200H单元),也必须先将0100H单元中的内容读入A,然后再传送到0200H单元中去。要读或写外部的RAM,当然也必须要知道RAM的地址,在后两条单片机指令中,地址是被直接放在DPTR中的。而前两条指令,由于Ri(即R0或R1)只是一个8位的寄存器,所以只供给低8位地址。因为有时扩展的外部RAM的数量比较少,少于或等于256个,就只需要供给8位地址就够了。使用时应当首先将要读或写的地址送入DPTR或Ri中,然后再用读写命令。例:将单片机外部RAM中100H单元中的内容送入外部RAM中200H单元中。MOV DPTR,#0100HMOVX A,@DPTRMOV DPTR,#0200HMOVX @DPTR,A程序存储器向累加器A传送指令MOVC A,@A+DPTR 本指令是将ROM中的数送入A中。本指令也被称为单片机查表指令,常用此指令来查一个已做好在ROM中的表格 说明:此条指令引出一个新的寻址办法:变址寻址。本指令是要在ROM的一个地址单元中找出数据,显然必须知道这个单元的地址,这个单元的地址是这样确定的:在执行本指令立脚点DPTR中有一个数,A中有一个数,执行指令时,将A和DPTR中的数加起为,就成为要查找的单元的地址。查找到的结果被放在A中,因此,本条指令执行前后,A中的值不一定相同。例:有一个数在R0中,要求用查表的办法确定它的平方值(此数的取值范围是0-5)MOV DPTR,#TABLEMOV A,R0MOVC A,@A+DPTRTABLE: DB 0,1,4,9,16,25设R0中的值为2,送入A中,而DPTR中的值则为TABLE,则最终确定的ROM单元的地址就是TABLE+2,也就是到这个单元中去取数,取到的是4,显然它正是2的平方。其它数据也能类推。标号的真实含义:从这个地方也能看到另一个问题,我们使用了标号来替代具体的单元地址。事实上,标号的真实含义就是地址数值。在这里它代表了,0,1,4,9,16,25这几个数据在ROM中存放的起点位置。而在以前我们学过的如LCALL DELAY单片机指令中,DELAY 则代表了以DELAY为标号的那段程序在ROM中存放的起始地址。事实上,CPU正是通过这个地址才找到这段程序的。能通过以下的例程再

51单片机汇编程序集

51单片机汇编程序集

1、片内RAM初始化子程序

2、片外RAM初始化子程序

3、片外RAM初始化子程序(双字节个单元)

4、内部RAM数据复制程序

5、外部RAM数据复制程序

6、外部RAM数据复制程序

7、外部RAM数据复制到内部RAM程序

8、限幅滤波程序

9、中位值滤波程序

10、N点算术平均滤波

;片内RAM初始化子程序

IBCLR :MOV A,R0

MOV R1,A

CLR A

IBC1 :MOV @R1,A

INC R1

DJNZ R7,IBC1

RET

;片外RAM初始化子程序

EBCLR1 :MOV A,ADDPL

MOV DPL,A

MOV A,ADDPH

MOV DPH,A

CLR C

EBC11 :MOVX @DPTR,A

INC DPTR

DJNZ R7,EBC11

RET

;片外RAM初始化子程序(双字节个单元) EBCLR2 :MOV A,ADDPL

MOV DPL,A

MOV A,ADDPH

MOV DPH,A

MOV A,R7

JZ EBC21

INC R6

EBC21 :CLR A

MOVX @DPTR,A

INC DPTR

DJNZ R7,EBC21

DJNZ R6,EBC21

RET

;内部RAM数据复制程序

;入口:R0,R7

;堆栈需求:2字节

;出口:R1

IBMOV :MOV A,R0

ADD A,R7

MOV R0,A

MOV A,R1

ADD A,R7

MOV R1,A

IBM1 :DEC R0

DEC R1

MOV A,@R0

MOV @R1,A

DJNZ R7,IBM1

RET

;外部RAM数据复制程序

;入口:ADDPH,ADDPL,R7

;占用资源:ACC

;堆栈需求:2字节

第三章MCS51单片机的指令系统和汇编语言程序示例(第5范文

第三章MCS51单片机的指令系统和汇编语言程序示例(第5范文

第三章MCS51单片机的指令系统和汇编语言程序示例(第5、6、7节)

1.试分析单片机执行下列指令后累加器A和PSW中各标志位的变化状况?

(1)MOV A,#19H

ADD A,#66H

(2)MOV A,#5AH

ADD A,#6BH

2.已知:A=85H,R0=30H,(30H)=11H, (31H)=0FFH,C=1,试计算单片机执行下列指令后累加器A和C中的值各是多少?

(1)ADDC A,R0, (2)ADDC A,31H

(3) ADDC A,@R0, (4) ADDC A,#85H

3.已知M1和M2中分别存放两个16位无符号数的低8位,M1+1和M2+1中分别存放两个16位无符号数的高8位,计算两数之和(低8位存放在M1,高8位存放在M1+1,设两数之和不超过16位)。

4.试分析单片机执行下列指令后累加器A和PSW中各标志位的变化状况?

CLR C

MOV A,#52H

SUBB A,#0B4H

5.已知:A=0DFH,R1=40H,R7=19H,(30H)=00H,(40H)=0FFH,试分析单片机执行下列指令后累加器A和PSW中各标志位的变化状况?

(1) DEC A (2) DEC R7 (3) DEC 30H (4) DEC @R1

6.试写出能完成85+59的BCD加法程序,并对工作过程进行分析。

7.已知:两个8位无符号乘数分别放在30H和31H单元中,编程实现他们乘积的低8位存放在32H,高8位存放在33H。

8.已知:R0=30H,(30H)=0AAH,试分析执行下列指令后累加器A和30H单元的内容是什么?

MCS-51单片机实用子程序库

MCS-51单片机实用子程序库

MCS-51单片机实用子程序库(一)

目前已有若干版本的子程序库公开发表,它们各有特色。本程序库中的开平方算法为快速逼近算法,它能达到牛顿迭代法同样的精度,而速度加快二十倍左右,超过双字节定点除法的速度。

本子程序库对《单片机应用程序设计技术》一书附录中的子程序库作了重大修订:

(1)按当前流行的以 IBM PC 为主机的开发系统对汇编语言的规定,读者不必再进行修改,便可直接使用。

(2)对浮点运算子程序库进行了进一步的测试和优化,对十进制浮点数和二进制浮点数的相互转换子程序进行了彻底改写,提高了运算精度和可靠性。

(3)新增添了若干个浮点子程序(传送、比较、清零、判零等),使编写数据处理程序的工作变得更简单直观。

在使用说明中开列了最主要的几项:标号、入口条件、出口信息、影响资源、堆栈需求,各项目的意义请参阅《单片机应用程序设计技术》第六章 6.3.7 节的内容。程序清单中开列了四个栏目:标号、指令、操作数、注释。为方便读者理解,注释尽力详细。

子程序库的使用方法如下:

1.将子程序库全部内容链接在应用程序之后,统一编译即可。优点是简单方便,缺点是程序太长,大量无关子程序也包含在其中。

2.仅将子程序库中的有关部分内容链接在应用程序之后,统一编译即可。有些子程序需要调用一些低级子程序,这些低级子程序也应该包含在内。优点是程序紧凑,缺点是需要对子程序库进行仔细删节。

(一)MCS-51定点运算子程序库及其使用说明

定点运算子程序库文件名为DQ51.ASM,为便于使用,先将有关约定说明如下:

1.多字节定点操作数:用[R0]或[R1]来表示存放在由R0或R1指示的连续单元中的数据。地址小的单元存放数据的高字节。例如:[R0]=123456H,若(R0)=30H,则(30H)=12H,(31H)=34H,(32H)=56H。

第三章MCS51系列单片机指令系统及汇编语言程序设计

第三章MCS51系列单片机指令系统及汇编语言程序设计
例如: MOVX A, @R1 ;外部数据RAM中地址为P2R1的单元内容→A MOVX @DPTR,A ;A→外部数据RAM中DPTR为地址的单元
寄存器间接寻址的存储器空间包括:内部数据RAM和外部数据RAM。 内部数据RAM共用128字节,用一个字节的R0或R1可寻址整个空间。 外部数据RAM最大可达64K字节,仅用R0或R1无法寻址整个空间。在 MCS-51系列单片机指令中,对外部数据RAM作间接寻址有两种方法:第一种 由P2口提供高8位外部数据RAM地址,由R0或R1提供低8位地址,由此共同 寻址64K空间;第二种是用16位的DPTR作寄存器间接寻址。
3.1 MCS-51单片机的寻址方式
MCS-51单片机共有7种寻址方式:
➢ 立即寻址 ➢ 直接寻址 ➢ 寄存器寻址 ➢ 寄存器间接寻址 ➢ 变址寻址 ➢ 相对寻址 ➢ 位寻址
1. 立即寻址
立即寻址就是把操作数直接在指令中给出,即操作 数包含在指令中。立即操作数有8位和16位两种形式, 前面加“#”来表示。
CLR A ;0→A,累加器A中的内容清零 循环移位指令(4条)
RL A ;累加器A中的内容左移一位 RR A ;累加器A中的内容右移一位 RLC A ;累加器A中的内容连同进位位C左移一位 RRC A ;累加器A中的内容连同进位位C右移一位 例:A=16H,指令RR A执行后,A=0BH。
4.控制转移类指令 (共17条)

大学课件MCS51单片机指令系统与汇编语言程序设计

大学课件MCS51单片机指令系统与汇编语言程序设计

2.2.1 立即寻址
定义:将立即参与操作的数据直接写在指令中,这种寻址方 式称为立即寻址。 特点:指令中直接含有所需的操作数。该操作数可以是8位的, 也可以是16位的,常常处在指令的第二字节和第三字节的位 置上。立即数通常使用#data或#data16表示,在立即数 前面加“#”标志,用以和直接寻址中的直接地址(direc或 bit)相区别。 P41例
表该位地址。位地址n可以是绝对地址,也可以是符号地址。
(8)数据地址赋值伪指令DATA
格式:字符名称x DATA 表达式n
功能:把表达式n的值赋值给左边的字符名称x。n可以是数据或地址,
也可以是包含所定义的“字符名称x”在内的表达式,但不能是汇编符号。 DATA与EQU的主要区别是:EQU定义的“字符名称”必须先定义
后使用,而DATA定义的“字符名称”没有这种限制。所以,DATA伪指令 通常用在源程序的开头或末尾。
2.1.2 指令的分类
MCS-51指令系统有111条指令,可按下列几种方式分类: n 按指令字节数分类
单字节指令(49条)、双字节指令(46条)和三字 节指令(16条)。 2. 按指令执行时间分类
单机器周期指令(65条)、双机器周期指令(44条) 和四机器周期指令(2条)。 3. 按功能分类
2.2 MCS-51单片机的寻址方式
寻址方式:在计算机中,说明操作数所在地址的方法称为指令 的寻址方式。

51单片机汇编指令大全

51单片机汇编指令大全

51汇编指令大全

Rn: 表示当前寄存器区的8个工作寄存器R0~R7

Ri: 表示当前寄存器区的R0或R1,可作地址指针即间址寄存器(i=0或1)

@: 为间接寄存器或基址寄存器的前缀.

Direct: 表示8位内部数据存储单元的地址.它可以是内部RAM的单元地址0~127.特殊功能

寄存器SFR的地址(128~255)或名称,

A: 累加器ACC.

B: .特殊功能寄存器B,用于MUL和DIV指令中.

C: 进位位Cy.

#data: 表示包含在指令中的单字节(8位)立即数.如果用16位进制表示,后缀字母为”H”,数据范围00~0FFH,不得一字母开头;如果用16进制表示无须任何后缀,但必须在0~255之间.

#data16: 表示包含在指令中的双字节(16位)立即数.

Adda16: 表示16位的目的地址.用于LCALL和LJMP指令中,目的地址范围是从0000H~FFFFH的整个64KB存储地址空间.

Adda11: 表示11位的目的地址.用于ACALL和AJMP的指令中,目的地址必须和下一条指令第一个字节同处一页.

Rel: 表示8位带符号的相对偏移量.用语SJMP和所有的条件转移指令中.偏移量相对于下一条指令的第一个字节计算,在-128~+127范围内取值.

DPTR: 为数据指针,可用作16位的地址寄存器.

/: 加在位操作的前面,表示对该位进行非运算.

bit: 表示内部可寻址位或特殊功能寄存器中的直接寻址位.

“(x): 寄存器或地址单元中的内容.

((x)): 有x见解寻址的单元中的内容.

<-: 表示将箭头右边的内容传送至箭头的左边.

51单片机汇编程序范例

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条指令代码,真不知道说的是什么,指令周期是因各种机型和指令而异的,

51单片机汇编指令总结

51单片机汇编指令总结

51单片机汇编指令总结

数据传输指令

一.片内ram数据传输指令

1.以累加器a为目的操作数的指令:mova,rnmova,directmova,@rimova,#data

2.以寄存器rn为目的操作数的指令:movrn,amovrn,directmovrn,data

3.以轻易地址为目的操作数的指令:movdirect,amovdirect,rnmovdirect1,derect2movdirect,@rimovdirect,#data

4.间接地址为目的操作数的指令:mov@ri,amov@ri,directmov@ri,#data

5.十六位数据传送指令:movdptr,#data16

二.累加器a与片外ram数据传输指令:movxa,@rimovxa,@dptrmovx@ri,

amovx@dptr,a三.换算串行:movca,@a+dptr(先pc←(pc)+1,后a←((a)+(dptr)))+movca,@a+pc(先pc←(pc)+1,后a←((a)+(pc)))四.互换指令:

1.字节交换指令:

xcha,rnxcha,directxcha,@ri

2.半字节交换指令:xchda,@ri

3.累加器半字节交换指令:swapa五.栈操作指令:1.push(入栈指令)pushdirect

2.pop(出栈指令)popdirect

算术运算指令:

一.乘法加法指令:

1.加法指令:

adda,rnadda,directadda,@riadda,#data2.拎位次乘法指令:

addca,rna←(a)+(rn)+cyaddca,directa←(a)+(direct)+cyaddca,@ria←(a)+((ri))+cyaddca,#dataa←(a)+(data)+cy3.带借位减法指令:

C51单片机汇编语言程序设计

C51单片机汇编语言程序设计

C51单片机汇编语言程序设计

一、二进制数与十六进制数之间的转换1、数的表达方法

为了方便编程时书写,规定在数字后面加一个字母来区别,二进制数

后加B十六进制数后加H。2、二进制数与十六进制数对应表二进制十六

进二进制制0000000100100011010001010110011101234567100010011010101111001101 11101111十六进制89ABCDEF3、二进制数转换为十六进制数

转换方法为:从右向左每4位二进制数转化为1位十六进制数,不足

4位部分用0补齐。

例:将(1010000110110001111)2转化为十六进制数解:把1010000110110001111从右向左每4位分为1组,再

写出对应的十六进制数即可。0101000011011000111150D8F

答案:(1010000110110001111)2=(50D8F)16例:将1001101B转

化为十六进制数

解:把10011110B从右向左每4位分为1组,再写出对应的十六进制

数即可。100111109E

答案:10011110B=9EH4、十六进制数转换为二进制数

转换方法为:将每1位十六进制数转换为4位二进制数。例:将(8A)16转化为二进制数

解:将每位十六进制数写成4位二进制数即可。8A10001010

答案:(8A)16=(10001010)2例:将6BH转化为二进制数

解:将每位十六进制数写成4位二进制数即可。6B01101011

答案:6BH=01101011B

二、计算机中常用的基本术语1、位(bit)

单片机汇编程序51电子时钟.doc

单片机汇编程序51电子时钟.doc

单片机汇编程序 51电子时钟

电子钟设计实验报告

一)实验目的:

1、进一步掌握定时器的使用和编程方法。

2、进一步掌握中断处理程序的编程方法。

3、进一步掌握数码显示电路的驱动方法。

4、进一步掌握键盘电路的驱动方法。

5、进一步掌握软件数据处理的方法。

二)内容要求:

1、利用CPU的定时器和数码显示电路,设计一个电子时钟。格式如下:XX XX XX 由左向右分别为:时、分、秒。

2、电子时钟有秒表功能。

3、并能用键盘调整时钟时间。

4、电子时钟能整点报时、整点对时功能。

5、能设定电子时钟的闹铃。

三)主要元件:

电阻4.7K 10个 2K 1个四位共阳数码管1个二位共阳数码管1个按钮开关4个万用板(中板)1个 9012PNP 7个排线排阵若干电线一捆蜂鸣器1个最小系统一个

四)系统说明:

按P1.0键,如果按下的时间小于1秒进入省电模式(数码管不显示,开T0计时器),如果按下的时间大于1秒则进入时间调整.。在时间调整状态:再按P1.0,如果按下时间大于0.5秒转调小时状态,按下时间小于0.5秒加1分钟操作。在小

时调整状态再按P1.0键,如果按下时间大于0.5秒退出时间调整,如果按下时间小于0.5秒加1小时操作。

按P1.1键,进入闹铃调分状态,按P1.2分加1,按P1.0分减1。若再按

P1.3,则进入调整状态,按P1.2时加1,按P1.0分时。按P1.1键,闹铃有效,显示式样变为00:00:—0;再按P1.1键,闹铃无效,显示式样变为00:00:—。按P1.3键,调整闹钟时间结束。

按P1.2键,进入秒表计时功能,按P1.2键暂停或清零,按P1.1键退出秒表回到时钟状态。

51单片机汇编语言指令教程汇集

51单片机汇编语言指令教程汇集

51单片机汇编语言指令教程汇集

1.MOV指令:MOV指令用于将一个值从一个寄存器或内存位置复制到

另一个寄存器或内存位置。例如,MOVA,将常数10复制到累加器A中。

2.ADD指令:ADD指令用于将两个操作数相加,并将结果保存在目标

操作数中。例如,ADDA,B将寄存器B的值与累加器A的值相加,并将结

果保存在累加器A中。

3.SUB指令:SUB指令用于将源操作数减去目标操作数,并将结果保

存在目标操作数中。例如,SUBA,B将寄存器B的值减去累加器A的值,

并将结果保存在累加器A中。

4.INC指令:INC指令用于将指定的操作数加1、例如,INCA将累加

器A的值加1

5.DEC指令:DEC指令用于将指定的操作数减1、例如,DECA将累加

器A的值减1

6.JMP指令:JMP指令用于无条件地跳转到指定的地址。例如,

JMP1000h将跳转到地址1000h处执行指令。

9. ACALL指令:ACALL指令用于调用一个子程序,其地址由指令给出,子程序结束后返回到调用指令的下一条指令。例如,ACALL Subroutine

将调用一个名为Subroutine的子程序。

10.RET指令:RET指令用于从子程序返回到调用指令的下一条指令。

例如,RET将从子程序返回。

11.NOP指令:NOP指令用于空操作,即不执行任何操作。它通常用于

延时或填充空白。

以上是一些常用的51单片机汇编语言指令,这些指令可以用于控制I/O口、进行算术运算、执行跳转和调用子程序等。学习并熟练掌握这些指令,对于编写高效的51单片机汇编程序非常重要。

51单片机汇编程序

51单片机汇编程序

51单片机汇编程序

1. 简介

51单片机是一种常用的8位单片机芯片,具有广泛的应用领域。51单片机的编程语言主要有汇编语言、C语言和底层

汇编语言。本文主要介绍51单片机的汇编程序。

2. 汇编程序基础

2.1 寄存器

51单片机的CPU有4个8位寄存器(A、B、DPTR、PSW)和一个16位寄存器(PC)。在汇编程序中,我们可以使用这些寄存器来进行各种操作。

•A寄存器(累加器):用于存储数据和进行算术运

算。

•B寄存器:辅助寄存器,可用于存储数据和进行算

术运算。

•DPTR寄存器:数据指针寄存器,用于存储数据存

取的地址。

•PSW寄存器:程序状态字寄存器,用于存储程序运行状态信息。

•PC寄存器:程序计数器,用于存储当前执行指令的地址。

2.2 指令集

51单片机的指令集包含了多种汇编指令,可以用来进行数据操作、算术运算、逻辑运算、控制流程等。常用的汇编指令有:

•MOV:数据传送指令。

•ADD、SUB:加法和减法运算指令。

•ANL、ORL、XRL:逻辑运算指令。

•MOVX:外部RAM的读写指令。

•CJNE、DJNZ:条件分支指令。

•LCALL、RET:函数调用和返回指令。

2.3 编写一个简单的汇编程序

下面是一个简单的汇编程序示例,用于将A寄存器中的数

据加1,并将结果存储到B寄存器中。

ORG 0x0000 ; 程序的起始地址

MOV A, #0x01 ; 将A寄存器赋值为1

ADD A, #0x01 ; 将A寄存器加1

MOV B, A ; 将A寄存器的值传送到B寄存器END ; 程序结束

在上面的示例中,ORG指令用于指定程序的起始地址,MOV 指令用于将A寄存器赋值为1,ADD指令用于将A寄存器加1,MOV指令用于将A寄存器的值传送到B寄存器,END指令用

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

51 单片机实用程序库

4.1 流水灯

程序介绍:利用P1 口通过一定延时轮流产生低电平

输出,以达到发光二极管轮流亮的效果。实际应用中例如:广告灯箱彩灯、霓虹灯闪烁。

程序实例(LAMP.ASM)

ORG 0000H

AJMP MAIN

ORG 0030H

MAIN:

9

MOV A,#00H

MOV P1,A ;灭所有的灯

MOV A,#11111110B

MAIN1:

MOV P1,A ;开最左边的灯

ACALL DELAY ;延时

RL A ;将开的灯向右边移

AJMP MAIN ;循环

DELAY:

MOV 30H,#0FFH

D1: MOV 31H,#0FFH

D2: DJNZ 31H,D2

DJNZ 30H,D1

RET

END

4.2 方波输出

程序介绍:P1.0 口输出高电平,延时后再输出低电

平,循环输出产生方波。实际应用中例如:波形发生器。

程序实例(FAN.ASM):

ORG 0000H

MAIN:

;直接利用P1.0 口产生高低电平地形成方波////////////// ACALL DELAY

SETB P1.0

ACALL DELAY

10

CLR P1.0

AJMP MAIN

;////////////////////////////////////////////////// DELAY:

MOV R1,#0FFH

DJNZ R1,$

RET

五、定时器功能实例

5.1 定时1 秒报警

程序介绍:定时器1 每隔1 秒钟将p1.o 的输出状态改变1 次,以达到定时报警的目的。实际应用例如:定时报警器。程序实例(DIN1.ASM):

ORG 0000H

AJMP MAIN

ORG 000BH

AJMP DIN0 ;定时器0 入口

MAIN:

TFLA G EQU 34H ;时间秒标志,判是否到50 个

0.2 秒,即50*0.2=1 秒

MOV TMOD,#00000001B;定时器0 工作于方式

1

MOV TL0,#0AFH

MOV TH0,#3CH ;设定时时间为0.05 秒,定时

20 次则一秒

11

SETB EA ;开总中断

SETB ET0 ;开定时器0 中断允许

SETB TR0 ;开定时0 运行

SETB P1.0

LOOP: AJMP LOOP

DIN0:

;是否到一秒//////////////////////////////////////// INCC: INC TFLAG

MOV A,TFLAG

CJNE A,#20,RE

MOV TFLAG,#00H

CPL P1.0

;////////////////////////////////////////////////// RE:

MOV TL0,#0AFH

MOV TH0,#3CH ;设定时时间为0.05 秒,定时

20 次则一秒

RETI

END

5.2 频率输出公式

介绍:f=1/t

s51 使用12M 晶振,一个周期是1 微秒使用定时器1

工作于方式0,最大值为65535,以产生200HZ 的频率为例:

200=1/t:推出t=0.005 秒,即5000 微秒,即一个高电

平或低电平的时间为2500 微秒。这样,定时值应设为65535-2500=63035,将它转换为十六进制则为:F63B。

具体程序请看f200.asm

频率递增:

200HZ:63035:F63B

250HZ:63535:F82F

300HZ:63868:F97C

5.3 200HZ 频率输出

程序介绍:利用定时器定时,在P1.0 口产生200HZ

的频率输出。实际应用例如:传感器前级推动。

程序实例(F200.ASM):

ORG 0000H

AJMP MAIN

ORG 001BH

AJMP DIN0

MAIN:

CLR P1.0 ;产生一个低电平,实际上

是从p1.0 口产生频率

MOV TMOD,#00010000B ;定时器1 工作于方式0

MOV TH1,#0F6H

MOV TL1,#3BH ;频率产生的时间,详细请

见频率公式

SETB EA ;开总中断

13

SETB TR1 ;开定时器1 运行

SETB ET1 ;开定时器1 允许

LOOP: AJMP LOOP ;无限循环

DIN0: CPL P1.0 ;产生一个高电平,

下次来就是低电平(因为取反),一个高电平和一个低电平形成一个周期

MOV TH1,#0F6H

MOV TL1,#3BH ;重置频率产生时间

RETI ;返回

END

5.4 200——250HZ 变化频率输出

程序介绍:利用定时器定时时间的变化,由P1.0 口

产生200——250HZ 变化的频率。实际应用例如:传感器

前级推动、频率发生器。

程序实例(F250.ASM):

ORG 0000H

AJMP MAIN

ORG 001BH

AJMP DIN1

相关文档
最新文档