导航:首页 > 操作系统 > 单片机延时1ms函数

单片机延时1ms函数

发布时间:2022-06-19 00:50:55

单片机延时程序怎么写是根据什么原理写的有什么方法吗

1、比较死板的方法是自己写一个delay函数,里面用for,while等做一些循环,下面是1ms的延时函数
void
delay1ms(void)
{
unsigned
char
i,j;
for(i=0;i<10;i++)
for(j=0;j<33;j++);
}
具体算法是//(3j+2)*i=(3×33+2)×10=1010(us),但精确度不高,如果想准确点可以调节相应的参数用示波器来实
现,上面的函数适用于程序简单,对时间性要求不高,如:点led灯,单个按键操作等等。
2,就是用定时器中断里面设定标志位来产生延时的方法,比如你可以把定时器设定为每1ms进一次中断,在中断里面
把一个标志位(如flag)置一
当你需要1ms延时的时候你可以先初始化定时器,然后查询标志位是否置一,置一则执行if后面的语句,即if(fla{};
当你需要10ms延时时,你可以把flag设置为uchar,中断里面flag++;外面查询用if(10==flag){};
以此类推,上面的方法精确度高适用地方。

② 设单片机系统采用6M晶振,写出用定时器1方式2实现1ms的延时程序

6M晶振,方式2定时1mS的时间太长,不能直接实现,(最大定时应该是512uS)下面是500uS定时示例程序,可在中断函数中计数每2次得1S。
void Timer1Init(void) //500微秒@6.000MHz
{
AUXR &= 0xBF; //定时器时钟12T模式
TMOD &= 0x0F; //设置定时器模式
TMOD |= 0x20; //设置定时器模式
TL1 = 0x06; //设置定时初值
TH1 = 0x06; //设置定时重载值
TF1 = 0; //清除TF1标志
TR1 = 1; //定时器1开始计时
}

③ 如何使用51单片机的定时器写一个精确延时1ms的延时子函数。

要是精确延时的话,最好用汇编程序,每一条指令都能算出时间,哈

④ 单片机延时1ms问题

首先,不知道你的晶振频率是多少,然后不知道你使用的是哪种类型的单片机。
我根据KEILC的测试:for循环这个语句是双周期指令2个机器周期,j=0;j<33;j++。这有三步单周期指令,每次三个机器周期。。。所以时间是(3j+2) 乘以循环次数i。就是时间微秒
上述指令在12MHZ的晶振频率,AT89S52的单片机测试情况下为0.0001060秒。也就是1MS

⑤ 51单片机中,定时器怎么做延时函数用,比如说,要精确延时1s,该怎么写

unsigned long TimeTickCount;//1ms计时器
void Timer0Configuration();
void Delay1ms(unsigned int a);
void main()

{
while(1)
{
Delay1ms(1000);//1s延时;
}
}
void Delay1ms(unsigned int a)//0~65535
{
unsigned long b;//0~0xffffffff
b = TimeTickCount;//记下及时器初始值
while((TimeTickCount-b<a)||(0xffffffff+TimeTickCount-b<a));
//当计数器未溢出只须用 计数器实时变化的值-其初始值
//当计数器溢出则须用 计时器上限值+计数器实时变化的值-其初始值
}
void Timer1Configuration()
{
TMOD=0X10;//选择为定时器模式,工作方式1。
TH1=0Xfc; //给定时器赋初值,定时1000us
TL1=0X18;
ET1=1;//打开定时器1中断允许
EA=1;//打开总中断
TR1=1;//打开定时器
}
void interrupt_timer1() interrupt 3 //1000us
{
TH1 = 0xfc; //重装
TL1 = 0x18;
TimeTickCount++;//1000us计时器
}

⑥ 51单片机c语言延时函数 Void delay 1ms(unsigned int ms){un

C程序中可使用不同类型的变量来进行延时设计。经实验测试,使用unsigned char类型具有比unsigned int更优化的代码,在使用时应该使用unsigned char作为延时变量。 以某晶振为12MHz的单片机为例,晶振为12MHz即一个机器周期为1us。

void delay_ms(unsigned int ms_number) // ms延时函数 (AT89C51 @ 11.0592MHz)

{

unsigned int i;

unsigned char j;

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

{

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

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

}

}

void Delay()

{

unsigned char a,b,c;

for(a=0;a<?;a++)

for(b=0;b<?;b++)

for(c=0;c<?;c++);

}

void delay_ms(unsigned int ms)

{

unsigned int i;

unsigned char j;

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

{

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

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

}

}

拓展资料

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

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



⑦ 请帮忙在51系列单片机系统中,编写一个延时1ms的子程序。谢谢。。

1、首先,在电脑中打开keil软件,创建好工程,然后添加c文件,如下图所示。

⑧ c编程时,51单片机怎么用定时器写一个延时1ms的子函数

好办
用C51,方式一
void delay(unsigned int T) //T的单位取微秒
{
signed int cnt; //这里用符号数的相反数 就是2^16-n的原码,也可以定义无符号数自己换成2^16-n

cnt=-(fosec*1.0/12)*T; // fosec的单位MHz

TMOD=0x01;
TH0=(unsigned char)(cnt>>8);
TL0=(unsigned char)cnt;
TR0=1;
while(!TF0);
TR0=0;
TF0=0;//加这句是为了可以循环使用

}

⑨ 51单片机中,写个延时函数,延时1ms,该怎么写,为什么

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

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

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

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

unsigned chari,k;

for(j=i;j>0;j--)
for(k=125;k>0;k--);
}

⑩ C51单片机,谁帮我写个1ms的延时

void delay(uint i) //调用子程序所需时间)
{
uchar j,k;
for (j=i; j>0; j--)
for(k=0;k<30;k++);
}

在程序调用函数就可以得到1ms的程序,具体调用如下:
delay(10); //延时1.011ms

阅读全文

与单片机延时1ms函数相关的资料

热点内容
解除pdf密码 浏览:709
光棍程序员闯关 浏览:566
2016android版本下载 浏览:42
程序员开车卖服装 浏览:395
快速记忆法pdf 浏览:518
java定义异常类 浏览:709
的运行命令 浏览:587
24v电动驻车空调压缩机 浏览:842
老程序员编程步骤 浏览:305
物理去除加密软件 浏览:227
汇编语言可调试编译器 浏览:447
jpeg如何转成pdf 浏览:841
微机室为什么有服务器 浏览:657
安卓手机怎么打语音电话不断网 浏览:458
单片机汇编头文件 浏览:946
juniper命令行 浏览:68
程序员咨询销售工作怎么样 浏览:782
苹果文件服务器是什么 浏览:180
企业透明加密软件有监视功能吗 浏览:494
桌面的运行命令 浏览:10