单片机初学者:如何设计0.2秒延时程序

需积分: 10 11 下载量 78 浏览量 更新于2024-12-31 收藏 647KB DOC 举报
"这篇资源是针对初学者设计的40个单片机实验之一,主要讲解如何通过编写延时程序实现0.2秒的闪烁灯效果。实验目标是在P1.0端口连接的发光二极管L1上实现周期为0.2秒的亮灭交替。实验内容包括电路原理、硬件连线、程序设计方法和C语言源程序。" 在单片机编程中,由于单片机指令执行速度非常快,通常在微秒级别,为了实现特定时间间隔(如0.2秒)的延时效果,我们需要设计延时程序。实验中给出的延时程序基于单片机的12MHz石英晶体,每个机器周期为1微秒。通过循环计数来实现所需延时,具体方法是使用R6和R7寄存器进行双重循环,其中R7内的计数值对应于单次循环的延时,R6则控制循环次数。 延时程序的计算过程如下: - 当R6=10,R7=248时,总延时为10.002ms(10ms * (2+2*248) * 1微秒/机器周期)。 - 要得到200ms(0.2秒)的延时,可以设置R5=20,因为10ms * R5 = 200ms。 - 延时子程序如下: ```assembly DELAY: MOVR5, #20 D1: MOVR6, #20 D2: MOVR7, #248 DJNZR7, $ DJNZR6, D2 DJNZR5, D1 RET ``` 这个程序首先将R5置为20,然后在D1循环中,R6被设为20并在D2循环中R7递减直到为零,这样实现了20次10ms的延时,总计200ms。 在输出控制部分,通过设置P1.0端口的电平来控制发光二极管L1的状态。当P1.0输出高电平时,二极管熄灭;输出低电平时,二极管点亮。可以通过SETB和CLR指令分别设置端口为高电平和低电平。 实验的程序框图和汇编源程序展示了整个流程,包括开始时P1.0的清零以点亮二极管,调用延时子程序,然后设置P1.0为高电平熄灭二极管,再次调用延时子程序,最后跳转回开始,形成一个无限循环。 此外,资源还提到了C语言源程序,虽然没有展示具体内容,但可以推断其核心逻辑与汇编程序类似,使用循环结构和延时函数实现0.2秒的延时效果。 这个实验是学习单片机编程基础的好起点,它涉及到硬件连接、基本指令操作、延时程序设计以及输出控制等关键概念,对理解单片机工作原理和实际应用非常有帮助。