原创 1、闪烁灯

2008-10-17 16:54 2333 4 4 分类: MCU/ 嵌入式

1. 实验任务<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


如图4.1.1所示:在P1.0端口上接一个发光二极管L1,使L1在不停地一亮一灭,一亮一灭的时间间隔为0.2秒。


2.                       汇编源程序


                            ORG 0000H


START:               CLR P1.0


                            LCALL DELAY


                            SETB P1.0


                            LCALL DELAY


                            LJMP START


DELAY:              MOV R5,#20                        ;延时子程序,延时0.2


D1:                      MOV R6,#20


D2:                      MOV R7,#248


                            DJNZ R7,$


                            DJNZ R6,D2


                            DJNZ R5,D1


                            RET


                            END


注意:P1.0每间隔0.2秒输出电平变化一次,若使用示波器观察P1.0输出波形,会发现P1.0口输出周期是0.4s400ms)频率2.25HZ的方波。点击开大图


 


3.                       C语言源程序


#include <AT89X51.H>


sbit L1=P1^0;


 


void delay02s(void)               //延时0.2秒子程序


{


  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;


      delay02s();


      L1=1;


      delay02s();


    }


}


注意:delay函数中签连个for循环后面没有分号,在最后一个for循环再加分号


点击开大图


3、总结


    1、汇编和C语言实现在演示技术方面完全一样,即一个MOV或者DJNZ指令的执行时间和for执行一次循环的指令时间相同(都是两个机器周期)。


    2、延时计算:(248*2+2)*20*20


 


 


 

 


 
PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
4
关闭 站长推荐上一条 /1 下一条