15届蓝桥杯备赛(第一篇 使用STC软件自动生成延时函数)

已参加过一次蓝桥杯,在此分享经验且再次进步。

一 ,打开STC-ISP软件---找到软件延时计算器,按照以下我给参数进行修改。

注意哦!这个在考场上是可以直接使用的。

二 ,优化延时函数

void Delay1ms(void)	//@11.0592MHz
{
	unsigned char data i, j;

	_nop_();
	i = 2;
	j = 199;
	do
	{
		while (--j);
	} while (--i);
}

生成的代码具有局限性

上面是我从软件中生成复制的代码,软件已经自动生成了一个函数供我们调用,短短几步就做好了一个延时函数,确实不错。

但这个函数在调用时只能延时 1ms ,如果说我想延时 2ms、3ms、4ms... 难道要不停的调用函数吗?或者再去软件中生成新的延时函数?那岂不是很麻烦。

其实不必这样,我们只需简单的优化一下代码,就可以实现我们想要的功能。

一步使代码变万能

软件所生成的函数是延时 1ms,就是说单片机执行这个函数的程序体时用时为 1ms,那么首先我们用 while 循环把程序体框住,然后每执行一次让控制 while 循环结束的变量减一,这个变量我们通过形参传递到函数中。

注意:当使用 _nop_() 函数(可理解为软件延时)时,必须在开头添加头文件 #include <intrins.h>。

优化后的代码如下:

void Delay1ms(unsigned int _ms)	//@11.0592MHz
{
	unsigned char data i, j;
    while(_ms--)
{
	_nop_();
	i = 2;
	j = 199;
	do
	{
		while (--j);
	} while (--i);
}
}

到这里我们的延时函数就完成了,可以只有调用实现你想要的延时时间。

调用延时函数

经过我们优化后的延时函数在调用时极其简单,只需在调用函数的语句中放入实参就好啦。

调用演示代码如下:

#include <reg52.h>
#include <intrins.h>

void Delay1ms(unsigned int _ms);        /* 声明延时函数 */

void main()
{
    Delay1ms(1);        /* 实参为 1,则延时 1ms */

    Delay1ms(20);       /* 实参为 20,则延时 20ms */

    Delay1ms(500);      /* 实参为 500,则延时 500ms */

    /* ...... */
}


void Delay1ms(unsigned int _ms)		//@11.0592MHz
{
    unsigned char i, j;

    while (_ms--)
    {
        _nop_();
        i = 2;
        j = 199;
        do
        {
            while (--j);
        } while (--i);
    }
}

结尾

至此,51 单片机的延时函数就编写完成啦, 快去试着生成一个延时函数,将它应用到你的项目当中吧。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值