
在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语句下面的{}还可以省略
有不清的可以多交流

2018-09-20 广告
1、基本功能。市面上的电子负载均有基本的四项功能:恒流、恒压、恒阻和恒功率(安捷伦没有恒功率)。在功能基本相同,精确度相差不大的情况下,怎么判断是否符合要求呢?CHROMA和博计的电子负载只有一套工作电路,就是恒流功能。其他功能是根据欧姆定...
点击进入详情页
本回答由北京康思提供
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
是间参数可由自己需要更改。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询