单片机的朋友请进!请问,最简单的延时程序是怎么计算的

单片机的朋友请进!请问,最简单的延时程序是怎么计算的,第1张

精确计算如下:

DELAY:

MOV R5,#20 ---1T

D1: MOV R6,#20--1T

D2: MOV R7,#248 -1T

DJNZ R7,$ ----2T,(2) 248 = 496

DJNZ R6,D2----2T,(1 + 496 + 2) 20 = 9980

DJNZ R5,D1----2T,(1 + 9980 + 2) 20 = 199660

RET-------2T, 1 + 199660 + 2 = 1996603

总共,耗用199660 T。

时间,关键是要取决于晶振频率。

当晶振频率=12MHz,则有 T = 1us。

一般微妙级延时不需要太精确,直接

void delayus(int xus)

{

char i=1;

while(i--);

}

就差不多可以了,一定要用精确的微妙延时可以写个延时10us的定时中断,进入延时函数开定时器,等待定时器到达10us,返回函数。

像毫秒级可以用秒表掐下,大概差不多就可以用了。很多芯片的时序 *** 作是不需要非常精确的延时的。

比较常用的有两种

一种比较简单的就是粗略的软件延时;

如:

void delay_1s(void)

{

unsigned char i,j;

for(i=0;i<128;i++)

for(j=0;j<254;j++);

}

这种通过调整i和j的最终值来确定延时时间,没有办法精确计算的。

另一种,做比较精确的延时,使用89C51的定时器来做

当AT89C51使用12M的晶体时,机器周期刚好是1us用定时器非常好计算,非常精确,一月偏一秒都可以做到,加入偏查校正可以做到更精确。这个一般书上都会有的,查下书咯。这里说不清楚。一下子也不记得了,现在AT89C51已经停产了,代替他的是89S51 4K FLASH,建议用89S52 8K FLASH,

你可以粗略这样看,在上面的指令中,执行次数最多的是djnz

rn,那么可以延时就是djnz指令执行时间。这里运用了嵌套,所以要×。

它的顺序是先执行djnz

r5,l3

;10次,执行djnz

r6,l2

250次

但是当r6减1那么就赋予r5初值10,所以r5又得运行10次,而每减一次1都要重复10次。同理,执行r7减一要重复前面的djnz指令10×250次,所以就有了

10×250×200×2us=1s

几个精确延时程序:在精确延时的计算当中,最容易让人忽略的是计算循环外的那部分延时,在对时间要求不高的场合,这部分对程序不会造成影响。

500ms延时子程序程序:(晶振12MHz,一个机器周期1us。)

void delay500ms(void)

{

  unsigned char i,j,k;

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

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

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

}

扩展资料

实现延时通常有两种方法:一种是硬件延时,要用到定时器/计数器,这种方法可以提高CPU的工作效率,也能做到精确延时;另一种是软件延时,这种方法主要采用循环体进行。

在电子技术中,脉冲信号是一个按一定电压幅度,一定时间间隔连续发出的脉冲信号。脉冲信号之间的时间间隔称为周期;而将在单位时间(如1秒)内所产生的脉冲个数称为频率。

频率是描述周期性循环信号(包括脉冲信号)在单位时间内所出现的脉冲数量多少的计量名称;频率的标准计量单位是Hz(赫)。电脑中的系统时钟就是一个典型的频率相当精确和稳定的脉冲信号发生器。

51单片机的指令有单字节、双字节和三字节的,它们的指令周期不尽相同,一个单周期指令包含一个机器周期,即12个时钟周期,所以一条单周期指令被执行所占时间为12(1/ 晶振频率)= x μs。常用单片机的晶振为110592MHz,12MHz,24MHz。

其中110592MHz的晶振更容易产生各种标准的波特率,后两种的一个机器周期分别为1 μs和2 μs,便于精确延时。

1、首先在电脑中打开Masm for Windows 集成实验环境。

2、接着输入DATAS SEGMENT;定义数据段,BUF0 DB 1;定义一个字节型变量,名称是BUF0,初始值是01H。

3、DATAS SEGMENT;定义数据段,BUF2 DW 1;定义一个字型变量,名称是BUF2,初始值是0001H。

4、DATAS SEGMENT;定义数据段,BUF4 DB 1 DUP(50);定义连续50个字节型变量,名称是BUF4,初始值是01H,DATAS ENDS;数据段定义结束。

5、最后完整段的Hello World程序,设置字符串变量DATAS  SEGMENT,就可以了。

以上就是关于单片机的朋友请进!请问,最简单的延时程序是怎么计算的全部的内容,包括:单片机的朋友请进!请问,最简单的延时程序是怎么计算的、c8051f020延时函数延时1us怎么写、在单片机AT89C51芯片中,设计一个一秒的延时程序,有多少种方法,具体如何等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/9508484.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存