单片机外接24M的晶振,1ms的基准延时函数用C语言怎么写

单片机外接24M的晶振,1ms的基准延时函数用C语言怎么写,第1张

定时器T0 工作方式1 晶振频率24MHz

定时器最大定时时间(us):32768

定时器最小定时时间(us):05

1ms精确定时C51代码

void T0_init(void) //定时器初始化

{

TMOD |= 0x01;

TH0 = 0xf8; //设置定时器计数初值,定时1000us

TL0 = 0x33;

IE |= 0x82; //打开总中断

TR0 = 1; //启动定时器

}

void T0_intservice(void) interrupt 1 //定时器中断服务

{

TH0 = 0xf8; //重装载定时器计数初值

TL0 = 0x33;

//这里可以插入其他处理程序,不会影响定时器工作

}

用汇编语言写可以精确计算,但有时想拼出整数的ms或10ms也不容易,计算方法如下图说明:

而C语言靠经验和实验得来的,如下面程序

如果不准(与晶振频率有关),调K的值,,软件仿真查看,直到大致准确,想更精确用定时器

void delay(unsigned char i)  //延时程序

{

unsigned char i,k;

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

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

}

一般延时1ms的程序是:

void Delay(uint x)

{

uchar i;

while(x--)

{

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

}

}

那么当你在别的函数中用到Delay(10000);就是延时10000ms,也就是10S

DelayMS(300)表示希望系统delay 300毫秒,系统有自己的RTC,根据硬件的晶振(Hz)可以计算出一次振荡大约多少耗时,这样就能大约算出1ms需要多少次振荡;

简单比喻一次振荡需要1us,那1ms就是1000次振荡,300ms就是300x1000次振荡,这样就能大概的计算出300ms delay;

这得看你的CPU运行一条指令得多久,像单片机89C51一般一条1us。

C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言;

尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台;

二十世纪八十年代,为了避免各开发厂商用的C语言语法产生差异,由美国国家标准局为C语言制定了一套完整的国际标准语法,称为ANSI C,作为C语言最初的标准。

延时时间的计算与单片机的晶振频率有关。若晶振频率为12Mhz,那么单片机每震动一次所需要的时间是1/12M s。那么再来看看单片机执行一次自减所需要的振动次数是96次,假如我们对时间要求不是特别精确的话,可以约等于100来计算。现在通过上面两个数据可以得出:单片机每执行一次自减所需要的时间是1/12M 100(s),即1/120000 s,逆向计算一下,每1ms需要自减多少次?120次对吧。所以一个简单的延时功能就诞生了,我们只需要自减120次,就可以延时1ms,如果我们要延时50ms呢,那就自减50120=6000次。那么在程序上如何表达呢?我们可以用两套for循环

void delay(int i){

int x,y;

for(x=i;x>0;x--){

for(y=120;y>0;y--)

}

}

参数 i 代表该函数延时多少ms

以上就是关于单片机外接24M的晶振,1ms的基准延时函数用C语言怎么写全部的内容,包括:单片机外接24M的晶振,1ms的基准延时函数用C语言怎么写、51单片机中,写个延时函数,延时1ms,该怎么写,为什么、52单片机C语言中“Delay”是什么意思,怎么用等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: http://outofmemory.cn/zz/9440036.html

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

发表评论

登录后才能评论

评论列表(0条)

保存