51单片机——汇编语言 1(延时函数与led闪烁)

目录

前言

延时函数

所用汇编语法:

延时函数编写 :

led闪烁

所用汇编语法:

LED程序编写:


前言

汇编语言是一种底层的机械语言,对时间控制精准下面我们以代码为例,讲解51汇编命令

延时函数

所用汇编语法:

子函数的格式:

<子函数名>:
....

RET//用于返回主函数

MOV类命令(数据传达):

格式:

MOV Rn,#data

功能:

常数data赋值给Rn


条件转移指令:

格式:

DJNZ  direct,rel

功能:

direct减一

direct≠0 执行 rel标号处

direct=0 顺序执行

延时函数编写 :

程序的延时时间与两个因素有关

  1. 所用晶振
  2. 延时程序的循环次数

机器周期的计算

        时钟周期= 1/fosc

        机器周期=12*时钟周期

        以12Mhz为例

          时钟周期

           1/12000000 \approx 0.00000008s    

         机器周期

         0.00000008*12\approx 0.000001s

        转换为 us 即为  1us

延时的计算:

        延时时间= (2*X+1+2)*Y*T+1T+2T

        注: 0<=X<=255 0<=Y<=255 (因为Rn为八位寄存器)

DELAY: MOV R1,#Y  ;1周期
D1:	   MOV R0,#X  ;1周期
D2:    DJNZ R0,D2 ;2周期
	   DJNZ R1,D1 ;2周期
	   RET        ;2周期

;NOP() ;如没办法达到想要时间,可用NOP来凑

led闪烁

所用汇编语法:

ORG命令:

格式:

ORG add16

功能:

设置程序起始地址

END命令:

格式:

END

功能:

结束指令,用在程序结尾

SETB命令:

格式:

SETB bit

功能:

寻址位置将bit的位置1

CLR命令:

格式:

CLR bit

功能:

寻址位置将bit的位置0

LCALL命令:

格式:

LCALL 函数名

功能:

调用函数

AJMP命令:

格式:

AJMP 函数名

功能:

无条件转移 (只能在2KB内范围内转移)

LED程序编写:

ORG 10 ;起始地址


START:SETB P1.0 ;端口置1
	  LCALL DELAY ;调用延时函数
	  CLR P1.0    ;端口置0
	  LCALL DELAY ;调用函数
	  AJMP START  ;跳转到START
	
DELAY: MOV R7,#250 ;延时函数
D1:	   MOV R6,#250
D2:    DJNZ R6,D2
	   DJNZ R7,D1
	   RET  ;返回主函数
	   END ;指令结束

你可能感兴趣的:(51单片机,51单片机)