单片机C语言编程关于延时函数

单片机C语言编程关于延时函数,第1张

你是用的uvision吧?我用的uvision4,把程序编好运行,然后进行调试(在此要设置两个断点就是一个在Delay延时函数之前,一个断点设在延时之后),然后你会在左边register栏会看见一个   sec:000014182  这个就是软件运行到断点处所用时间,然后再运行一次(这次就是运行完延时函数所用时间)。你把两次的时间做差值就是延时函数延时时间。再附图两张。

//33MHz 一个定时周期延时50ms

#include <reg51h>

void InitTimer0(void)

{

TMOD = 0x01;

TH0 = 0x0CA;

TL0 = 0x4A;

EA = 1;

ET0 = 1;

TR0 = 1;

}

void main(void)

{

InitTimer0();

}

void Timer0Interrupt(void) interrupt 1

{

TH0 = 0x0CA;

TL0 = 0x4A;

//add your code here!

}

大哥,一般都不像你这样写的呀!

void delay10ms(int x)

{ int i,j; // 声明变量

for (i=1;i<x;i++) // 执行x次,延迟X10ms

for (j=1;j<1200;j++);// 执行120次,延迟10ms

} // delay1ms()函数结束

如果你的延时精度要求不高,调用delay10ms(100)约1s就可以了呀。如果你的延时要求精度高的话,用51内部的定时器

delay函数是一般自己定义的一个延时函数。

C语言定义延时函数主要通过无意义指令的执行来达到延时的目的。

关于单片机C语言的精确延时,网上很多都是大约给出延时值没有准确那值是多少,也就没有达到精确高的要求,而本函数克服了以上缺点,能够精确计数出要延时值且精确达到1us,本举例所用CPU为STC12C5412系列12倍速的单片机,只要修改一下参数值其它系例单片机也通用,适用范围宽。

ms=1时,第一个for循环进入,然后在第二个for循环中执行100次

再回到第一个for循环中进行第二次循环

就这样

你可以进入编辑器,添加断点,自行查看代码执行过程

通用办法,可以类推:

DELAY1s:

        MOV   R5,#08H           ; ∵ 1s=1000000us 

        MOV   R6,#0A2H          ; ∴ 1000000/2=500000

        MOV   R7,#20H           ; 500000用16进制表示为: 07A120

                                ; 所以 R5=07H+1=08H

                                ;     R6=0A1H+1=0A2H

                                ;     R7=20H

loop:   DJNZ  R7,$              ; 延时时间≈2×[(R5-1)×256+R6-1]×256+R7

        DJNZ  R6,loop           ; 当R5、R6等于0,相当于256参与运算

        DJNZ  R5,loop           ; 当R5、R6等于0,相当于256参与运算

        RET

void delay(uint n)

{

uint i,j;

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

{

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

}

}

当n=1是延时大约是1ms,就是说n等于都少就延时多少ms,当然n的值不超过uint的最大值。

头文件下请定义宏

#define uchar unsigned char

#define uint unsigned int

51单片机的定时器工作方式有4中,其中3种需要在中断函数中重装初值,而且C51明确规定中断函数不能传入参数也不能返回参数,那么这样一来就只能用不用重装初值的工作方式2了,我给出了工作方式2的初始化函数:

void init(unsigned int x)

{

TMOD=0x02;

TH0=x;

TL0=x;

EA=1;

ET0=1;

TR0=1;

}

这样将x作为定时器的初值传入,当TL0计数完成时,TH0会自动将值赋给TL0,TH0不变,当然你自己来定义键盘函数或者什么函数来决定x的值。

希望我的回答能帮助到你。

以上就是关于单片机C语言编程关于延时函数全部的内容,包括:单片机C语言编程关于延时函数、51单片机定时器方式1,晶振33hz,延时1秒,怎么用c语言编程、怎么把单片机的数字电子钟延时1s等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存