你 好!很高兴能为你回答!如有疑问可以联系!如图所示:在P10、P11端口上各接一个发光二极管L1、L2,使L1、L2在不停地一亮一灭,一亮一灭的时间间隔为02秒。
如图所示的石英晶体为12MHz,因此,1个机器周期为1微秒
机器周期
微秒
MOV
R6,#20
2个机器周期
2
D1:
MOV
R7,#248
2个机器周期
2 2+2×248=498 20×
DJNZ
R7,$
2个机器周期
2×248
498
DJNZ
R6,D1
2个机器周期 2×20=40 10002
因此,上面的延时程序时间为10002ms。
由以上可知,当R6=10、R7=248时,延时5ms,R6=20、R7=248时,延时10ms,以此为基本的计时单位。如本实验要求02秒=200ms,10ms×R5=200ms,则R5=20,延时子程序如下:
DELAY:
MOV
R5,#20
D1:
MOV
R6,#20
D2:
MOV
R7,#248
DJNZ
R7,$
DJNZ
R6,D2
DJNZ
R5,D1
RET
(2).
输出控制
如图所示,当P10端口输出高电平,即P10=1时,根据发光二极管的单向导电性可知,这时发光二极管L1熄灭;当P10端口输出低电平,即P10=0时,发光二极管L1亮;我们可以使用SETB P10指令使P10端口输出高电平,使用CLR P10指令使P10端口输出低电平。P11同理;
5.
程序框图
如图412所示
图412
6.
汇编源程序
ORG
0
START:
CLR
P10SETB
P11
LCALL
DELAY
SETB
P10CLR
P11
LCALL
DELAY
LJMP
START
DELAY:
MOV
R5,#20
;延时子程序,延时02秒
D1:
MOV
R6,#20
D2:
MOV
R7,#248
DJNZ
R7,$
DJNZ
R6,D2
DJNZ
R5,D1
RET
END
7.
C语言源程序
#include
<AT89X51H>
sbit
L1=P1^0;sbit
L2=p1^1;
void
delay02s(void)
//延时02秒子程序
{
unsigned
char
i,j,k;
for(i=20;i>0;i--)
for(j=20;j>0;j--)
for(k=248;k>0;k--);
}
void
main(void)
{
while(1)
{
L1=0;L2=1;
delay02s();
L1=1;L2=0;
delay02s();
}
}



