单片机实验----LED灯闪烁(汇编)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/mylovewanzi/article/details/82854554

单片机实验----LED灯闪烁(汇编)


代码如下:

		  ORG 0000H
	MAIN: CLR P1.0  		;点亮LED
		  MOV R1,#200		;LED电亮后延时一段时间
	D1:  MOV R2,#150
	D2:	  DJNZ R2,D2
		  DJNZ R1,D1
		  SETB P1.0			;熄灭LED灯
		  MOV R1,#200		;LED电熄灭后延时一段时间
	D1_1: MOV R2,#150
	D2_2: DJNZ R2,D2_2
		  DJNZ R1,D1_1
		  LJMP MAIN			;跳回到MAIN
	END

本程序需要的三个指令:

  1. MOV :
    MOV指令是数据传送指令,也是最基本的编程指令,用于将一个数据从源地址传送到目标地址(寄存器间的数据传送本质上也是一样的)。其特点是不破坏源地址单元的内容。
    例如:
  • MOV AX,2000H ;将16位数据2000H传送到AX寄存器
  • MOV AL,20H ; 将8位数据20H传送到AL寄存器
  • MOV AX,BX ; 将BX寄存器的16位数据传送到AX寄存器
  • MOV AL,[2000H] ;将2000H单元的内容传送到AL寄存器
  1. DJNZ

  2. LJMP

本程序分四块内容:

  1. 点亮LED:
   CLR P1.0  		;点亮LED
  1. 熄灭LED:
   SETB P1.0			;熄灭LED灯
  1. 延时:
    在本例中通过减1条件转移指令DJNZ
    格式:DJNZ 操作数,标号
    功能:使得操作数-1,并判断操作数是否等于0,如果不等于0,则跳转到标号处;如果登入0,则顺序执行。
	MOV   R1,#200		;LED电亮后延时一段时间
	D1:  MOV R2,#150
	D2:	  DJNZ R2,D2
		  DJNZ R1,D1
  1. 循环:
    循环用到的是无条件转移指令LJMP
    格式:LJMP 标号
    注意:这里的无条件是指不规定条件
	LJMP MAIN			;跳回到MAIN

时间:2018年9月26日15:54:01

这里再补充点内容:怎么做到延时时间的精准计算呢?

要精确计算时间,首先需要了解下面几个概念:

时钟周期(震荡周期):就是晶体振荡器CY的时钟周期。对于单片机来说,选定了晶体振荡器,时钟周期也就确定了。
例如:12MHz的晶体振荡器的时钟周期为(1/12)us,对应的机器周期就是12X(1/12)us=1us。

机器周期:单片机在执行一条指令时,会将执行过程划分为若干个阶段,每个阶段完成一个基本操作,如取指令、都存储器、写存储器等,完成一个基本操作的时间就是机器周期。

指令周期:从字面上就很好理解,指的是完成一条指令的时间,每条指令执行的时间是固定的,不同指令执行的时间可能不同。单片机有但机器周期指令、双机器周期指令和四机器周期指令。

所以说要精确精算延时时间,你需要知道晶体振荡器的频率和指令周期。

时间:2018年9月27日13:15:57


-END-

猜你喜欢

转载自blog.csdn.net/mylovewanzi/article/details/82854554