• Share on Google+
单片机c语言中nop函数的使用方法和延时计算
{j--};

作用:对于延时很短的,要求在us级的,采用“_nop_”函数,这个函数相当汇编NOP指令,延时几微秒。
while(j);
环体要比for结构做循环体好。
其中T为DJNZ指令执行时间(DJNZ指令为双周期指令)。

void delay1s(void)

C:0x0806 DDFE DJNZ R5,C:0806

_nop_(); // 产生一条NOP指令

第二、在FOR循环语句中,尽量采用变量减减来做循环。

for(k=81;k>0;k--);

C:0x0806 DDFE DJNZ R5,C:0806

unsigned char i,j,k;

void delay500ms(void)

}
#include // 声明了void _nop_(void);

RET

C:0x0802 7E04 MOV R6,#0x04

for(i=5;i>0;i--)

}

for(j=116;j>0;j--)

这精确延时子程序就被C51编译为有下面的指令组合完成

void delay200ms(void)

变量k的初值为l,则总延时时间为:l×(n×(m×T+2T)+2T)+3T,
定时数=(TIME1*4+2+1)*TIM2*2+4

下面举例说明:

C:0x0802 7E84 MOV R6,#0x84

{unsigned char b,c;

四. 1s延时子程序

for(j=202;j>0;j--)

C:0x0808 DCFE DJNZ R4,C:0808

敬礼。

C:0x080C 22 RET

在选择C51中循环语句时,要注意以下几个问题
while(i);
do{k--};
MOV R3,04H
LOOP2: NOP ; 1
i=255;
MOV 1
LOOP2: MOV R6,#0FFH
while(k);
NOP ; 1

C:0x080A DDFA DJNZ R5,C:0806

C:0x0804 7D96 MOV R5,#0x96

DJNZ R7,LOOP2

刚刚又学了一条,用_nop_();时记得加上#include 头文件

unsigned char i,j
故其精确时间的计算也很方便。

程序:

k="c";
i--;};

C语言最大的缺点就是实时性差,我在网上到看了一些关于延时的讨论,其中有篇文章

或少在延时子程序中定义局部变量,所有的延时子程
同样对于更长时间的延时,可以采用多重循环来完成。

for(k=150;k>0;k--);

本文引用地址:

keil C51中,直接调用库函数:
unsigned char n;
{j=255;


这因为在C51编译器中,对不同的循环方法,采用不同的指令来完成的。

值为m,变量j的初值为n,则总延时时间为:m×(n×T+T),
分享文章轻松赚奖金!
将连结分享文章给好友或是贴至论坛、社群网站上,只要有人点击你分享的文章连结,就可以赚点击奖金,最棒的是,你还有机会可以再赚到一笔可观的【成交奖金】
分享你的专属连结,让生活更美好!