在EdSim51虚拟开发板和普中51开发板上实现LED灯的周期性闪烁

本文详细介绍了如何在EdSim51和普中51开发板上通过汇编和C语言实现LED灯的周期性闪烁,包括使用不同延迟函数调整闪烁频率,以及在实际硬件环境中的操作步骤。
摘要由CSDN通过智能技术生成

在EdSim51虚拟开发板和普中51开发板上实现LED灯的周期性闪烁

1. LED灯周期性闪烁的示例程序分析

以下是一个LED周期性闪烁的示例汇编程序。分号后为注释。

LOOP:
	SETB 90H;LED0置1
	LCALL DELAY;调用延时函数
	CLR 90H;LED0置0
	LCALL DELAY;调用DELAY, 进行"无效操作", 达到一定的延时效果
	AJMP LOOP;跳转到LOOP, 形成主程序的死循环

DELAY:
	MOV R7,#250;给通用寄存器R7, 赋值250
D1:	MOV R6,#250;给通用寄存器R6, 赋值250
D2:	DJNZ R6,D2;--R6 (R6减1), 结果不为0则跳转到D2继续, 否则执行下一条指令
	DJNZ R7,D1;--R7 (R7减1), 结果不为0则跳转到D1继续, 否则执行下一条指令
	RET;返回函数
END

该示例程序中 “MOV R6,#250” 和 “DJNZ R6,D2” 前者为单周期指令,在一个循环中,执行次数为250,周期数250,用时250μs;后者为双周期指令,在一个双重循环中,执行次数为250×250=62500,周期数为125000,用时125000μs。

DELAY函数中 “MOV R7,#250”, “MOV R6,#250” 为单周期指令,前者执行1次,后者执行251次;“DJNZ R6,D2”, “DJNZ R7,D1” 为双周期指令,前者执行250×250次,后者执行250次;“RET” 为四周期指令,执行1次。则该函数用时为1×1+251×1+250×250×2+250×2+1×4=125756μs,即LED灯每隔约0.13秒变化一次亮灭状态。

2. 在EdSim51上实现LED灯每隔1s的周期性闪烁(汇编程序)

若需实现较准确的LED每隔1s亮灭的周期性变化,可在示例程序代码的基础上增加一重循环,并调整赋值即可。其在EdSim51上实验的汇编代码如下。

LOOP:
	SETB 90H
	LCALL DELAY
	CLR 90H
	LCALL DELAY
	AJMP LOOP

DELAY:
	MOV R7,#79
D1:	MOV R6,#79
D2:	MOV R5,#79
D3:	DJNZ R5,D3
	DJNZ R6,D2
	DJNZ R7,D1
	RET
END

将此代码导入EdSim51中运行,可发现:上方计时器每过1s,下方的LED0就亮或灭一次。如下图。
在这里插入图片描述

3. 在普中51开发板上实现LED灯每隔1s的周期性闪烁(汇编程序、C程序)

开发板的使用方法

普中51开发板资料:https://pan.baidu.com/s/1t4M7p-WfYE7tDi36qqa-cQ?pwd=1234 提取码:1234

普中51开发板如下图所示。开发板的中央是STC89C52RC单片机。本次实验使用右侧的LED模块,该模块的8个LED灯与单片机的P2接口相连。

在这里插入图片描述

使用开发板,需先用数据线连接开发板与电脑,在电脑上安装CH340驱动(USB转串口的驱动,若已安装则忽略)。(驱动安装程序位置:5–开发工具\2–开发板CH340驱动\SETUP.EXE)

在这里插入图片描述

接着打开PZ-ISP软件,根据板载芯片型号选择芯片类型为 “STC89C5xx-RC series”, 将波特率设置为128000(如果按此波特率下载速度慢,可提高波特率;如果下载失败,可降低波特率)。其它选项保持默认设置。(软件位置:5–开发工具\3–程序下载软件\PZ-ISP\PZ-ISP.exe)

在这里插入图片描述

然后在下方文件路径点击“打开文件”,选择由实验程序生成的hex文件,点击“程序下载”即可将hex文件下载至单片机内并运行。

在这里插入图片描述

汇编程序

由于普中开发板的8个LED灯接在P2接口,故在EdSim51代码的基础上修改了SETB和CLR的地址。代码如下。

LOOP:
	SETB P2.0
	LCALL DELAY
	CLR P2.0
	LCALL DELAY
	AJMP LOOP

DELAY:
	MOV R7,#79
D1:	MOV R6,#79
D2:	MOV R5,#79
D3:	DJNZ R5,D3
	DJNZ R6,D2
	DJNZ R7,D1
	RET
END

将此代码导入Keil C51,在Keil设置的“输出”项内勾选“生成hex文件”,编译可得hex文件。连接开发板与电脑,将生成的hex文件导入普中51单片机软件,下载,开发板上的P0灯就开始按1s的间隔闪烁,如下图。
在这里插入图片描述

C程序

C程序代码同汇编程序代码一样设置了三重延迟循环,地址同为P2。代码如下:

#include <reg51.h>
#include <intrins.h>
void delay(int a)
{
	int i,j,k;
	for(i=0;i<a;i++)
		for(j=0;j<52;j++)
			for(k=0;k<52;k++)
				_nop_();
}
void main()
{
	while(1)
	{
		P2=0xff;
		delay(52);
		P2=0xfe;
		delay(52);
	}
}

将此代码导入Keil C51,在Keil设置的“输出”项内勾选“生成hex文件”,编译可得hex文件。连接开发板与电脑,将生成的hex文件导入普中51单片机软件,下载,开发板上的P0灯就开始按1s的间隔闪烁,如下图。
在这里插入图片描述

  • 23
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值