单片机循环的问题

来源:百度知道 编辑:UC知道 时间:2024/05/31 08:20:34
题目是:设计一个软件延时程序,延时时间为20ms,80C51单片机使用的晶振为12MHZ。

解: MOV R0, #14H
DL2: MOV R1, #MT
DL1: NOP
NOP
DJNZ R1,DL1
DJNZ R0, DL2

请问,程序中MT如何就算呢?

机器周期=12/晶振频率=12/12mhz=1us
你的每个DL1循环是4个周期数(NOP是1个周期数,DJNZ是两个周期数)
则执行完 DJNZ R1,DL1后,共花费4*MT个周期数,而每个DL2循环是3+4*MT个周期数( MOV R0, #14H是一个机器周期)
列方程:14H*(3+4*MTH)=20ms/1us
所以MTH=249(是十进制数)=EFH
希望兄弟能看明白

规定了你用晶振为12的频率,所以不用你算!

MOV是一个机器周期,NOP是一个机器周期,DJNZ 是两个机器周期。

((1+1+2)*MT+1+2)*20 = 20000
这样来求就可以了,这里的MT应该是249了。

如果dxw0712
算数没算错的话,那他的答案很可以了,钻牛角尖的话还可以再在20MS的基础上减去调用和返回这段延时程序的4us的时间