在C51单片机中延时子程序的延时时间是怎么算的?

在C51单片机中延时子程序的延时时间是怎么算的?,第1张

比如说:
void delay ()
{
int x;
char y;
for(x=1000;x>0;x--)
{ for(y=100;y>0;y--)};

x每减一次,y减100次,x一共减少1000次
这个子程序的延时时间是:
1000100=100ms(默认时间是us)
如果想更精确的话,可以用软件进行调试
for语句下面的{}还可以省略
有不清的可以多交流

MOV R2,#0AH 执行了1次 每次需要1个机器周期 共需要11个机器周期
MOV R3,#0FFH执行了10次个 1 101
DJNZ R3,D3执行了25510次 2 25502
DJNZ R2,D2执行了1次 2 102
RET 执行一次 2 12
一共需要5133个机器周期,如果用12M晶振 则执行一个机器周期需要1US,那么一共需要5133US
还有不用算的方法,运行一下,编译环境下有记时的,将光标放到程序后,运行到光标处

;按12M晶振普通51
;TOTAL=200000t,1t=1us,T=02s
DELAY: ;LCALL 调用 2
MOV R3,#4 ;1
DELAY1:
MOV R4,#101 ;14
DELAY2:
MOV R5,#246 ;11014
DJNZ R5,$ ;22461014
DJNZ R4,DELAY2 ;21014
DJNZ R3,DELAY1 ;24
NOP ;1
NOP ;1
NOP ;1
RET ;2


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

原文地址: http://outofmemory.cn/yw/13408538.html

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

发表评论

登录后才能评论

评论列表(0条)

保存