;51单片机入门程序8 ;工程名称:让单片机P0、P1、P2和P3端口所接的灯同时全亮全灭
;编写日期:2009.7.4
;编写者:蓝柳柳
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ORG 0000H MAIN:
MOV P0,#00000000B
MOV P2,#00000000B
MOV P1,#00000000B
MOV P3,#00000000B
LCALL YS ;调用延时子程序
MOV P0,#11111111B
MOV P2,#11111111B
MOV P1,#11111111B
MOV P3,#11111111B
LCALL YS ;调用延时子程序
LJMP MAIN ;循环
YS: ;延时子程序YS,功能是能让LED亮起来或者灭掉一小段时间
MOV R1,#200 ;让灯亮灭时间的长短也就是延时的长短跟#号后面的数据有关
D: MOV R2,#200 ;延时长点#号后面的数据就大点,延时短点#号后面的数据
T: MOV R3,#200 ;就小点,但#号后面最大的数据是255
DJNZ R3,$ DJNZ R2,T DJNZ R1,D RET ;子程序返回指令,子程序的设计一般都是因为主程序要调用它, ;调用完是要返回到主程序继续运行下一个语句的
END
;补充说明:AJMP、SJMP、LJMP都是控制转移类指令,功能都是一样的, ; 但是当你所编写的程序比较长的时候就要用LJMP。 ; ; ACALL和LCALL都是调用指令,当程序很长的时候就用LCALL ; ; 延时子程序内部的运作比较复杂,大家只知道延时子程序的 ; 功能是能延时一小段时间。CUP那些内部部件把数码送出端口之后 ; 碰到了ACALL和LCALL这些指令后CPU就暂时不往端口送数了 ; 而是转来运行延时子程序,子程序运行过程大概是这样: ; 先把一些数分别送到一些寄存器里面去,然后进行减1判断不为0的工作 ; 就象我们我们把一些水果送到一些房间里面去,然后在里面把这些水果吃 ; 完,再去做正式的工作 ,吃水果的过程是花费时间滴,呵呵! ; 延时子程序基本上是固定不变的,只要是要延长时间都把这段子程序输进去就可以了!
|