当前位置:首页 » 编程语言 » 单片机c语言延时程序

单片机c语言延时程序

发布时间: 2023-06-06 14:59:23

① 用c语言怎么在单片机AT89C51上编写一个延时10秒的程序

1、十秒对于单片机来说是很长很长的时间了,单片机十秒的时间什么事都不能做,只在跑这延时程序,那是什么概念,用中断的话,单片机正常运行其他程序,只是时间到了才过来处理延时以后的程序,效率不知道高了多少 。

2、例程:

//假设晶振12MHZ

#include"reg51.h"
unsignedintYSJS=0;
voidmain(void)
{
TMOD|=0X10;//定时器1工作于方式1,16位定时器
TH1=0XFF;//定时器1定时时间=500uS
TL1=0X06;
ET1=1;//使能定时器1中断
EA=1;//开总中断
while(1)
{
}
}
voidTIMER1(void)interrupt3//定时器1中断函数使用默认寄存器组
{
TH1=0XFF;//定时器1定时时间=500us
TL1=0X06;
YSJS++;
if(YSJS==20000)//500uS*20000=10000000us=10s
{
P1=P1^0X01;//P1.0十秒钟翻转一次
YSJS=0
}
}

② 单片机c语言的延时程序500ms

根据外部晶振的不同,延时1毫秒的循环次数也不一样,一般12M晶振的话用 for(j=time;j>0;j--);延时时,1毫秒time大概为125左右,这里用110,大概晶振为11.0592M,所以这段程序,内部循环完成1毫秒延时,外部循环完成500毫秒延时。

③ 51单片机用c语言怎么写延时函数

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

④ 单片机C语言延迟程序

下面的延时的基本程序(中断加计数器)
********
void
T0_int(void)
interrupt
1
{

TH0
=
0x4C;
//重新装载,50MS定时器初值

TL0
=
0x00;

T0_count++;

if(T0_count==20)
//1S到

{

T0_count
=
0;

//在这写程序

}
}
main()
{

TMOD
=
0x01;//定时器0,工作方式1,16位计数

TH0
=
0x4C;
//50MS定时器初值

TL0
=
0x00;

IE
=
0x82;
//开总中断,开T0中断

EA
=
1;

ET0
=
1;

TR0
=
1;

T0_count
=
0;

i
=
0;
loop:

goto
loop;
}
还有:
for(us=0;us<60;us++);
/*延时500us*/
for(us=0;us<1;us++);
/*
延时15微秒*/
for(us=0;us<5;us++);
/*
延时51微秒*/

⑤ 如何用单片机的delay实现延时

单片机中的delay()的单位时间不是系统提供的,而是用户自己编制的。

如果用循环语句实现的循环,没法计算,但是可以通过软件仿真看到具体时间,但是一般精精确延时是没法用循环语句实现的。

如果想精确延时,一般需要用到定时器,延时时间与晶振有关系,单片机系统一般常选用11.059 2 MHz、12 MHz或6 MHz晶振。第一种更容易产生各种标准的波特率,后两种的一个机器周期分别为1 μs和2 μs,便于精确延时。本程序中假设使用频率为12 MHz的晶振。

最长的延时时间可达216=65 536 μs。若定时器工作在方式2,则可实现极短时间的精确延时;如使用其他定时方式,则要考虑重装定时初值的时间(重装定时器初值占用2个机器周期)。

(5)单片机c语言延时程序扩展阅读

单片机C语言程序中延时函数delay的原理是:仅仅执行一些,没有实质性影响的所谓“无意义指令”,比如做比大小啊,做某个int的自加运算啊之类的。

单片机的有些程序需要调用延时程序,合理的安排循环次数以及空操作的个数方法:用汇编的话就根据你的当前晶振频率去推算你的指令周期,然后结合需要延迟的时间。

编写延迟程序,用C的话还是要看最后生成的汇编码是什么样的了。最简单的方法就是写好程序以后再编译器里软仿真看时间。

单片机C语言延时需注意的问题:

标准的C语言中没有空语句。但在单片机的C语言编程中,经常需要用几个空指令产生短延时的效果。这在汇编语言中很容易实现,写几个nop就行了。

在keil C51中,直接调用库函数:

#include // 声明了void _nop_(void);

_nop_(); // 产生一条NOP指令

作用:对于延时很短的,要求在us级的,采用“_nop_”函数,这个函数相当汇编NOP指令,延时几微秒。NOP指令为单周期指令,可由晶振频率算出延时时间,对于12M晶振,延时1uS。对于延时比较长的,要求在大于10us,采用C51中的循环语句来实现。

热点内容
入门c语言设计 发布:2025-05-17 12:08:31 浏览:40
c3算法 发布:2025-05-17 12:04:19 浏览:364
phprecv 发布:2025-05-17 11:55:00 浏览:610
福建时钟监控网关服务器云主机 发布:2025-05-17 11:54:28 浏览:248
c数据库压缩 发布:2025-05-17 11:39:22 浏览:960
安卓手机如何连接音响功放 发布:2025-05-17 11:37:48 浏览:958
破解exe加密视频 发布:2025-05-17 11:23:41 浏览:976
我的世界服务器圈太大了怎么办 发布:2025-05-17 11:15:21 浏览:614
便宜的免费云服务器 发布:2025-05-17 11:08:50 浏览:779
中国顶级dhcp解析服务器地址 发布:2025-05-17 11:06:27 浏览:36