请大神帮忙翻译下下面这段程序语句,单片机msc-51,谢谢了

ORG 0000H
LJMP 1000H
ORG 1000H
MAIN:CALL INI8255
MOV 30H,#00H
LOOP:DPTR,#TAB
MOV A,30H
MOVC A,@A+DPTR
CALL DELAY
SETB P1.7
JB P1.7,FUNCTION
DEC 30H
MOV A,30H
CJNE A,#0FFH,NEXT1
MOV 30H,#3
NEXT1:SJMP LOOP
FUNCTION:INC 30H
MOV A,30H
CJNE A,04H,NEXT2
MOV 30H,#0
NEXT2:SJMP LOOP
INI8255:MOV P2,#80H
MOV R0,#03H
MOV A,#80H
MOVX @R0,A
RET
DELAY:MOV R7,#40
DEL1:MOV R6,#500
DEL2:DJNZ R6,DEL2
DJNZ R7,DEL1
RET
TAB:DB 03H,06H,0CH,09H
END

第1个回答  2014-12-28
ORG 0000H
LJMP 1000H
ORG 1000H
MAIN:CALL INI8255 ;调用82255初始化程序
MOV 30H,#00H ;30H赋值0
LOOP:DPTR,#TAB ;取表首地址赋值给DPTR
MOV A,30H ;30H值送累加器A
MOVC A,@A+DPTR ;查表
CALL DELAY ;调用延时
SETB P1.7 ;P1.7置1
JB P1.7,FUNCTION ;P1.7为1则转移到FUNCTION
DEC 30H ;30H值减1
MOV A,30H ;30H值送累加器
CJNE A,#0FFH,NEXT1 ;如果A不等于FFH则转NEXT1
MOV 30H,#3 ;30H值赋值为3
NEXT1:SJMP LOOP ;转移到LOOP
FUNCTION:INC 30H ;30H值加1
MOV A,30H ;30H值送A
CJNE A,04H,NEXT2 ;如果A不等于4(这里可能少了#号)则转移到NEXT2
MOV 30H,#0 ;30H值赋值为0
NEXT2:SJMP LOOP ;转移到LOOP
INI8255:MOV P2,#80H ;P2口赋值80H
MOV R0,#03H ;R0赋值03H
MOV A,#80H ;A等于80H
MOVX @R0,A ;外部地址03H赋值80H
RET
DELAY:MOV R7,#40 ;外层循环40次
DEL1:MOV R6,#500 ;内层循环500次(这是不可能的,需要修改少于256)
DEL2:DJNZ R6,DEL2 ;内层循环
DJNZ R7,DEL1 ;外层循环
RET
TAB:DB 03H,06H,0CH,09H ;表
END本回答被提问者和网友采纳
第2个回答  2014-12-26
不是你自己写的?
相似回答