;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的工作 ; 就象我們我們把一些水果送到一些房間里面去,然后在里面把這些水果吃 ; 完,再去做正式的工作 ,吃水果的過程是花費時間滴,呵呵! ; 延時子程序基本上是固定不變的,只要是要延長時間都把這段子程序輸進去就可以了!
|