
在C51单片机中延时子程序的延时时间是怎么算的?
5个回答
展开全部
比如说:
void delay ()
{
int x;
char y;
for(x=1000;x>0;x--)
{ for(y=100;y>0;y--)};
}
x每减一次,y减100次,x一共减少1000次
这个子程序的延时时间是:
1000*100=100ms(默认时间是us)
如果想更精确的话,可以用软件进行调试
for语句下面的{}还可以省略
有不清的可以多交流
void delay ()
{
int x;
char y;
for(x=1000;x>0;x--)
{ for(y=100;y>0;y--)};
}
x每减一次,y减100次,x一共减少1000次
这个子程序的延时时间是:
1000*100=100ms(默认时间是us)
如果想更精确的话,可以用软件进行调试
for语句下面的{}还可以省略
有不清的可以多交流

2025-08-07 广告
广州赛恩科学仪器有限公司(原中大科仪)始创于2002年,是全球领先的精密测量仪器供应商和微弱信号检测方案提供商。公司以锁相放大器为核心产品,陆续推出光学斩波器、源表、功率放大器、电化学工作站、电流源等一系列产品。赛恩科仪推出的锁相放大器,覆...
点击进入详情页
本回答由赛恩科仪提供
2011-12-19
展开全部
按每一个指令所占有的机器周期。。再根据晶振频率来算。。
追问
能否说的具体一点,谢谢啦
追答
DELAY: MOV R4,#60
D0: MOV R5,#125
D1: MOV R6,#200
D2: MOV R6,D2
DJNZ R5,D1
DJNZ R4,D0
RET
就以这个为例:MOV指令是1周期的指令,第一条的话就是执行了60次,就是60*1*机器周期的时间
第二条指令也是1周期的,但是执行了125*200次,所以是125*200*1*机器周期的时间
以此类推。。
而DJNZ是2周期指令。。。所以是循环次数*2*机器周期
最后加起来就好。。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
C语言不可能精确计算,只能用示波器看。汇编可以精确计算,书上有公式的,随便一个讲单片机的书上都有的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
知道每一步运行的时间,然后计算总共有多少步。一乘就出来了。每步的时间根据晶振不同而不同。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
void delay (unsigned int i)
{
unsigned char j;
for(i;i>0;i--)
for(j=500;j>0;j--);
}
{
unsigned char j;
for(i;i>0;i--)
for(j=500;j>0;j--);
}
追问
这个好像是用C语言做的,用汇编程序怎么算啊,我急于知道延时子程序中延时时间的计算公式
追答
DELAY: MOV R4,#60
D0: MOV R5,#125
D1: MOV R6,#200
D2: MOV R6,D2
DJNZ R5,D1
DJNZ R4,D0
RET
是间参数可由自己需要更改。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询