51单片机的延时函数快速生成技巧

      可以借助软件快速生成代码。利用STC-ISP 就可以

1.打开stc-isp后点击软件延时计算器

2.选择好使用的单片机型号、晶振频率、延时的时间

3.点击生成代码 即可。

有时候生成的c代码会有

_nop_();            //这句指令执行仅仅耗费1微秒的时间,可以删除,影响不大

        我们可以将这句代码给删除掉 ,不删除程序就会报错(你没有定义_nop_()的前提下)。删除后其实基本上不会产生太大的误差,因为1微妙实在是太短了。

使用心得:

        我们可以将生成的代码稍微改造一下,可以让我们的程序更加灵活,例如生成一个一毫秒的延时函数,通过在函数定义时增加一个形参变量,通过形参变量来控制1ms延时程序执行的次数来随意调节时长。

生成后复制过来的代码是这样的:

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

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

        在花括号里面的那一堆程序段就可以空耗CPU一毫秒,从而达到延时。

下面我们对它进行稍微的改造

void Delay(int n)		//@11.0592MHz
{
    while(n--)                //将延时一毫秒的程序循环执行n次,通过形参来调节延时的时长
    {
	    unsigned char i, j;

                            //    _nop_();注释掉这行代码
    	i = 2;
	    j = 199;
	    do
	    {
	    	while (--j);
	    } while (--i);
    }
}

        在声明函数时 新增一个形参变量,用来接收执行次数,灵活调整延时的时间。在函数体中包上一个while()循环。这样就改造完成了。

同样 ,汇编语言也可以这样,现象生成一个100毫秒的延时函数

DELAY100MS:			;@11.0592MHz
	PUSH 30H
	PUSH 31H
	MOV 30H,#180
	MOV 31H,#68
NEXT:
	DJNZ 31H,NEXT
	DJNZ 30H,NEXT
	POP 31H
	POP 30H
	RET

然后对延时子函数进行改造,例如

DELAY:	MOV	R7,#5		;@11.0592MHz
D1:
	PUSH 30H
	PUSH 31H
	MOV 30H,#180
	MOV 31H,#68
NEXT:
	DJNZ 31H,NEXT
	DJNZ 30H,NEXT
	POP 31H
	POP 30H
	DJNZ R7,D1
	RET

 第一行多加了        MOV    R7,#5           ,倒数第二行多加了     DJNZ R7,D1 

可以通过修改第一行#后面的数字来修改延时的时长,例如现在是5  那么延时的就是500ms

改成3  那么就延时300ms  因为我是拿延时100毫秒的汇编代进行改造的。

stc-isp里面除了可以烧写程序外还有很多功能,例如定时器的自动配置、波特率的计算等等

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值