單片機(jī)初學(xué)者要更容易理解和掌握一些常用指令,就要多做實(shí)驗(yàn),編一些小程序在實(shí)驗(yàn)板上看效果,而流水燈是最方便看見效果的,學(xué)編程一般是先多看別人的程序從中學(xué)習(xí)一些編程的技巧和方法。是從模仿開始的,但要領(lǐng)會(huì)后變?yōu)榧河貌判,希望初學(xué)者能從下面程序中學(xué)到有用的東東。 
看上面原理圖是由八只LED發(fā)光管,接在89C51的P1口上,從原理圖可知只有P1口為低電平(接地)時(shí),發(fā)光管才會(huì)亮。所以只要循環(huán)控制P1口的各個(gè)引腳的電平高低變化就可使LED 循環(huán)點(diǎn)亮。 網(wǎng)友只要把下面的源程序編譯后燒如提供的實(shí)驗(yàn)板即可看見效果。 ORG 0000H LJMP START ORG 0030H START: MOV SP,#6FH;養(yǎng)成習(xí)慣將堆棧先保護(hù)起來 MOV A,#80H;轉(zhuǎn)換為二進(jìn)制為10000000 LOOP: MOV P1,A ;將A中的值送入P1口 RR A;右移 LCALL DELAY;凋延時(shí)程序 LJMP LOOP ;返回繼續(xù)循環(huán) delay: ;延時(shí)程序,改變R7的初值看效果如何?? MOV r7,#255 d1: MOV r6,#255 d2: nop nop nop nop djnz r6,d2 djnz r7,d1 ret END 上面的程序如您不好理解可以看下面的:
ORG 0000H START:MOV P1,#01111111B;第八腳的LED點(diǎn)亮 LCALL DELAY;延時(shí)1秒 MOV P1,#10111111B;第7腳的LED點(diǎn)亮 LCALL DELAY;延時(shí)1秒 MOV P1,#11011111B;第6腳的LED點(diǎn)亮 (以下省略) LCALL DELAY MOV P1,#11101111B LCALL DELAY MOV P1,#11110111B LCALL DELAY MOV P1,#11111011B LCALL DELAY MOV P1,#11111101B LCALL DELAY MOV P1,#11111110B LCALL DELAY MOV P1,#11111111B;完成第一次循環(huán)點(diǎn)亮,延時(shí)約0.25秒 AJMP START;反復(fù)循環(huán) ;延時(shí)子程序,12M晶振延時(shí)約250毫秒 DELAY: MOV R4,#2 L3: MOV R2 ,#250 L1: MOV R3 ,#250 L2: DJNZ R3 ,L2 DJNZ R2 ,L1 DJNZ R4 ,L3 RET END 以上兩種的亮暗不同的,前種是暗流動(dòng),下面的是亮流動(dòng);您可以燒寫到實(shí)驗(yàn)板看效果。。。。。。
|