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--);
}
请大师们高手们快点帮我解决一下,救急啊 展开
{ uchar j;
for(;t>0;t--)
for(j=19;j>0;j--);
}
请大师们高手们快点帮我解决一下,救急啊 展开
4个回答
展开全部
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
展开全部
最好是用编译软件(Keil)测量时间,在Keil里设置晶振频率为11.0592
然后进入调试状态,有一个watch的可以看运行了多长时间!!
然后进入调试状态,有一个watch的可以看运行了多长时间!!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你现在写的这个是软延时,有很大误差的,参数还要自己调节核对!
用中断做吧,准一些,可以看下51的T/C部分!
用中断做吧,准一些,可以看下51的T/C部分!
追问
用中断做的话还是要计算的哇
追答
是的,要算,不过你可以算的很准!
如果用软延时,你要不断测试参数,才能得到一个近似值,而且当你改变程序优化等级后,此值作
废!另外,如果你想得到比较精确的延时,最好换晶振为12MHz。
还有,如果你一定要计算步骤的话,就只能用中断方式了!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2014-01-07
展开全部
(1/11.0592M)*12*t*19
更多追问追答
追问
这个t该怎么确定呢
追答
void delay_50us(uint t)
参数自己定的啊
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询