㈠ 单片机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微秒*/
㈡ 单片机中c编程的流水灯中关于延时~~~~
while(1)
{
delayms(250);
.......
.......
}调用延时函数给他传递一个250的参数、
当第一次执行时
ms=250,
执行250--时,此时执行:
for(i
=
0;
i
<
120;
i++);
直到i>=250时候才接下来执行
ms--(即249--);
也就是说
250每次自减
1
都要执行
120次
i++;
如果你把120
改成300
只是扫描时间变长了,也就是延时的更长了,可能第一个LED点亮时间比较长,影响了你的正常看现象。你等一段时间可能就会流动了。这个就是设置的问题。
㈢ 51单片机C语言程序中延时函数delay的原理是什么
原理:只是执行一些所谓的“无实际意义的指令”,如缩放或执行一个int自加,简单地说,就像高中数学中的“乘法原理”一样,很容易迅速增加上面提到的“无意义指令”的数量
关于大小的值:如果是在C语言中,该值不仅与水晶振动、单片机本身的速度,但也与C的编译器,所以,虽然这个值可以精确计算,但大多数情况下,程序员是经验值。
当然,如果你在汇编中编程,情况就不同了,因为每条指令使用一定数量的机器周期,你当然可以根据所有指令使用的总时间来计算特定延迟的总时间。
(3)单片机c延时扩展阅读:
定义延迟XMS毫秒的延迟函数
Voiddelay(unsignedintXMS)//XMS表示需要延迟的毫秒数
{
无符号intx,y;
For(x=XMS;X0;X-)
For(y=110;Y”0;Y-);
}
使用:
VoidDelay10us(ucharMs)
{
Uchar数据我;
(;女士“0;------Ms)
对于(I = 26)我> 0;我-);
}
I=[(延迟值-1.75)*12/ms-15]/4
㈣ 单片机C语言延时程序,如何计算延时时间(高分悬赏!!)代码如下:
我记得keil里面有时间的,好久不用了,单位好像是微秒吧!就是那个分步执行,按一下执行一步的..
比如前面那个箭头指到你的调用函数delay(200);假设执行到此部用时1110。
按一下执行,箭头指到下一“;”前的那一句了,如果此时用时显示变成了1510,说明延时函数延时了400us
要注意选择对的晶振频率
㈤ 单片机c语言带参数延时怎么写
在循环里判断是否满足跳出的条件,满足则跳出循环,不满足就继续延时直到延时结束。
具体的条件要有程序的要求来,比如说某个io口的电平的状态。
sbit
state=p1^7;
delay(uint)
{
uint
x,y;
for(x=1000;x>0;x--)
for(y=1200;y>0;y--)
{
if(state==1)
return
;//当p1.7口为高时跳出循环
}
}
//由于加入了一条语句,延时要重新计算
㈥ 单片机C语言编程关于延时函数
单片机的C语言关于延时函数主要有两种
一种是用for循环,通过单片机执行空指令达到延时的目的
如:
for(i=0;i<100;i++)
{
;
}
这个简单的语句会执行100次空指令
每一次指令的时间可以大概确定
因此这个是最简单的延时函数
第二种是通过定时器的方式来实现
定时器是通过对单片机的晶振进行计数
然后在定时器中断服务函数里面实现定时时间的计算及设置
51单片机的定时器0中断服务函数为
void
time0()
interrupt
1
{
...
}
㈦ 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语言程序(8个灯,依次点亮每个灯,延时500MS)
单片机流水灯C语言程序的源代码如下:
#include //51系列单片机定义文件
#define uchar unsigned char //定义无符号字符
#define uint unsigned int //定义无符号整数
void delay(uint); //声明延时函数
void main(void)
{
uint i;
uchar temp;
while(1)
{
temp=0x01;
for(i=0;i<8;i++) //8个流水灯逐个闪动
{
P1=~temp;
delay(100); //调用延时函数
temp<<=1;
}
temp=0x80;
for(i=0;i<8;i++) //8个流水灯反向逐个闪动
{
P1=~temp;
delay(100); //调用延时函数
temp>>=1;
}
temp=0xFE;
for(i=0;i<8;i++) //8个流水灯依次全部点亮
{
P1=temp;
delay(100); //调用延时函数
temp<<=1;
}
temp=0x7F;
for(i=0;i<8;i++) //8个流水灯依次反向全部点亮
{
P1=temp;
delay(100); //调用延时函数
temp>>=1;
}
void delay(uint t) //定义延时函数
{
register uint bt;
for(;t;t--)
for(bt=0;bt<255;bt++);
}
(8)单片机c延时扩展阅读
51单片机流水灯的源代码如下
#include<reg51.h>
#include<intrins.h>
voiddelay(inta)
{
inti;
while(a--)for(i=0;i<110;i++);
}
main()
{
inti;
while(1)
{
P0=0xfe;
for(i=0;i<8;i++)
{
P0=_crol_(P0,1);
delay(500);
}
}
}
㈨ 单片机C语言中怎么实现微秒级延时
可以用_nop_( )函数来实现微秒级的延时。
_nop_();//直接当成一条语句使用,产生一条NOP指令
NOP指令为单周期指令,可由晶振频率算出延时时间,对于12M晶振,延时1uS。
注:使用该函数时,需要将头文件#include<intrins.h>包含进源文件中。