单片机延时子函数c语言 单片机延时函数编写

51单片机求10微秒的延时函数 C语言(晶振11.0592MHz)1、下面几个是单片机的延时程序(包括asm和C程序,都是我在学单片机的过程中用到的),在单片机延时程序中应考虑所使用的晶振的频率,在51系列的单片机中我们常用的是11.0592MHz和12.0000MHz的晶振,而在AVR单片机上常用的有8.000MHz和4.000MH的晶振所以在网上查找程序时如果涉及到精确延时则应该注意晶振的频率是多大 。
2、软件延时:(asm)
晶振12MHZ,延时1秒
程序如下:
DELAY:MOV
72H,#100
LOOP3:MOV
71H,#100
LOOP1:MOV
70H,#47
LOOP0:DJNZ
70H,LOOP0
NOP
DJNZ
71H,LOOP1
MOV
70H,#46
LOOP2:DJNZ
70H,LOOP2
NOP
DJNZ
72H,LOOP3
MOV
70H,#48
LOOP4:DJNZ
70H,LOOP4
定时器延时:
晶振12MHZ,延时1s,定时器0工作方式为方式1
DELAY1:MOV
R7,#0AH
;;晶振12MHZ,延时0.5秒
AJMP
DELAY
DELAY2:MOV
R7,#14H
;;晶振12MHZ , 延时1秒
DELAY:CLR
EX0
MOV
TMOD,#01H
;设置定时器的工作方式为方式1
MOV
TL0,#0B0H
;给定时器设置计数初始值
MOV
TH0,#3CH
SETB
TR0
;开启定时器
HERE:JBC
TF0,NEXT1
SJMP
HERE
NEXT1:MOV
TL0,#0B0H
MOV
TH0,#3CH
DJNZ
R7,HERE
CLR
TR0
;定时器要软件清零
SETB
EX0
RET
3、C语言延时程序:
10ms延时子程序(12MHZ)
void
delay10ms(void)
{
unsigned
char
i,j,k;
for(i=5;i0;i--)
for(j=4;j0;j--)
for(k=248;k0;k--);
}
1s延时子程序(12MHZ)
void
delay1s(void)
{
unsigned
char
h,i,j,k;
for(h=5;h0;h--)
for(i=4;i0;i--)
for(j=116;j0;j--)
for(k=214;k0;k--);
}
200ms延时子程序(12MHZ)
void
delay200ms(void)
{
unsigned
char
i,j,k;
for(i=5;i0;i--)
for(j=132;j0;j--)
for(k=150;k0;k--);
}
500ms延时子程序程序:
(12MHZ)
void
delay500ms(void)
【单片机延时子函数c语言 单片机延时函数编写】{
unsigned
char
i,j,k;
for(i=15;i0;i--)
for(j=202;j0;j--)
for(k=81;k0;k--);
}
51单片机C语言中delay函数是怎么定义和使用的?定义一个延时xms毫秒的延时函数
void delay(unsigned int xms) // xms代表需要延时的毫秒数
{
unsigned int x , y;
for(x=xms;x》0;x--)
for(y=110;y》0;y--);
}
使用:
void Delay10us(uchar Ms)
{
uchar data i;
for(;Ms》0;Ms--)
for(i=26;i》0;i--);
}
i=[(延时值-1.75)*12/Ms-15]/4
扩展资料
1、在C51中进行精确的延时子程序设计时 , 尽量不要或少在延时子程序中定义局部变量 , 所有的延时子程序中变量通过有参函数传递 。
2、在延时子程序设计时 , 采用do?while,结构做循环体要比for结构做循环体好 。
3、在延时子程序设计时,要进行循环体嵌套时,采用先内循环 , 再减减比先减减,再内循环要好 。
单片机c语言中的delay_ms(250) 是什么意思意思就是延迟250ms,250就是100ms延时子函数写成1ms的 。
voiddelay(chari)
{
charj=0;
for(i=0;i255;i)
for(;i255;j)
}
voidmain()
{
delay(100);
}
扩展资料
单片机C语言变量作用域
#includereg52.h//包含头文件
sbitled=P0^0;
unsignedcharcount=0;//定时累计变量,我们需要1000ms定时,50*20=1000
//count是全局变量,通俗地说就是程序每次重新执行时值保持住最近一次的值
voidmain()
{
TMOD=0x01;//设置定时器0工作方式1,16位计数
TH0=(65536-45872)/256;//晶振11.0592MHz,定时50ms时TH0初值
TL0=(65536-45872)%6;//晶振11.0592MHz , 定时50ms时TL0初值
EA=1;//开启总中断
ET0=1;//开启定时器0中断
TR0=1;//启动定时器0
while(1)
{
if(20==count)//1000ms定时时间到
{
count=0;//清零,使得可以再次定时1000ms
led=~led;//P0.0电平取反,也就实现LED灯的熄灭或者点亮
}
//这部分代码放到主函数里,中断服务程序中只有定时器初值的重新赋值和count变量的累加
}
}
voidT0_INT()interrupt1//大家对照着上述格式看看
{
TH0=(65536-45872)/256;//晶振11.0592MHz,定时50ms时TH0初值
TL0=(65536-45872)%6;//晶振11.0592MHz,定时50ms时TL0初值
//重装初值,这个很好理解,我们需要每次定时的时间相同
count;//每进入一次中断,也就是说50ms时间到了,count变量进行累计
//中断服务程序简洁,高效
}
单片机C语言编程关于延时函数单片机的C语言关于延时函数主要有两种
一种是用for循环,通过单片机执行空指令达到延时的目的
如:
for(i=0;i100;i)
{
;
}
这个简单的语句会执行100次空指令
每一次指令的时间可以大概确定
因此这个是最简单的延时函数
第二种是通过定时器的方式来实现
定时器是通过对单片机的晶振进行计数
然后在定时器中断服务函数里面实现定时时间的计算及设置
51单片机的定时器0中断服务函数为
void
time0()
interrupt
1
{
...
}
单片机延时子函数c语言的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于单片机延时函数编写、单片机延时子函数c语言的信息别忘了在本站进行查找喔 。

    推荐阅读