AT89C51的单片机,晶振是11.0592MHZ的,算延时,要有计算步骤,谢谢

voiddelay_50us(uintt)//50us延迟函数{ucharj;for(;t>0;t--)for(j=19;j>0;j--);}请大师们高手们快点帮我解决一... void delay_50us(uint t) //50us延迟函数
{ uchar j;
for(;t>0;t--)
for(j=19;j>0;j--);
}
请大师们高手们快点帮我解决一下,救急啊
展开
 我来答
zhxiufan
2014-01-07 · 知道合伙人软件行家
zhxiufan
知道合伙人软件行家
采纳数:14923 获赞数:38375
国家科技进步奖

向TA提问 私信TA
展开全部
    9: void delay_50us(uint t) //50us延迟函数 
    10: { 
    11:           uchar j; 
    12:           for(;t>0;t--) 
    13:           for(j=19;j>0;j--); 
    14: }
C:0x0D45    D3       SETB     C ;1
C:0x0D46    EF       MOV      A,R7 ;1
C:0x0D47    9400     SUBB     A,#0x00 ;2
C:0x0D49    EE       MOV      A,R6 ;1
C:0x0D4A    9400     SUBB     A,#0x00 ;2
C:0x0D4C    400B     JC       C:0D59 ;1
C:0x0D4E    7D13     MOV      R5,#0x13 ;1
C:0x0D50    DDFE     DJNZ     R5,C:0D50 ;19*2=38
C:0x0D52    EF       MOV      A,R7 ;1
C:0x0D53    1F       DEC      R7 ;1
C:0x0D54    70EF     JNZ      delay_50us(C:0D45) ;2
C:0x0D56    1E       DEC      R6 ;1
C:0x0D57    80EC     SJMP     delay_50us(C:0D45) ;2
C:0x0D59    22       RET      ;2
这是KEIL反汇编出来的结果,可见总的机器周期=56
晶振为11.0592M时,t=1,那么实际延时时间=61us
追问
如果晶振是12m时  这个结果会是一样的吗
追答
晶振为12M时延时时间为56us
5922771321
2014-01-07 · TA获得超过1438个赞
知道小有建树答主
回答量:1410
采纳率:100%
帮助的人:356万
展开全部
最好是用编译软件(Keil)测量时间,在Keil里设置晶振频率为11.0592
然后进入调试状态,有一个watch的可以看运行了多长时间!!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
racebeyond0399
2014-01-07 · TA获得超过270个赞
知道小有建树答主
回答量:178
采纳率:0%
帮助的人:64.3万
展开全部
你现在写的这个是软延时,有很大误差的,参数还要自己调节核对!

用中断做吧,准一些,可以看下51的T/C部分!
追问
用中断做的话还是要计算的哇
追答
是的,要算,不过你可以算的很准!

如果用软延时,你要不断测试参数,才能得到一个近似值,而且当你改变程序优化等级后,此值作

废!另外,如果你想得到比较精确的延时,最好换晶振为12MHz。

还有,如果你一定要计算步骤的话,就只能用中断方式了!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2014-01-07
展开全部
(1/11.0592M)*12*t*19
更多追问追答
追问
这个t该怎么确定呢
追答
void delay_50us(uint t)
参数自己定的啊
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式