单片机基础实验:汇编语言实现0.2秒闪烁灯控制

需积分: 5 0 下载量 135 浏览量 更新于2024-07-01 收藏 559KB DOC 举报
"单片机35个实例1(汇编).doc" 本文档主要介绍了如何使用单片机实现一个简单的闪烁灯实验,通过汇编语言编程。实验目的是让一个连接在P1.0端口的发光二极管以0.2秒的周期交替亮灭。以下是关键知识点: 1. **实验原理**: - 单片机通过控制P1.0端口的电平高低,实现二极管的亮灭。当P1.0为高电平时,二极管截止不亮;为低电平时,二极管导通发亮。 2. **延时程序设计**: - 由于单片机指令执行速度快,为了实现0.2秒的延时,需要编写延时子程序。文档中以12MHz的晶振为例,计算出特定指令序列执行所需的时间,从而构造出合适的延时循环。例如,R6和R7的特定值组合可以实现不同长度的延时,如R6=20,R7=248时,可延时10ms。 3. **延时子程序**: - 延时子程序的核心是嵌套循环,通过DJNZ指令(减1并跳转)进行计数,达到预定的循环次数。子程序如下: ``` DELAY: MOVR5, #20 ; R5初始化为20 D1: MOVR6, #20 ; R6初始化为20 D2: MOVR7, #248 ; R7初始化为248 DJNZR7, $ ; R7计数减1,未到零则跳回D2 DJNZR6, D2 ; R6计数减1,未到零则跳回D2 DJNZR5, D1 ; R5计数减1,未到零则跳回D1 RET ; 循环结束,返回 ``` - 这段子程序执行后,总共延时200ms,即0.2秒。 4. **程序框图与流程**: - 文档中提供了程序框图,展示了从启动到延时再到输出控制的逻辑流程。 5. **汇编源代码**: - 主程序包括设置P1.0为低电平(二极管亮)、调用延时子程序、设置P1.0为高电平(二极管灭)、再次调用延时子程序,然后无限循环。 ``` ORG 0 START: CLRP1.0 ; 设置P1.0为低电平 LCALL DELAY ; 调用延时子程序 SETBP1.0 ; 设置P1.0为高电平 LCALL DELAY ; 再次调用延时子程序 LJMP START ; 无限循环 DELAY: ... ; 延时子程序 END ``` 6. **C语言源程序**: - 提供了C语言版本的代码实现,这通常更易于理解和编程,但在此没有展示具体内容。 这个实例为初学者展示了如何利用单片机和汇编语言进行基本的定时和输出控制操作,是学习单片机控制基础的良好起点。