单片机50ms延时程序

单片机50ms延时程序,第1张

用STC-ISP V6吧,很方便

DELAY50MS:;@12000MHz

PUSH 30H

PUSH 31H

MOV 30H,#98

MOV 31H,#62

NEXT:

DJNZ 31H,NEXT

DJNZ 30H,NEXT

POP 31H

POP 30H

RET

ms = ms 30 把 ms的值变为 30倍(乘以30)

while(ms--); 当ms不为0,一直运行 ms--

单纯靠计算 ms--,来延时,ms越大,延时越长

不同型号的话 ,应该改变 30这个常数。可能这个型号的计算30次ms--,消耗1秒钟

执行空语句执行124次,大概就能延时到1秒不是很准的。

如要算的话:

比如51,mdelay函数想延时1ms,而执行for(i=0;i<124;i++),假设4个机器周期,每个机器周期时长为[12(1/晶振频率)秒],若晶振为6MHz时,每个机器周期为2us,这样12442是992us,加上for(;Delay>0;Delay--)需要的8us,正好延时1ms

延时函数很常见:

delay1ms(unsigned

int

tt)

//延时1ms

{

unsigned

char

i;

while(tt--)

for(i

=

113;

i

>

0;

i--);

}

反复多次调用即可。

但是,用软件延时,观察起来,就像死机一样,经常会误事的。

/-----------------------------------------------

注:1硬件应使用12MHz晶振;

2程序使用定时器0,溢出周期50ms,计90次溢出为

4分半,其它以此类推,15分到时IC4脚(P13)输

出低电平,然后关闭定时器,停止计数。

-------------------------------------------------/

#include<reg52h>

sbit P10=P1^0;

sbit P11=P1^1;

sbit P12=P1^2;

sbit P13=P1^3;

unsigned char Count=0;

unsigned char Half_Min=0;

void main()

{

TMOD=0x01;

TH0=0x3C;

TL0=0xB0;

ET0=1;

EA=1;

TR0=1;

while(1);

}

void timer_0() interrupt 1

{

TH0=0x3C;

TL0=0xB0;

Count++;

if(Count>10) //大于10则为500ms

{Half_Min++;

Count=0;

switch(Half_Min)

{

case 9:P10=0;break; //4分半

case 10:P11=0;break; //5分

case 20:P12=0;break; //10分

case 30:P13=0;TR0=0;break; //15分

default:break;

}

}

}

/ 刚写好的,绝非复制,有问题加QQ447212829 /

以上就是关于单片机50ms延时程序全部的内容,包括:单片机50ms延时程序、不同型号的单片机延时程序怎么写 { ms = ms * 30; while(ms--); }、单片机的延时程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9873286.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存