51单片机实用汇编程序库
51单片机汇编语言程序设计
51单片机汇编语言程序设计1.题目:数码管显示1~72.题目分析本实验将要求51单片机采用汇编程序来实现以上程序,我们首先要对51单片机进行硬件电路设计,然后编写相应的汇编程序3.硬件电路4.程序设计;-------------------------------------------------------------------------------;选择P1口作为数码管位选;-------------------------------------------------------------------------------org 0hmov p1,h ;启动P1作为数码管位选again: m ov p2,Fh ;0000 0011 1111 显示数字1sjmp againmov p2,h ;0000 0110 显示数字2sjmp againmov p2,Bh ;0101 1011 显示数字3sjmp againmov p2,Fh ;0100 1111 显示数字4sjmp againmov p2,h ;0110 0110 显示数字5sjmp againmov p2,Dh ;0110 1101 显示数字6sjmp againmov p2,dh ;0111 1101 显示数字7sjmp againend5.程序流程本汇编程序的程序流程如下:1)将P1口设置为数码管的位选;2)通过P2口设置相应的数字,P2口的值将会根据数字的不同而不同,以便实现将不同的数字显示到数码管上;3)循环2步骤,不断刷新P2口的值,从而实现数字的不断变化,从而实现将1-7数字在数码管上循环显示。
51单片机汇编指令及伪指令小结
51单片机汇编指令及伪指令小结51单片机汇编指令及伪指令小结51单片机是一种广泛应用的基于汇编语言的微控制器。
它的汇编指令集非常丰富,包括了基本的数据处理、逻辑运算、分支跳转、数据存储和输入输出等指令。
汇编指令的灵活运用可以实现各种复杂的功能,因此掌握51单片机的汇编指令是开发嵌入式系统的重要基础。
1. 基本数据处理指令51单片机汇编指令集包括了一系列基本的数据处理指令,如加法(add)、减法(sub)、乘法(mul)、除法(div)等。
这些指令用于实现对数据的基本运算操作。
2. 逻辑运算指令逻辑运算指令用于实现各种逻辑运算,如与(and)、或(or)、非(not)、异或(xor)等。
这些指令通常用于处理数据的开关控制、状态判断等功能。
3. 分支跳转指令分支跳转指令用于实现程序的流程控制。
常用的分支跳转指令包括无条件跳转(jmp)、条件跳转(jz、jnz、jc、jnc等)、循环跳转(loop)等。
这些指令可以根据条件和需求设置程序的执行流程,实现各种循环、分支等功能。
4. 数据存储指令数据存储指令用于实现数据的存储和加载操作。
常用的存储指令包括将数据存储到寄存器或内存中(mov)、将数据从寄存器或内存中加载(ld)等。
这些指令通过对数据的存储和加载,实现对数据的读写操作。
5. 输入输出指令输入输出指令用于实现与外设的数据通信。
常用的输入输出指令包括从端口输入(instr)、输出到端口(outstr)等。
这些指令通过与外部设备的数据交互,实现嵌入式系统与外设的连接。
除了以上的基本指令外,51单片机还提供了一些伪指令,用于程序的组织和调试。
这些伪指令包括宏指令、条件编译指令、调试指令等。
1. 宏指令宏指令是一种通过宏展开的方式来扩展汇编代码的指令。
它通过提前定义一些宏,并在代码中使用这些宏来生成更复杂的汇编代码。
宏指令的好处是可以简化代码的书写,使得程序的逻辑更清晰。
2. 条件编译指令条件编译指令用于根据编译时的条件来选择性地编译代码。
C51单片机数字温度计汇编程序及说明书
1绪论1.1选题背景随着人们生活水平的不断提高,单片机控制无疑是人们追求的目标之一,它所给人带来的方便也是不可否定的,其中数字温度计就是一个典型的例子,但人们对它的要求越来越高,要为现代人工作、科研、生活提供更好的更方便的设施就需要从单片机技术入手,一切向着数字化控制,智能化控制方向发展。
温度测量在物理实验、医疗卫生、食品生产等领域,尤其在热学试验(如:物体的比热容、汽化热、热功当量、压强温度系数等教学实验)中,有特别重要的意义。
现在所使用的温度计通常都是精度为1℃和0.1℃的水银、煤油或酒精温度计。
这些温度计的刻度间隔通常都很密,不容易准确分辨,读数困难,而且他们的热容量还比较大,达到热平衡所需的时间较长,因此很难读准,并且使用非常不方便。
本设计所介绍的数字温度计与传统的温度计相比,具有读数方便,测温范围广,测温准确等优点,其输出温度采用数字显示,主要用于对测温比较准确的场所,或科研实验室使用。
因此本课题就尝试通过编程与芯片的结合来解决传统数字温度计的弊端,设计出新型数字温度计。
1.2课题现状分析及研究意义温度传感器的发展现状:温度传感器使用范围广,数量多,居各种传感器之首,其发展大致经历了以下3个阶段:①传统的分立式温度传感器(含敏感元件)——热电偶传感器,主要是能够进行非电量和电量之间转换。
②模拟集成温度传感器/控制器。
集成传感器是采用硅半导体集成工艺制成的,因此亦称硅传感器或单片集成温度传感器。
③智能温度传感器。
它是微电子技术、计算机技术和自动测试技术(ATE_)的结晶。
智能温度传感器内部包含温度传感器、A/D传感器、信号处理器、存储器(或寄存器)和接口电路。
本课题的研究可以应用领域生产、生活等很多领域。
对于家用电器从洗衣机、微波炉到音响等等到处都可以用到温度控制器来方便大家的日常生活。
开发此产品后也可方便应用安装在小至家庭大到工厂车间,小至一个芯片大到一个机械设备。
例如在家庭客厅卧室等必要地方显示室温,可防止家里食物是否变质及早采取措施。
单片机c51汇编语言51单片机汇编语言
单片机c51汇编语言51单片机汇编语言单片机C51汇编语言单片机(C51)是指一种集成电路上只包含一个集中式控制器的微处理器,具有完整的CPU指令集、RAM、ROM、I/O接口等功能。
汇编语言是一种低级语言,是用于编写单片机指令的一种语言。
汇编语言能够直接操作单片机的寄存器和输入/输出端口,因此在嵌入式系统的开发中非常重要。
本文将介绍单片机C51的汇编语言编程。
一、了解单片机C51单片机C51是目前应用最广泛的一种单片机系列,广泛用于各种电子设备和嵌入式系统的开发。
C51指的是Intel公司推出的一种基于MCS-51架构的单片机。
该系列单片机具有较高的性能和低功耗的特点,可用于各种控制和通信应用。
二、汇编语言的基本概念汇编语言是一种低级语言,与机器语言紧密相关。
它使用助记符来代替机器指令的二进制表示,使程序的编写更加易读。
在单片机C51汇编语言中,每一条汇编指令都对应着特定的机器指令,可以直接在单片机上执行。
三、汇编语言的基本指令在单片机C51汇编语言中,有一些基本的指令用于控制程序的执行和操作寄存器。
以下是一些常用的指令:1. MOV指令:用于将数据从一个寄存器或内存单元复制到另一个寄存器或内存单元。
2. ADD指令:用于将两个操作数相加,并将结果存储到目的寄存器中。
3. SUB指令:用于将第一个操作数减去第二个操作数,并将结果存储到目的寄存器中。
4. JMP指令:用于无条件跳转到指定的地址。
5. JZ指令:用于在条件为零时跳转到指定的地址。
6. DJNZ指令:用于将指定寄存器的值减一,并根据结果进行跳转。
四、编写单片机C51汇编程序的步骤编写单片机C51汇编程序需要按照以下步骤进行:1. 确定程序的功能和目标。
2. 分析程序的控制流程和数据流程。
3. 设计算法和数据结构。
4. 编写汇编指令,实现程序的功能。
5. 调试程序,并进行测试。
六、实例演示以下是一个简单的单片机C51汇编程序的示例,用于实现两个数的相加,并将结果输出到LED灯上:org 0H ; 程序的起始地址为0mov a, 05H ; 将05H赋值给累加器mov b, 07H ; 将07H赋值给B寄存器add a, b ; 将A寄存器和B寄存器的值相加mov P1, a ; 将相加结果输出到P1口end ; 程序结束在这个例子中,首先将05H赋值给累加器A,然后将07H赋值给B寄存器,接着使用ADD指令将A和B的值相加,将结果存储到累加器A中,最后将累加器A的值输出到P1口。
51单片机汇编指令(全)
若结果大于FFH,则将溢出标志OV置1
DIV Divide除法指令
DIV AB ;A-B商—A,余数tB
;若除数为0,结果不确定,则将溢出标志0V置1
INC In creme nt力口1指令
INC A ;A+1 A,A加1,结果放在A
指令中常用符号说明
Rn
当前寄存器区的8个工作寄存器R0~R7(n=0~7)
Ri
当前寄存器区可作为地址寄存器的2个工作寄存器R0和R1(i=0,1)
Direct
8位内部数据寄存器单兀的地址及特殊功能寄存器的地址
#data
表示8位常数(立即数)
#data16
表示16位常数
Add16
表示16位地址
Addr11
DA Decimal Adjust十进制加法调整指令
DA A;在加法指令后,把A中二进制码自动调整为BCD码
;DA A只能更跟在ADD或ADDC加法指令后,不适用于减法
逻辑运算指令(9个助记符)
DEC Decreme nt减1指令
INC A ;A-1 A,A减1,结果放在A
INC Rn ; Rn -1 Rn, Rn减1,结果放在Rn
INC direct ;(direct)-1 direct,直接地址的内容减1,结果放在该地址中
INC @Ri; ((Ri))-1(Ri),间址中的内容减1,结果放在该间址中
ADDC A,@Ri ;((Ri))+A+CY A, A与间址中的内容、进位状态相加,结果送到A中
ADDC A,#data ;data+A+CY A,A与立即数、进位状态相加,和送入A
51单片机汇编程序设计之算数运算指令
1) 逻辑“与”指令
汇编指令格式 机器指令格式
操作
ANL A,Rn
58H~5FH
A ← (A)∧(Rn)
ANL A,direct 55H direct
A ← (A)∧(direct)
B←(A)÷(B)的余数
注意:若除数(B)=00H,则结果无法确定,OV置1。 CY总是 被清0。该操作也影响标志位P。
3 加1、减1指令
1) 加1指令 汇编指令格式 INC A INC Rn INC direct INC @Ri INC DPTR
机器代码 04H 08H~0FH 05H direct 06H~07H A3H
操作 A ← (A)-1 Rn ← (Rn)-l direct←(direct)-1 (Ri) ← ((Ri))-1
注意:1.该操作不影响PSW标志位。 2. 51单片机无DEC DPTR指令。
4 十进制调整指令
汇编指令格式 机器码格式 操 作
DA A
D4H
对A进行BCD调整
注意:这条指令一般跟在ADD或ADDC指令后,对累 加器A中的结果进行BCD调整。 该操作影响标志位P。
2 乘法、除法指令
1) 乘法指令
汇编指令格式 机器指令格式
操作
MUL AB
A4H
BA ← (A)×(B)
注意:若乘积大于0FFH,则OV置1,否则清0(此时B的内容为 0)。CY总是被清0。该操作也影响标志位P。
2) 除法指令
汇编指令格式 机器指令格式
操作
DIV AB
84H
A←(A)÷(B)的商,
【例2】 试编程计算5678H – 1234H的值,结果保存在R6、 R5中。
解:减数和被减数都是16位二进制数,计算时要先进行低8 位的减法,然后再进行高8位的减法,在进行低8位减
MCS-51单片机实用子程序库(一)
据。地址小的单元存放数据的高字节。例如:[R0]=123456H,若(R0)=30H,则(30H)=12H,
(31H)=34H,(32H)=56H。
2.运算精度:单次定点运算精度为结果最低位的当量值。
MOV A,R3
ADDC A,B
MOV R3,A
CLR A
RLC A
XCH A,R2 ;计算R2乘R6
MOV B,R6
MUL AB
ADD A,R3 ;累加部分积
MOV R3,A
MOV A,R2
ADDC A,B
MOV R2,A
RET
(6) 标号: MUL2 功能:双字节二进制无符号数平方
DV31: CLR C
MOV A,R3
SUBB A,R7
JC DV30
SETB OV ;商溢出
RET
DV30: MOV R2,#10H ;求R3R4R5/R7-→R4R5
DM23: CLR C
MOV A,R5
RLC A
MOV R5,A
MOV A,R4
RLC A
ADD A,R4
MOV R4,A
MOV A,R3
ADDC A,B
MOV R3,A
CLR A
ADDC A,R2
MOV R2,A
RET
(7) 标号: DIVD 功能:双字节二进制无符号数除法
入口条件:被除数在R2、R3、R4、R5中,除数在R6、R7中。
出口信息:OV=0 时,双字节商在R2、R3中,OV=1 时溢出。
(完整版)单片机汇编语言经典一百例
51单片机实用程序库4.1 流水灯程序介绍:利用P1 口通过一定延时轮流产生低电平输出,以达到发光二极管轮流亮的效果。
实际应用中例如:广告灯箱彩灯、霓虹灯闪烁。
程序实例(LAMP.ASM)ORG 0000HAJMP MAINORG 0030HMAIN:9MOV A,#00HMOV P1,A ;灭所有的灯MOV A,#11111110BMAIN1:MOV P1,A ;开最左边的灯ACALL DELAY ;延时RL A ;将开的灯向右边移AJMP MAIN ;循环DELAY:MOV 30H,#0FFHD1: MOV 31H,#0FFHD2: DJNZ 31H,D2DJNZ 30H,D1RETEND4.2 方波输出程序介绍:P1.0 口输出高电平,延时后再输出低电平,循环输出产生方波。
实际应用中例如:波形发生器。
程序实例(FAN.ASM):ORG 0000HMAIN:;直接利用P1.0口产生高低电平地形成方波////////////// ACALL DELAYSETB P1.0ACALL DELAY10CLR P1.0AJMP MAIN;////////////////////////////////////////////////// DELAY:MOV R1,#0FFHDJNZ R1,$RETEND五、定时器功能实例5.1 定时1秒报警程序介绍:定时器1每隔1秒钟将p1.o的输出状态改变1 次,以达到定时报警的目的。
实际应用例如:定时报警器。
程序实例(DIN1.ASM):ORG 0000HAJMP MAINORG 000BHAJMP DIN0 ;定时器0入口MAIN:TFLA G EQU 34H ;时间秒标志,判是否到50个0.2秒,即50*0.2=1秒MOV TMOD,#00000001B;定时器0工作于方式1MOV TL0,#0AFHMOV TH0,#3CH ;设定时时间为0.05秒,定时20次则一秒11SETB EA ;开总中断SETB ET0 ;开定时器0中断允许SETB TR0 ;开定时0运行SETB P1.0LOOP: AJMP LOOPDIN0:;是否到一秒//////////////////////////////////////// INCC: INC TFLAGMOV A,TFLAGCJNE A,#20,REMOV TFLAG,#00HCPL P1.0;////////////////////////////////////////////////// RE:MOV TL0,#0AFHMOV TH0,#3CH ;设定时时间为0.05秒,定时20次则一秒RETIEND5.2 频率输出公式介绍:f=1/ts51 使用12M晶振,一个周期是1微秒使用定时器1工作于方式0,最大值为65535,以产生200HZ的频率为例:200=1/t:推出t=0.005 秒,即5000 微秒,即一个高电12平或低电平的时间为2500 微秒。
MAX6675 51单片机汇编程序
MAIN: CLR P3.5
LCALL CLRYJ
LCALL DEL
SETB P3.5
;----------------二十进制转换程序-------
ZH: CLR A ;清累加器
MOV T_G,A
MOV T_H,A ;清除出口单元,准ATAL,A
MOV A,DATAH
MOV T_S,A ;保存数据
DATAH EQU 40H ;读取数据高位
DATAL EQU 41H ;读取数据低位
T_S EQU 50H
T_M EQU 51H
MOV DATAL,A ;将数据低位移入缓冲区
SETB CS ;CS高电平,停止数据输出,启动新的数据
;*****************************************
;=======================================
RD6675: CLR CS ;CS低电平,停止数据转换,输出数据
CLR SCK ;时钟置为低电平
RLC A ;带位左移,高位数据在CY中
MOV R7,A ;保存数据
MOV A,R6 ;取得高位数
RLC A ;累加器左移一位
SETB SCK
NOP
CLR SCK
DJNZ R7,RDL
MOV DATAH,A
MOV A,DATAL
RRC A
MOV DATAL,A
;*****************************************
MOV DATAH,A ;将数据高位移入缓冲区
MOV A,DATAH ;数据高位
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)计算机中最小的数据单位。
由于计算机采用二进制数,所以1位二进制数称作1bit,例如110110B为6bit。
2、字节(Byte,简写为B)8位的二进制数称为一个字节,1B=8bit3、字(Word)和字长两个字节构成一个字,2B=1Word。
字长是指单片机一次能处理的二进制数的位数。
如AT89S51是8位机,就是指它的字长是8位,每次参与运算的二进制数的位数为8位。
51单片机汇编语言
51单片机汇编语言51单片机汇编语言是一种基于51系列单片机的汇编语言,它是一种直接操作硬件的低级语言。
在嵌入式系统开发中,经常需要使用汇编语言来编写底层驱动程序和实现特定功能。
本文将介绍51单片机汇编语言的基本概念、语法结构以及常用指令集。
一、51单片机简介51单片机是一种基于哈佛结构的8位单片机,由英特尔公司设计,并于1980年发布。
它具有低功耗、高性能和易于编程的特点,广泛应用于家电、汽车电子、工控设备等领域。
二、汇编语言基础1. 数据类型:51单片机汇编语言支持的数据类型包括位(bit)、字节(byte)、字(word)和双字(dword)。
可以通过定义变量来使用这些数据类型。
2. 寄存器:51单片机包含一组通用寄存器和特殊功能寄存器。
通用寄存器用于存储临时数据,特殊功能寄存器用于控制和配置硬件。
常用的通用寄存器有ACC累加器、B寄存器和DPTR数据指针。
3. 指令集:51单片机汇编语言的指令集丰富多样,包括数据传送指令、算术运算指令、逻辑运算指令、跳转指令等。
例如,MOV指令用于数据传送,ADD指令用于加法运算,JMP指令用于无条件跳转。
三、汇编语言示例下面是一个简单的51单片机汇编语言程序示例,实现了一个LED 灯的闪烁效果。
```ORG 0x0000 ; 程序起始地址MOV P1, #0x00 ; 将0x00赋值给P1口,关闭LED灯LOOP:MOV P1, #0xFF ; 将0xFF赋值给P1口,打开LED灯CALL DELAY ; 调用延时子程序MOV P1, #0x00 ; 将0x00赋值给P1口,关闭LED灯CALL DELAY ; 调用延时子程序JMP LOOP ; 无条件跳转到LOOP标签DELAY:MOV R0, #0xFF ; 将0xFF赋值给R0寄存器DELAY_LOOP:DJNZ R0, DELAY_LOOP ; R0减1,如果不等于0则跳转到DELAY_LOOP标签RET ; 返回调用子程序的指令END ; 程序结束标志```四、汇编语言开发工具51单片机汇编语言的开发工具有很多,常用的有Keil C51、SDCC、ASM51等。
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的值加15.DEC指令:DEC指令用于将指定的操作数减1、例如,DECA将累加器A的值减16.JMP指令:JMP指令用于无条件地跳转到指定的地址。
例如,JMP1000h将跳转到地址1000h处执行指令。
9. ACALL指令:ACALL指令用于调用一个子程序,其地址由指令给出,子程序结束后返回到调用指令的下一条指令。
例如,ACALL Subroutine将调用一个名为Subroutine的子程序。
10.RET指令:RET指令用于从子程序返回到调用指令的下一条指令。
例如,RET将从子程序返回。
11.NOP指令:NOP指令用于空操作,即不执行任何操作。
它通常用于延时或填充空白。
以上是一些常用的51单片机汇编语言指令,这些指令可以用于控制I/O口、进行算术运算、执行跳转和调用子程序等。
学习并熟练掌握这些指令,对于编写高效的51单片机汇编程序非常重要。
希望本文提供的51单片机汇编语言指令教程能够帮助你入门和掌握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寄存器赋值为1ADD A, #0x01 ; 将A寄存器加1MOV B, A ; 将A寄存器的值传送到B寄存器END ; 程序结束在上面的示例中,ORG指令用于指定程序的起始地址,MOV 指令用于将A寄存器赋值为1,ADD指令用于将A寄存器加1,MOV指令用于将A寄存器的值传送到B寄存器,END指令用于标记程序结束。
3. 汇编语言的应用51单片机的汇编语言广泛应用于各种嵌入式系统中,包括智能家居、工业自动化、仪器仪表等领域。
汇编程序具有以下特点:•程序执行效率高:由于汇编语言直接操作硬件,可以精确控制程序的执行流程,提高程序的执行效率。
51单片机汇编指令表
以下是一些常见的51单片机(如8051系列)的汇编指令:
1. 数据传送指令:
- MOV:将一个数据或寄存器的值移动到另一个寄存器或存储器位置。
- MOVC:将数据从外部代码存储器复制到累加器或寄存器。
2. 算术运算指令:
- ADD:将累加器与另一个寄存器或存储器中的值相加。
- SUB:从累加器中减去另一个寄存器或存储器中的值。
- INC:将累加器或寄存器的值加1。
- DEC:将累加器或寄存器的值减1。
3. 逻辑运算指令:
- ANL:对累加器和另一个寄存器或存储器中的值进行逻辑与操作。
- ORL:对累加器和另一个寄存器或存储器中的值进行逻辑或操作。
- XRL:对累加器和另一个寄存器或存储器中的值进行逻辑异或操作。
- CPL:对累加器或寄存器中的值进行按位取反操作。
4. 条件分支指令:
- CJNE:比较两个值,并在不相等时跳转到指定的地址。
- DJNZ:递减累加器或寄存器,并在结果不为零时跳转到指定的地址。
5. 跳转指令:
- JMP:无条件跳转到指定的地址。
- SJMP:短跳转,跳转到相对于当前地址的指定偏移量。
- AJMP:绝对跳转,跳转到指定的地址。
- LCALL:长调用,将当前地址入栈并跳转到指定的子程序地址。
6. 位操作指令:
- SETB:将某个位设置为1。
- CLR:将某个位清零。
- JB:如果某个位为1,则跳转到指定地址。
- JNB:如果某个位为0,则跳转到指定地址。
51单片机心形灯汇编程序
ORG 0000HMAIN: MOV R1,#08H MOV A,#7FHDAN2: MOV P2,ACALL DELAYRR ADJNZ R1,DAN2MOV P0,#0FFHMOV P1,#0FFHMOV P2,#0FFHMOV P3,#0FFHMOV R1,#08HMOV A,#7FHDAN3: MOV P3,ACALL DELAYRR ADJNZ R1,DAN3MOV P0,#0FFHMOV P1,#0FFHMOV P2,#0FFHMOV P3,#0FFHMOV R1,#08HMOV A,#7FHDAN4: MOV P1,ACALL DELAYRR ADJNZ R1,DAN4MOV P0,#0FFHMOV P1,#0FFHMOV P2,#0FFHMOV P3,#0FFHMOV R1,#08HMOV A,#0FEHDAN1: MOV P0,A ACALL DELAYRL ADJNZ R1,DAN1MOV P0,#0FFHMOV P1,#0FFHMOV P2,#0FFHMOV P3,#0FFH;单个跑马灯MOV R1,#08HMOV A,#7FHDAN22: MOV P2,ACALL DELAY1RR ADJNZ R1,DAN22MOV P0,#0FFHMOV P1,#0FFHMOV P2,#0FFHMOV P3,#0FFHMOV R1,#08HMOV A,#7FH DAN33: MOV P3,A CALL DELAY1RR ADJNZ R1,DAN33MOV P0,#0FFHMOV P1,#0FFHMOV P2,#0FFHMOV P3,#0FFHMOV R1,#08HMOV A,#7FH DAN44: MOV P1,A CALL DELAY1RR ADJNZ R1,DAN44MOV P0,#0FFHMOV P1,#0FFHMOV P2,#0FFHMOV P3,#0FFHMOV R1,#08HMOV A,#0FEH DAN11: MOV P0,AACALL DELAY1RL ADJNZ R1,DAN11MOV P0,#0FFHMOV P1,#0FFHMOV P2,#0FFHMOV P3,#0FFH;单个跑马灯MOV R1,#08HMOV A,#7FH DAN222: MOV P2,A CALL DELAY2RR ADJNZ R1,DAN222MOV P0,#0FFHMOV P1,#0FFHMOV P2,#0FFHMOV P3,#0FFHMOV R1,#08HMOV A,#7FH DAN333: MOV P3,A CALL DELAY2RR ADJNZ R1,DAN333MOV P0,#0FFHMOV P2,#0FFHMOV P3,#0FFHMOV R1,#08HMOV A,#7FH DAN444: MOV P1,A CALL DELAY2RR ADJNZ R1,DAN444MOV P0,#0FFHMOV P1,#0FFHMOV P2,#0FFHMOV P3,#0FFHMOV R1,#08HMOV A,#0FEH DAN111: MOV P0,A ACALL DELAY2RL ADJNZ R1,DAN111MOV P0,#0FFHMOV P1,#0FFHMOV P2,#0FFHMOV P3,#0FFH;单个跑马灯MOV R1,#08HD1AN22: MOV P2,A CALL DELAY3RR ADJNZ R1,D1AN22MOV P0,#0FFHMOV P1,#0FFHMOV P2,#0FFHMOV P3,#0FFHMOV R1,#08HMOV A,#7FHD1AN33: MOV P3,A CALL DELAY3RR ADJNZ R1,D1AN33MOV P0,#0FFHMOV P1,#0FFHMOV P2,#0FFHMOV P3,#0FFHMOV R1,#08HMOV A,#7FHD1AN44: MOV P1,A CALL DELAY3RR ADJNZ R1,D1AN44MOV P1,#0FFHMOV P2,#0FFHMOV P3,#0FFHMOV R1,#08HMOV A,#0FEHD1AN11: MOV P0,AACALL DELAY3RL ADJNZ R1,D1AN11MOV P0,#0FFHMOV P1,#0FFHMOV P2,#0FFHMOV P3,#0FFH;单个跑马灯MOV R1,#08HMOV A,#7FH DAN2A: MOV P2,A CALL DELAY4RR ADJNZ R1,DAN2AMOV P0,#0FFHMOV P1,#0FFHMOV P2,#0FFHMOV P3,#0FFHMOV A,#7FHDAN3A: MOV P3,ACALL DELAY4RR ADJNZ R1,DAN3AMOV P0,#0FFHMOV P1,#0FFHMOV P2,#0FFHMOV P3,#0FFHMOV R1,#08HMOV A,#7FHDAN4A: MOV P1,ACALL DELAY4RR ADJNZ R1,DAN4AMOV P0,#0FFHMOV P1,#0FFHMOV P2,#0FFHMOV P3,#0FFHMOV R1,#08H ;单个跑马灯MOV A,#0FEHDAN1A: MOV P0,AACALL DELAY4RL ADJNZ R1,DAN1AMOV P0,#0FFHMOV P1,#0FFHMOV P2,#0FFHMOV P3,#0FFHMOV R1,#08HMOV A,#7FH DAN2A1: MOV P2,A CALL DELAY4RR ADJNZ R1,DAN2A1MOV P0,#0FFHMOV P1,#0FFHMOV P2,#0FFHMOV P3,#0FFHMOV R1,#08HMOV A,#7FH DAN3A1: MOV P3,A CALL DELAY4RR ADJNZ R1,DAN3A1MOV P0,#0FFHMOV P1,#0FFHMOV P2,#0FFHMOV P3,#0FFHMOV R1,#08HMOV A,#7FHDAN4A1: MOV P1,ACALL DELAY4RR ADJNZ R1,DAN4A1MOV P0,#0FFHMOV P1,#0FFHMOV P2,#0FFHMOV P3,#0FFHMOV R1,#12HMOV P0,#0FFHMOV P1,#0FFHMOV P2,#0FFHMOV P3,#0FFHMOV R1,#08H ;单个跑马灯MOV A,#0FEHDAN1A1: MOV P0,AACALL DELAY4RL ADJNZ R1,DAN1A1MOV P0,#0FFHMOV P1,#0FFHMOV P2,#0FFHMOV P3,#0FFHMOV R1,#4JIAOTI: ;交替闪烁MOV P0,#01010101BMOV P1,#01010101BMOV P2,#01010101BMOV P3,#01010101BCALL DELAYMOV P0,#10101010BMOV P1,#10101010BMOV P2,#10101010BMOV P3,#10101010BCALL DELAYDJNZ R1,JIAOTIMOV P0,#0FFHMOV P1,#0FFHMOV P2,#0FFHMOV P3,#0FFHMOV R1,#08H QUAN: ;闪烁的频率由慢变快MOV P0,#00HMOV P1,#00HMOV P2,#00HMOV P3,#00HCALL DELAYMOV P0,#0FFHMOV P1,#0FFHMOV P2,#0FFHMOV P3,#0FFHCALL DELAYDJNZ R1,QUANMOV P0,#0FFHMOV P1,#0FFHMOV P2,#0FFHMOV P3,#0FFHMOV R1,#08H ;渐渐变亮,然后熄灭MOV A,#07FHJIAN2: MOV P2,AACALL DELAY1RR AANL A,P2DJNZ R1,JIAN2MOV P0,#0FFHMOV P1,#0FFHMOV P2,#00HMOV P3,#0FFHMOV R1,#08HMOV A,#07FHJIAN3: MOV P3,AACALL DELAY1RR AANL A,P3DJNZ R1,JIAN3MOV P0,#0FFHMOV P1,#0FFHMOV P2,#00HMOV P3,#00HMOV R1,#08HMOV A,#07FH JIAN4: MOV P1,AACALL DELAY1RR AANL A,P1DJNZ R1,JIAN4MOV P0,#0FFHMOV P1,#00HMOV P2,#00HMOV P3,#00HMOV R1,#08HMOV A,#0FEH JIAN1: MOV P0,AACALL DELAY1RL AANL A,P0DJNZ R1,JIAN1MOV P0,#00HMOV P1,#00HMOV P2,#00HMOV P3,#00H MOV P0,#10101010B MOV P1,#01010101B MOV P2,#01010101B MOV P3,#01010101B ANL P2,#00010101B CALL DELAYANL P2,#00000101B CALL DELAYANL P2,#00000001B CALL DELAYANL P2,#00000000B CALL DELAYANL P3,#00010101b CALL DELAYANL P3,#00000101b CALL DELAYANL P3,#00000001b CALL DELAYANL P3,#00000000b CALL DELAYANL P1,#00010101b CALL DELAYANL P1,#00000101b CALL DELAYANL P1,#00000001b CALL DELAYANL P1,#00000000b CALL DELAYANL P0,#10101000B CALL DELAYANL P0,#10100000B CALL DELAYANL P0,#10000000B CALL DELAYANL P0,#00000000B CALL DELAYORL P0,#01000000b CALL DELAYORL P0,#01010000b CALL DELAYORL P0,#01010100b CALL DELAYORL P0,#01010101b CALL DELAYORL P1,#00000010b CALL DELAYORL P1,#00001010bCALL DELAYORL P1,#00101010b CALL DELAYORL P1,#10101010b CALL DELAYORL P3,#00000010b CALL DELAYORL P3,#00001010b CALL DELAYORL P3,#00101010b CALL DELAYORL P3,#10101010b CALL DELAYORL P2,#00000010b CALL DELAYORL P2,#00001010b CALL DELAYORL P2,#00101010b CALL DELAYORL P2,#10101010b CALL DELAYANL P0,#00010101B ANL P2,#00101010B CALL DELAYANL P0,#00000101BANL P2,#00001010B CALL DELAYANL P0,#00000001B ANL P2,#00000010B CALL DELAYANL P0,#00000000B ANL P2,#00000000B CALL DELAYANL P1,#10101000B ANL P3,#00101010B CALL DELAYANL P1,#10100000B ANL P3,#00001010B CALL DELAYANL P1,#10000000B ANL P3,#00000010B CALL DELAYANL P1,#00000000B ANL P3,#00000000B CALL DELAYORL P1,#01000000B ORL P3,#00000001B CALL DELAYORL P1,#01010000B ORL P3,#00000101BCALL DELAYORL P1,#01010100B ORL P3,#00010101B CALL DELAYORL P1,#01010101B ORL P3,#01010101B CALL DELAYORL P0,#00000000B ORL P2,#00000001B CALL DELAYORL P0,#00001010B ORL P2,#00000101B CALL DELAYORL P0,#00101010B ORL P2,#00010101B CALL DELAYORL P0,#10101010B ORL P2,#01010101B CALL DELAYORL P0,#11000000B ORL P2,#11000000B CALL DELAYORL P0,#11110000B ORL P2,#11110000B CALL DELAYORL P2,#11111100B CALL DELAYORL P0,#11111111B ORL P2,#11111111B CALL DELAYORL P1,#00000011B ORL P3,#11000000B CALL DELAYORL P1,#00001111B ORL P3,#11110000B CALL DELAYORL P1,#00111111B ORL P3,#11111100B CALL DELAYORL P1,#11111111B ORL P3,#11111111B CALL DELAYANL P1,#01111111B ANL P3,#11111110B CALL DELAYANL P1,#00111111B ANL P3,#11111100B CALL DELAYANL P1,#00011111BCALL DELAYANL P1,#00001111B ANL P3,#11110000B CALL DELAYANL P1,#00000111B ANL P3,#11100000B CALL DELAYANL P1,#00000011B ANL P3,#11000000B CALL DELAYANL P1,#00000001B ANL P3,#10000000B CALL DELAYANL P1,#00000000B ANL P3,#00000000B CALL DELAYANL P0,#11111110B ANL P2,#11111110B CALL DELAYANL P0,#11111100B ANL P2,#11111100B CALL DELAYANL P0,#11111000B ANL P2,#11111000BCALL DELAYANL P0,#11110000BANL P2,#11110000BCALL DELAYANL P0,#11100000BANL P2,#11100000BCALL DELAYANL P0,#11000000BANL P2,#11000000BCALL DELAYANL P0,#10000000BANL P2,#10000000BCALL DELAYANL P0,#00000000BANL P2,#00000000BCALL DELAYMOV R1,#4 JIAOT: ;交替闪烁MOV P0,#00110011BMOV P1,#00110011BMOV P2,#00110011BMOV P3,#00110011BCALL DELAYMOV P0,#11001100BMOV P1,#11001100BMOV P3,#11001100BCALL DELAYDJNZ R1,JIAOTMOV P0,#0FFHMOV P1,#0FFHMOV P2,#0FFHMOV P3,#0FFHMOV R1,#6SIGE: MOV P0,#11111110B MOV P1,#01111111BMOV P2,#01111111BMOV P3,#01111111BCALL DELAY1MOV P0,#11111100BMOV P1,#00111111BMOV P2,#00111111BMOV P3,#00111111BCALL DELAY1MOV P0,#11111000BMOV P1,#00011111BMOV P2,#00011111BMOV P3,#00011111BCALL DELAY1MOV P0,#11110000BMOV P2,#00001111B MOV P3,#00001111B CALL DELAY1MOV P0,#11100000B MOV P1,#00000111B MOV P2,#00000111B MOV P3,#00000111B CALL DELAY1MOV P0,#11000000B MOV P1,#000000111B MOV P2,#00000011B MOV P3,#00000011B CALL DELAY1MOV P0,#10000000B MOV P1,#00000001B MOV P2,#00000001B MOV P3,#00000001B CALL DELAY1MOV P0,#00000000B MOV P1,#00000000B MOV P2,#00000000B MOV P3,#00000000B CALL DELAY1DJNZ R1,SIGEMOV P1,#01111111B MOV P2,#01111111B MOV P3,#01111111B CALL DELAY1MOV P0,#11111100B MOV P1,#00111111B MOV P2,#00111111B MOV P3,#00111111B CALL DELAY1MOV P0,#11111000B MOV P1,#00011111B MOV P2,#00011111B MOV P3,#00011111B CALL DELAY1MOV P0,#11110000B MOV P1,#00001111B MOV P2,#00001111B MOV P3,#00001111B CALL DELAY1MOV P0,#11100000B MOV P1,#00000111B MOV P2,#00000111B MOV P3,#00000111B CALL DELAY1MOV P1,#000000111B MOV P2,#00000011B MOV P3,#00000011B CALL DELAY1MOV P0,#10000000B MOV P1,#00000001B MOV P2,#00000001B MOV P3,#00000001B CALL DELAY1MOV P0,#00000000B MOV P1,#00000000B MOV P2,#00000000B MOV P3,#00000000B CALL DELAY2MOV P0,#10000000B MOV P1,#00000001B MOV P2,#00000001B MOV P3,#00000001B CALL DELAY2MOV P0,#11000000B MOV P1,#00000011B MOV P2,#00000011B MOV P3,#00000011B CALL DELAY2MOV P1,#00000111B MOV P2,#00000111B MOV P3,#00000111B CALL DELAY2MOV P0,#11110000B MOV P1,#00001111B MOV P2,#00001111B MOV P3,#00001111B CALL DELAY2MOV P0,#11111000B MOV P1,#00011111B MOV P2,#00011111B MOV P3,#00011111B CALL DELAY2MOV P0,#11111100B MOV P1,#00111111B MOV P2,#00111111B MOV P3,#00111111B CALL DELAY2MOV P0,#11111110B MOV P1,#01111111B MOV P2,#01111111B MOV P3,#01111111B CALL DELAY2MOV P1,#11111111B MOV P2,#11111111B MOV P3,#11111111B CALL DELAY2MOV P0,#11111110B MOV P1,#01111111B MOV P2,#01111111B MOV P3,#01111111B CALL DELAY2MOV P0,#11111100B MOV P1,#00111111B MOV P2,#00111111B MOV P3,#00111111B CALL DELAYMOV P0,#11111000B MOV P1,#00011111B MOV P2,#00011111B MOV P3,#00011111B CALL DELAY2MOV P0,#11110000B MOV P1,#00001111B MOV P2,#00001111B MOV P3,#00001111B CALL DELAY2MOV P1,#00000111B MOV P2,#00000111B MOV P3,#00000111B CALL DELAY2MOV P0,#11000000B MOV P1,#000000111B MOV P2,#00000011B MOV P3,#00000011B CALL DELAY2MOV P0,#10000000B MOV P1,#00000001B MOV P2,#00000001B MOV P3,#00000001B CALL DELAY2MOV P0,#00000000B MOV P1,#00000000B MOV P2,#00000000B MOV P3,#00000000B CALL DELAY3MOV P0,#10000000B MOV P1,#00000001B MOV P2,#00000001B MOV P3,#00000001B CALL DELAY3MOV P1,#00000011B MOV P2,#00000011B MOV P3,#00000011B CALL DELAY3MOV P0,#11100000B MOV P1,#00000111B MOV P2,#00000111B MOV P3,#00000111B CALL DELAY3MOV P0,#11110000B MOV P1,#00001111B MOV P2,#00001111B MOV P3,#00001111B CALL DELAY3MOV P0,#11111000B MOV P1,#00011111B MOV P2,#00011111B MOV P3,#00011111B CALL DELAY3MOV P0,#11111100B MOV P1,#00111111B MOV P2,#00111111B MOV P3,#00111111B CALL DELAY3MOV P1,#01111111BMOV P2,#01111111BMOV P3,#01111111BCALL DELAY3MOV P0,#11111111BMOV P1,#11111111BMOV P2,#11111111BMOV P3,#11111111BCALL DELAY1LJMP MAIN DELAY: MOV R4,#255 D1: MOV R2,#248 DJNZ R2,$DJNZ R4,D1RETDELAY1: M OV R4,#180 D2: MOV R6,#248 DJNZ R6,$DJNZ R4,D2RETDELAY2: MOV R4,#90 D3: MOV R5,#248 DJNZ R5,$DJNZ R4,D3RETDELAY3: M OV R4,#60D4: MOV R7,#248DJNZ R7,$DJNZ R4,D4RETDELAY4: M OV R4,#30D5: MOV R3,#248DJNZ R3,$DJNZ R4,D5RETEND31。
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)比较不相等则转移;DJNZ (Decrement 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则转移;JBC(Jump if the Bit is set and Clear the bit) 位为1则转移,并清除该位;NOP (No Operation) 空操作;五、位操作指令(1种助记符)CLR 位清零;SETB(Set Bit) 位置1。
DS18B20-51单片机汇编程序
DS18B20程序,51单片机汇编程序,仅需修改前几行即可。
晶振大小12M,转换完全正确。
DQ BIT P1.3 ;温度传感器接口TEMP_L EQU 29H ;用于保存读出温度的低字节TEMP_H EQU 28H ;用于保存读出温度的高字节TEMP_XIAO EQU 27H ;用于保存温度的小数部分TEMP_GE EQU 26H ;用于保存温度的个位部分TEMP_SHI EQU 25H ;用于保存温度的十位部分DQ_DELAY EQU 40H/*****************************************DS18B20温度转换程序,包括转换成小数、个位、十位*****************************************/// lOOP:// ACALL DS_GET_TEMP ;读取DS18B20温度// ACALL DOFOR_TEMP ;转换为十进制的十位、各位和小树部分// AJMP lOOPDS_RST: ;DS18B20复位函数SETB DQNOPCLR DQMOV DQ_DELAY,#66 ;延时约660usACALL DELAYSETB DQMOV DQ_DELAY,#6 ;延时约60usACALL DELAYMOV C,DQJC DS_RSTMOV DQ_DELAY , #24 ;延时约240usACALL DELAYSETB DQRETDS_WR_BYTE: ;写指令函数SETB DQMOV R4,#8CLR CDS_WR_LOOP:CLR DQMOV DQ_DELAY , #1 ;延时10us,短一些较好ACALL DELAYRRC AMOV DQ , CMOV DQ_DELAY , #5 ;延时50us,因为采样有效期为15-45usACALL DELAYSETB DQNOPDJNZ R4,DS_WR_LOOPRETDS_RD_BYTE: ;读指令函数MOV R4,#8DS_RD_LOOP:CLR CSETB DQNOPNOPCLR DQNOPNOPNOPSETB DQMOV DQ_DELAY,#1 ;延时约10usACALL DELAYMOV C,DQMOV DQ_DELAY,#5 ;延时50usACALL DELAYRRC ADJNZ R4,DS_RD_LOOPMOV @R1,ARETDS_GET_TEMP: ;读取温度函数CLR EA ;由于DS18B20对时序要求较严格,所以采样期间关中断SETB DQACALL DS_RST ;执行指令之前,必须复位MOV A,#0CCH ;忽略64位ROM地址,直接发送存储器指令ACALL DS_WR_BYTEMOV A,#044H ;发送开始转换指令ACALL DS_WR_BYTESETB EA ;转换期间可以开中断MOV DQ_DELAY,#200 ;转换时间最长750ms,延时了800ms。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
51 单片机实用程序库4、1 流水灯程序介绍:利用P1 口通过一定延时轮流产生低电平输出,以达到发光二极管轮流亮得效果。
实际应用中例如:广告灯箱彩灯、霓虹灯闪烁。
程序实例(LAMP、ASM)ORG 0000HAJMP MAINORG 0030HMAIN:9MOV A,#00HMOV P1,A;灭所有得灯MOV A,#11111110BMAIN1:MOV P1,A;开最左边得灯ACALL DELAY ;延时RL A ;将开得灯向右边移AJMP MAIN ;循环DELAY:MOV 30H,#0FFHD1: MOV 31H,#0FFHD2: DJNZ 31H,D2DJNZ30H,D1RETEND4、2 方波输出程序介绍:P1、0 口输出高电平,延时后再输出低电平,循环输出产生方波。
实际应用中例如:波形发生器。
程序实例(FAN、ASM):ORG 0000HMAIN:;直接利用P1、0 口产生高低电平地形成方波//////////////ACALL DELAYSETB P1、0ACALL DELAY10CLR P1、0AJMP MAIN;////////////////////////////////////////////////// DELAY:MOV R1,#0FFHDJNZ R1,$RET五、定时器功能实例5、1 定时1 秒报警程序介绍:定时器1 每隔1 秒钟将p1、o得输出状态改变1次,以达到定时报警得目得。
实际应用例如:定时报警器。
程序实例(DIN1、ASM):ORG 0000HAJMP MAINORG 000BHAJMP DIN0 ;定时器0入口MAIN:TFLA G EQU34H ;时间秒标志,判就是否到50个0、2 秒,即50*0、2=1 秒MOVTMOD,#00000001B;定时器0 工作于方式1MOVTL0,#0AFHMOV TH0,#3CH ;设定时时间为0、05 秒,定时20 次则一秒11SETB EA;开总中断SETB ET0;开定时器0 中断允许SETBTR0 ;开定时0 运行SETB P1、0LOOP: AJMP LOOPDIN0:;就是否到一秒//////////////////////////////////////// INCC:INC TFLAGMOV A,TFLAGCJNE A,#20,REMOV TFLAG,#00HCPLP1、0;////////////////////////////////////////////////// RE:MOV TL0,#0AFHMOV TH0,#3CH ;设定时时间为0、05秒,定时20 次则一秒RETIEND5、2 频率输出公式介绍:f=1/ts51 使用12M 晶振,一个周期就是1微秒使用定时器1工作于方式0,最大值为65535,以产生200HZ 得频率为例:200=1/t:推出t=0、005秒,即5000微秒,即一个高电平或低电平得时间为2500微秒。
这样,定时值应设为65535-2500=63035,将它转换为十六进制则为:F63B. 具体程序请瞧f200、asm频率递增:200HZ:63035:F63B250HZ:63535:F82F300HZ:63868:F97C5、3 200HZ 频率输出程序介绍:利用定时器定时,在P1、0 口产生200HZ得频率输出.实际应用例如:传感器前级推动.程序实例(F200、ASM):ORG0000HAJMP MAINORG001BHAJMP DIN0MAIN:CLR P1、0 ;产生一个低电平,实际上就是从p1、0 口产生频率MOV TMOD,#00010000B ;定时器1 工作于方式0MOVTH1,#0F6HMOV TL1,#3BH ;频率产生得时间,详细请见频率公式SETB EA;开总中断13SETB TR1 ;开定时器1运行SETB ET1 ;开定时器1 允许LOOP: AJMP LOOP ;无限循环DIN0:CPL P1、0;产生一个高电平,下次来就就是低电平(因为取反),一个高电平与一个低电平形成一个周期MOV TH1,#0F6HMOV TL1,#3BH ;重置频率产生时间RETI ;返回END5、4 200——250HZ 变化频率输出程序介绍:利用定时器定时时间得变化,由P1、0口产生200—-250HZ 变化得频率。
实际应用例如:传感器前级推动、频率发生器。
程序实例(F250、ASM):ORG 0000HAJMP MAINORG 001BHAJMP DIN1MAIN:;定义频率200与300//////////////////////////////////F2H EQU 30HF2LEQU 31HF3H EQU 32HF3L EQU 33H14;//////////////////////////////////////////////////;定义频率保持初值//////////////////////////////////MOV R1,#50MOV R2,#02H;//////////////////////////////////////////////////;频率赋初值////////////////////////////////////////MOV F2H,#0F6HMOV F2L,#3BHMOV F3H,#0F8HMOV F3L,#2FH;//////////////////////////////////////////////////CLR P1、0 ;在P1、0口产生一个低电平,一个脉冲就是由一个高电平与一个低电平组成得MOV TMOD,#00010000B ;定时器工作于方式1MOV TH1,F2HMOV TL1,F2L ;200HZ输出SETB EA ;开总中断SETB TR1 ;开定时器1运行SETB ET1;开定时器1 允许LOOP: AJMP LOOPDIN1:CPL P1、0 ;取反P1、0 口,实际就是为了不断得将p1、0 得电平关系转换,即产生了频率;频率保持时间//////////////////////////////////////DJNZ R1,REMOV R1,#50DJNZ R2,REMOV R2,#02H15;////////////////////////////////////////////////// MOV A,F2HCJNE A,F3H,XIA ;频率高位到300HZ得高位了吗?AJMPJIA ;频率高位没到300HZ得高位值,直接将低位值加1XIA: INC F2LMOV A,F2LCJNE A,#00H,REINC F2HMOV A,F2HCJNEA,F3H,RE;///////////////////////////////////////////// ;频率高位加到300HZ 得高位值了,低位加一,到300HZ得低位值了吗,没到出去,到了关定时器JIA:INC F2L ;到了将200HZ 频率得低位加1MOV A,F2LCJNEA,#F3L,RECLR TR1;/////////////////////////////////////////////RE:MOV TH1,F2HMOV TL1,F2LRETIEND16六、数显0——9999 显示程序介绍:利用S51 得串行口功能,实现数码管0——9999得循环显示。
实际应用例如:电子计分牌。
程序实例(9999、ASM):ORG 0000HMAIN:GEE EQU 30HSHIEQU 31HBEI EQU32HQIAN EQU 33H;定义个十百千MOV GEE,#00HMOV SHI,#00HMOV BEI,#00HMOVQIAN,#00H;赋初值MOV SCON,#00H ;串行口工作于方式0、同步移位;显示个,十,百,千////////////////////////////////// DISPLAY:ACALL DELAY ;延时MOV DPTR,#SETTABMOV A,GEEMOVCA,A+DPTRMOV SBUF,AD1:JNB TI,D117CLR TIMOVDPTR,#SETTABMOV A,SHIMOVC A,A+DPTRMOVSBUF,AD2: JNB TI,D2CLR TIMOV DPTR,#SETTABMOV A,BEIMOVC A,A+DPTRMOV SBUF,AD3: JNB TI,D3CLR TIMOV DPTR,#SETTABMOV A,QIANMOVC A,A+DPTRMOVSBUF,AD4:JNB TI,D4CLR TI;/////////////////////////////////////////////;个,十,百,千得依次加一/////////////////////INC GEEMOV A,GEECJNE A,#0AH,DISPLAYMOV GEE,#00HINC SHIMOV A,SHICJNEA,#0AH,DISPLAY18MOV SHI,#00HINC BEIMOV A,BEICJNE A,#0AH,DISPLAYMOV BEI,#00HINCQIANMOV A,QIANCJNE A,#0AH,DISPLAYMOV QIAN,#00HAJMP DISPLAY;//////////////////////////////////////////////////;延时//////////////////////////////////////////////DELAY: MOV R1,#0FFHE1:MOV R2,#0FFHDJNZ R2,$DJNZR1,E1RET;/////////////////////////////////////////////SETTAB:DB 0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H,0FEH,F6H,0EEH,3EH,9CH,7AH,9EH,8EH ;数显代码END七、AD转换7、1 AD 转换(数码显示)程序介绍:利用ADC0809 模拟通道3 输入电压,经单片机19处理后在数码管上用相对应得16 进制数显示出来,0—5V 对应为0--0FFH,实际应用例如:数据采集。
程序操作:程序写完上电运行后,用本机配带得专用起微调图15 所示电位器,会在数码管上瞧到随不同电压而变化得对应16进制值。
也可以用万用表实ADC0809IN3 脚电压,来检验所对应显示得16 进制数。
图15程序实例(ad、asm):ORG 0000HMAIN1:ACALL DELAY ;延时ACALL AD ;呼叫AD 子程序;将转换得数字量屏蔽高位低位送显////////////////////MOV 31H,30HMOV A,30HANL A,#0FHMOV DPTR,#SETTABMOVC A,A+DPTRMOV SBUF,AD1:JNB TI,D1CLR TI;////////////////////////////////////////////////// ;将转换得数字量屏蔽低位高位送显////////////////////MOV A,30H20ANL A,#0F0HSWAP AMOV DPTR,#SETTABMOVC A,A+DPTRMOV SBUF,AD2:JNB TI,D2CLR TI;////////////////////////////////////////////////// AJMPMAIN1 ;返回主程序AD: MOV DPTR,#7F00H;指向转换地址MOV A,#03H ;指向转换口MOVX DPTR,A ;转换MOV R1,#64HD3: DJNZ R1,D3 ;等100微秒转换完MOVX A,DPTR;转换后得值给AMOV 30H,A ;转换得值给30HRETDELAY: ;延时MOV R2,#0FFHD14: MOV R3,#0FFHD12: DJNZ R3,D12DJNZ R2,D14RETSETTAB:DB 0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H,0FEH,0F6HDB0EEH,3EH,9CH,7AH,9EH,8EH217、2 十六进制两位数加法器(数码显示)程序介绍:将ADC0809输入得两个不同电压(相同电压也可相加,只就是为举例说明,所以取不同电压)所对应得16 进制数相加显示出来。