您的位置:

c语言编写晶振频率12mhz延时1ms,12m晶振的延时函数

本文目录一览:

设51单片机晶振频率为12MHZ,延时1m的子程序

猜想你问的是1ms.

下面为你写出1ms的程序:

用的是11.0592M的,你如果真的需要是12M的,那自己直接修改成12M就可以了。调用的时候直接把uinsigned int ms改成1就是1ms.

void ConfigTimer0(unsigned int ms)

{

unsigned long tmp;

tmp = 11059200/12;

tmp = (tmp * ms)/1000;

tmp = 65536 - tmp;

tmp = tmp + 18;

T0RH = (unsigned char)(tmp 8);

T0RL = (unsigned char)tmp;

TMOD = 0xF0;

TMOD |= 0x01;

TH0 = T0RH;

TL0 = T0RL;

ET0 =1;

TR0 = 1;

}

请教老师,51单片机在12M晶振,C语言编程时,延时函数120次=1ms(书本上是这样的,不懂),是怎样得来的?

C的话其实时间没有办法完全定性地计算的

如果非得精确的话只能使用定时器了,或者汇编的也行

不过时间要求精度不是很高的话使用下面的代码就行了

当时使用示波器把时间完全调准的,65536ms范围内还是比较准的,已经可以满足通常的要求了:

#include "reg51.h" //头文件包含

//宏定义

#define uint unsigned int

#define uchar unsigned char

void delay(uint ms) // 毫秒级延时(AT89C52 @ 11.0592MHz)

{

uint ti;

while(ms--)

{

for(ti=0;ti112;ti++){}//112

}

}

调用方式如下:

delay(400); //开机延时400ms

够详细了吧?!

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

/*-----------------------------------------------

名称:delay1ms()

功能:延时1ms

晶振:12MHz 机器周期1us

时间计算:t=2+1+995+2=1000us =1.000ms

-----------------------------------------------*/

void delay1ms(void) //延时1ms子程序

{

unsigned char i,j;

for(i=5;i0;i--)

for(j=98;j0;j--);

}

对应汇编

/*-----------------------------------------------

名称:delay1ms

功能:延时1ms

晶振:12MHz 机器周期1us

时间计算:t=2+1+995+2=1000us =1.000ms

-----------------------------------------------*/

LCALL DELAY1MS ;2us

DELAY1MS:

MOV R6,#5 ;1us

DEL1: MOV R7,#98 ;1us

DJNZ R7,$ ;2*98=196us

DJNZ R6,DEL1 ;2us DLE1执行完所用时间(1+196+2)*5=995us。

RET ;2us