1 / 4
文档名称:

delay延时教程.docx

格式:docx   大小:15KB   页数:4页
下载后只包含 1 个 DOCX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

delay延时教程.docx

上传人:1542605778 2022/3/1 文件大小:15 KB

下载得到文件列表

delay延时教程.docx

文档介绍

文档介绍:delay延时教程(用的是12MHz晶振的 MCS-51)
一、
NOP指令为单周期指令
DJNZ指令为双周期指令
mov指令为单周期指令
子程序调用(即LCALL指令)为双周期指令
ret为双周期指令
stOP_( );
}
延迟时间=6*1us+2 us+2 us=10us
b:delaytime为us级
我们用汇编语言写单片机延时10ms的程序,可以编写下面的程序来实现:
unsigned char i,j
for(i=255;i>0;i--)
for(j=255;j>0;j--);

unsigned char i,j
i=255;
do
{
j=255;
do{j--}
while(j);
i--;
}
while(i);

unsigned char i,j
i=255;
while(i)
{
j=255;
while(j)
{j--};
i--;
}
这三种方法都是用DJNZ指令嵌套实现循环的,由C51编
译器用下面的指令组合来完成的
MOV R7,#0FFH
LOOP2: MOV R6,#0FFH (1周期)
LOOP1: DJNZ R6,LOOP1
DJNZ R7,LOOP2 (2周期)
这些指令的组合在汇编语言中采用DJNZ指令来做延时用,
因此它的时间精确计算也是很简单,假上面变量i的初
值为m,变量j的初值为n,则总延时时间为:
m×(n×2+2+1),
注:DJNZ A,B是一条转移指令,先将A减1,若减后,
A=0;不转移到B处;
A!=0;跳到B处;
例2:void delay500ms(void)
{
unsigned charR7,R6,R5;
for(R7=15;R7>0;R7--)
for(R6=202;R6>0;R6--)
for(R5=81;R5>0;R5--);
}
产生的汇编:
C:0x0800 7F0F MOV R7,#0x0F
C:0x0802 7ECA MOV R6,#0xCA
C:0x0804 7D51 MOV R5,#0x51
C:0x0806