單片機程序注釋
ORG 0000HSJMP MAIN1MAIN1: MOV R7,#50MOV 60H,#51MOV 61H,#51MOV R1,#0MAIN:MOV R0,#16MOV R2,#0MOV R3,#9MOV R4,#0CLR CLOOP1: MOV A,R1MOV DPTR,#DIGITMOvc A,@A+DPTRMOV P3,AINC R1MOV A,R1MOV DPTR,#DIGITMOvc A,@A+DPTRMOV P2,AINC R1JC LOOP3MOV DPTR,#TABMOV A,R2MOVC A,@A+DPTRMOV P0,AMOV P1,#0FFHINC R2DJNZ R3,LOOP2SETB CLOOP3:MOV DPTR,#TABMOV A,R4MOVC A,@A+DPTRMOV P1,AMOV P0,#0FFHINC R4LOOP2:LCALL DELAY312DJNZ R0,LOOP1MOV R1,#0DJNZ R7,MAINMOV R7,#1MOV R1,#32DJNZ 60H,MAINMOV 60H,#1MOV R1,#64DJNZ 61H,MAINSJMP MAIN1TAB: DB 7FH,0BFH,0DFH,0EFH,0F7H,0FBH,0FDH,0FEH,7FH,0BFH,0DFH,0EFH,0F7H,0FBH,0FDH,0FEHDIGIT: DB 004H,010H,008H,010H,008H,010H,010H,010H,010H,010H,020H,010H,040H,0A0H,080H,040H DB 000H,000H,000H,000H,0FFH,0FEH,004H,000H,004H,000H,004H,000H,007H,0F0H,004H,010H DB 001H,000H,07FH,0FCH,003H,080H,005H,040H,009H,020H,031H,018H,0C1H,006H,001H,000H DB 008H,020H,008H,020H,0FFH,0FEH,008H,020H,000H,000H,07FH,0FEH,040H,002H,081H,004H DB 0FFH,0FEH,001H,000H,001H,000H,07FH,0FCH,002H,080H,004H,040H,018H,030H,0E0H,00EH DB 008H,020H,004H,040H,07FH,0FCH,001H,000H,001H,000H,03FH,0F8H,001H,000H,001H,000HDELAY312: MOV R6,#02HDL0: MOV R5,#0F8H DJNZ R5,$ DJNZ R6,DL0 NOP RETEND
ORG 0000H//定義程序開始地址AJMPMAIN //跳轉(zhuǎn)到MAIN標志處執(zhí)行ORG 30H // 定義MAIN起始地址為0030HMAIN: MOV SP, #60H //把立即數(shù)0x60植入SPMOVDPTR,#4100H//送立即數(shù)4100H到DPTRMOVA, #0fH //送立即數(shù)0fH到A寄存器MOVX @DPTR, A//將A中的值送到以DPTR中的內(nèi)容表示的外部地址中,,即外部地址4100H中MOV70H,#01H MOV71H,#02HMOV72H,#03HMOV73H,#04HMOV74H,#05HMOV75H,#06HMOV76H,#07HMOV77H,#08H //以上均是把后面的立即數(shù)送到相對應的地址中LOOP:ACALLDISPLAY //調(diào)用子函數(shù),,即DISPLAY標志處的程序段AJMPLOOP //跳轉(zhuǎn)到LOOP處執(zhí)行,與上面那條構(gòu)成循環(huán)調(diào)用DISPLAYDISPLAY: MOVR0,#70H //送立即數(shù)到R0寄存器 MOVR3,#0feH //送立即數(shù)到R3寄存器 LD0:MOVDPTR,#4102H //送立即數(shù)到DPTR寄存器 MOVA, #0FFH //送立即數(shù)0FFH到A寄存器 MOVX @DPTR, A//將A中的數(shù)0FFH送到以DPTR中的內(nèi)容所表示的外部地址,,即外部4102H地址處,。 MOV A,@R0 // 將以R0中的內(nèi)容所表示的地址中的內(nèi)容送到A中,,即地址(70H)中的數(shù)01H送到A中 MOV DPTR,#DISTAB //把DISTAB標志所處的地址送到DPTR中 MOVC A,@A+DPTR//查表,。@A+DPTR即是取得(A+DPTR)地址中的內(nèi)容。然后通過MOV指令送到A中,。這條指令結(jié)合上面兩條,,及后面的那個INCR0 指令共同構(gòu)成遍歷DISTAB所表示的表。達到查表,。 MOVDPTR,#4101H MOVX @DPTR,A//與上面一句結(jié)合,,達到把A中的內(nèi)容送到外部地址4101H中。MOVDPTR,#4102H //送立即數(shù)4102H到DPTR MOVA,R3 // 把R3中的內(nèi)容送到A中 MOVX @DPTR,A //把A中內(nèi)容送到外部地址4102H中 ACALL DELAY//調(diào)用延時子函數(shù)DELAY,,即跳到DELAY處執(zhí)行 INC R0 //R0中的內(nèi)容自增1 JNBACC.7,LD1 //如果ACC.7這一位不為1,,則跳到LD1標志處執(zhí)行。 RL A //A中內(nèi)容左移一位MOV R3,A //送A中的內(nèi)容到R3中AJMP LD0 //跳到LD0標志處 LD1:RET//子函數(shù)返回指令DISTAB:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH //定義一個表,,相當于c語言中的數(shù)組,。DB的意思是規(guī)定表中每個數(shù)占一個字節(jié)。DELAY://延時子函數(shù)MOVR7,#02h//送立即數(shù)02H到R7中DELAY1:MOVR6,#0FFH//送立即數(shù)0FFH到R6中DELAY2:DJNZR6,DELAY2 //R6中的數(shù)減1后如不為跳轉(zhuǎn)到DELAY2處,,本例中即繼續(xù)執(zhí)行這句,,直到R6中內(nèi)容為0.DJNZR7,DELAY1 //R7中的內(nèi)容減一,不為零則跳轉(zhuǎn)到DELAY1處RET//延時子函數(shù)返回END //程序結(jié)束語言表達不好,,解釋的難免有點不周到,,希望能夠幫助LZ。LZ加油,!