版权声明:本文为博主原创文章,未经博主允许不得转载。 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
本程序需要的三个指令:
- 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寄存器
-
DJNZ
-
LJMP
本程序分四块内容:
- 点亮LED:
CLR P1.0 ;点亮LED
- 熄灭LED:
SETB P1.0 ;熄灭LED灯
- 延时:
在本例中通过减1条件转移指令DJNZ
格式:DJNZ 操作数,标号
功能:使得操作数-1,并判断操作数是否等于0,如果不等于0,则跳转到标号处;如果登入0,则顺序执行。
MOV R1,#200 ;LED电亮后延时一段时间
D1: MOV R2,#150
D2: DJNZ R2,D2
DJNZ R1,D1
- 循环:
循环用到的是无条件转移指令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-