四、实验说明
1、P0口作为通用接口时是一准双向口,它作为输出口时与一般的双向口使用方法相同。由准双向口结构可知当P0口用作输入口时必须先对它置“1”。若不先对它置“1”,读入的数据是不正确的。输出时需要接上拉电阻,P0口内部没有上拉电阻,若将外围电路设计为低有效,高无效,则无需再外接上拉电阻。
2、编写一个软件延时子程序,延时时间约0.5秒,采用三重循环实现,汇编语言程序如下:
DELAY: MOV R7, #198
DEL1: MOV R6, #50
DEL2: MOV R5, #23
DJNZ R5, $
DJNZ R6, DEL2
DJNZ R7, DEL1
RET
查指令表可知执行MOV指令需用1个机器周期,DJNZ指令需用2个机器周期,在11.0592MHz晶振时,一个机器周期时间长度为1.085μs,所以该段程序执行时间为:
[1+(1+2×23)×50]×198×1.085μs ≈ 500mS
3、若使用C语言,可用for循环实现延时,下面的程序延时约500mS。
void delay(void)
{ int i,j;
for(i=0;i<1000;i++)
for(j=0;j<50;j++)
{ _nop_(); _nop_();}
}
4、流水灯的主程序(汇编语言)为:
ORG 0000H
LJMP MAIN
ORG 0100H
MAIN: CLR P1.5 ; P1.5=0,关闭蜂鸣器。