程序代码
现在我用LED闪烁的代码进行讲解说明
/********************************************************************
* LED闪烁的简单试验
*
********************************************************************/
#include <reg51.h> //此文件中定义了51的一些特殊功能寄存器
void delay(unsigned int i); //声明延时函数
void main()
{
while(1)
{
P2 = 0x00; //置P0口为低电平
delay(6000); //调用延时程序
P2 = 0xff; //置P0口为高电平
delay(6000); // 调用延时程序
}
}
/*******延时函数*************/
void delay(unsigned int i)
{
unsigned char j,k;
for(i; i > 0; i--)
for(j = 255; j > 0; j--);
for(k = 255; k > 0; k--);
}
好的,可以看到我上面的延时函数主要是用了三层循环。那么其中 j 和 k 的值是不是可以取任意值?最大可以取多大呢?下面我通过不断试验去测试一下这两个值。
计算延时时间
设置断点
为了计算延时时间,我们要在以下两个地方设置断点。分别是13行和15行,为什么设置这两行就可以计算延时时间呢?因为中间间隔着一个延时函数嘛,所以我们只要将执行到这两行的时间做一个差,便可以得到延时时间。
执行到单行
晶振公式
在此之前,我先要介绍一个公式。但是用这个公式需要用到一些数据,为了得到这些数据我们还需要做以下两个步骤:
进入调试模式
我们点击下面这个按钮,进入调试模式
获得数据
然后,我们就可以在左边的列表看到这两个数据。其中,states是指令数,sec是从程序开始运行到执行本行所花的时间,基于不同的晶振。
调整晶振
这个公式和晶振相关,那么去哪里调整晶振呢?通过下面的两个步骤,我们可以调整晶振。
晶振公式
试验一
我们现在看看最初j=255和k=255这种情况下,这两个值是多少。
试验二
这次,我把j调整成之前的两倍,看看这两个数据会是什么样的结果。
试验三