⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 关于while(--n)三重循环.txt

📁 单片机延时计算程序源代码
💻 TXT
字号:
〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
File:	关于while(--n)的优化设计		〓
Time:	10:02		                        〓
Date:	08-7-29					〓
Note:	MOV	Direct,#Data  为两个机器周期    〓
	MOV	Rn,Direct     为两个机器周期	〓
〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓




◆实验目的:
	用while实现三层循环,以达到更长的延迟时间.





◆测试代码:	
void delay(unsigned char x, unsigned char y, unsigned char z)
{
        unsigned char tempx,tempy,tempz=z;
        do{tempy=y;do{tempx=x;while(--tempx);}while(--tempy);}while(--tempz);
}




◆汇编代码:
ASSEMBLY LISTING OF GENERATED OBJECT CODE

             ; FUNCTION _delay (BEGIN)
;---- Variable 'x' assigned to Register 'R7' ----
;---- Variable 'z' assigned to Register 'R3' ----
;---- Variable 'y' assigned to Register 'R5' ----
;---- Variable 'tempz' assigned to Register 'R3' ----
0000         ?C0003:
;---- Variable 'tempy' assigned to Register 'R6' ----
0000 AE05              MOV     R6,AR5(y)		2'
0002         ?C0006:
;---- Variable 'tempx' assigned to Register 'R4' ----
0002 AC07              MOV     R4,AR7(x)		2'
0004         ?C0007:
0004 DCFE              DJNZ    R4,?C0007		2'
0006         ?C0004:
0006 DEFA              DJNZ    R6,?C0006		2'
0008 DBF6              DJNZ    R3,?C0003		2'
000A 22                RET     				2'
             ; FUNCTION _delay (END)

             ; FUNCTION main (BEGIN)
0000 E4                CLR     A			1'
0001 F580              MOV     P0,A			1'
0003 7B01              MOV     R3,#01H			1'
0005 7D47              MOV     R5,#047H			1'
0007 7F05              MOV     R7,#05H			1'
0009 120000      R     LCALL   _delay			2'
000C 7580FF            MOV     P0,#0FFH			2'
000F 22                RET     				2'
             ; FUNCTION main (END)





◆实验记录:
x=5,y=71,z=1
0.000 389 00
0.001 396 00	0.001 007 00
◆推论公式:
[(2*x+2)*y+2*y+2]*z+2*z+2+5+2=0.001 007 00




◆结论验证:
x=10,y=60,z=5
0.000 389 00
0.007 618 00	0.007 229 00
[(2*x+2)*y+2*y+2]*z+2*z+2+5+2=0.007 229 00	 OK!测试通过



◆实验结论:
延迟时间为:Delay_Time=[(2*x+2)*y+2*y+2]*z+2*z+2+5+2
		     =[(2*x+2)*y+2*y+2]*z+2*z+7
		     =2*x*y*z+4*y*z+4*z+7

	即:【Delay_Time=2xyz+4yz+4z+7】







⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -