|
;51單片機(jī)入門程序8 ;工程名稱:讓單片機(jī)P0、P1、P2和P3端口所接的燈同時全亮全滅
;編寫日期:2009.7.4
;編寫者:藍(lán)柳柳
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ORG 0000H MAIN:
MOV P0,#00000000B
MOV P2,#00000000B
MOV P1,#00000000B
MOV P3,#00000000B
LCALL YS ;調(diào)用延時子程序
MOV P0,#11111111B
MOV P2,#11111111B
MOV P1,#11111111B
MOV P3,#11111111B
LCALL YS ;調(diào)用延時子程序
LJMP MAIN ;循環(huán)
YS: ;延時子程序YS,功能是能讓LED亮起來或者滅掉一小段時間
MOV R1,#200 ;讓燈亮滅時間的長短也就是延時的長短跟#號后面的數(shù)據(jù)有關(guān)
D: MOV R2,#200 ;延時長點#號后面的數(shù)據(jù)就大點,延時短點#號后面的數(shù)據(jù)
T: MOV R3,#200 ;就小點,但#號后面最大的數(shù)據(jù)是255
DJNZ R3,$ DJNZ R2,T DJNZ R1,D RET ;子程序返回指令,子程序的設(shè)計一般都是因為主程序要調(diào)用它, ;調(diào)用完是要返回到主程序繼續(xù)運(yùn)行下一個語句的
END
;補(bǔ)充說明:AJMP、SJMP、LJMP都是控制轉(zhuǎn)移類指令,功能都是一樣的, ; 但是當(dāng)你所編寫的程序比較長的時候就要用LJMP。 ; ; ACALL和LCALL都是調(diào)用指令,當(dāng)程序很長的時候就用LCALL ; ; 延時子程序內(nèi)部的運(yùn)作比較復(fù)雜,大家只知道延時子程序的 ; 功能是能延時一小段時間。CUP那些內(nèi)部部件把數(shù)碼送出端口之后 ; 碰到了ACALL和LCALL這些指令后CPU就暫時不往端口送數(shù)了 ; 而是轉(zhuǎn)來運(yùn)行延時子程序,子程序運(yùn)行過程大概是這樣: ; 先把一些數(shù)分別送到一些寄存器里面去,然后進(jìn)行減1判斷不為0的工作 ; 就象我們我們把一些水果送到一些房間里面去,然后在里面把這些水果吃 ; 完,再去做正式的工作 ,吃水果的過程是花費(fèi)時間滴,呵呵! ; 延時子程序基本上是固定不變的,只要是要延長時間都把這段子程序輸進(jìn)去就可以了!
|
|