帮我解释下这个单片机程序

设计要求:用单片机控制LED灯模拟指示。模拟东西方向的十字路口交通信号控制情况。东西向通行时间为80S,南北向通行时间为60S,缓冲3S。区分左行直行,左行30S。帮我分析注译下,最好每条都有。要能给我弄个电路图我在加50,谢谢。
程序如下:

RED_ZHU BIT P0.0
YELLOW_ZHU BIT P0.1
GREEN_ZHU BIT P0.2
RED_ZHI BIT P0.4
YELLOW_ZHI BIT P0.5
GREEN_ZHI BIT P0.6
;*********************************************************
ORG 0000H
JMP MAIN
ORG 0080H
;*********************************************************
MAIN:
MOV SP,#60H
MOV P0,#0FFH
MOV P1,#0FFH
MOV P2,#0FFH
CLR RED_ZHU ;第一个状态
CLR RED_ZHI
MOV R5,#10 ;延时5S
D_TIME1:
CALL DELAY
DJNZ R5,D_TIME1
MAIN1:
SETB RED_ZHU ;第二个状态
CLR GREEN_ZHU
CLR RED_ZHI
MOV R5,#160
D_TIME2:
CALL DELAY ;延时80S
DJNZ R5,D_TIME2
MOV R4,#06H
GREEN_ZHU_FLASH:
CPL GREEN_ZHU ;第三个状态
CALL DELAY
DJNZ R4,GREEN_ZHU_FLASH

SETB GREEN_ZHU
SETB RED_ZHU
CLR YELLOW_ZHU
MOV R5,#6 ;延时3S
D_TIME3:
CALL DELAY
DJNZ R5,D_TIME3
CLR RED_ZHU ;第四个状态
SETB YELLOW_ZHU
SETB GREEN_ZHU
SETB RED_ZHI
CLR GREEN_ZHI
MOV R5,#120 ;延时60S
D_TIME4:
CALL DELAY
DJNZ R5,D_TIME4
MOV R4,#06H
GREEN_ZHI_FLASH:
CPL GREEN_ZHI ;第五个状态
CALL DELAY
DJNZ R4,GREEN_ZHI_FLASH
SETB GREEN_ZHI
SETB RED_ZHI
CLR YELLOW_ZHI
MOV R5,#6 ;延时3S
D_TIME5:
CALL DELAY
DJNZ R5,D_TIME5
SETB YELLOW_ZHI
JMP MAIN1
;*********************************************************
; 500MS延时子程序
;*********************************************************
DELAY:
MOV R6,#230
DEL1:
MOV R7,#250
DEL2:
NOP
NOP
NOP
NOP
NOP
NOP
DJNZ R7,DEL2
DJNZ R6,DEL1
RET
;*********************************************************
END
如有错误请帮我改正,发我邮箱[email protected]

;开头的几个是定义端口。用于控制led的亮和暗
RED_ZHU BIT P0.0
YELLOW_ZHU BIT P0.1
GREEN_ZHU BIT P0.2
RED_ZHI BIT P0.4
YELLOW_ZHI BIT P0.5
GREEN_ZHI BIT P0.6
;****************主程序**************************
ORG 0000H
JMP MAIN ;用于51单片机rom内部开始地址为中断入口地址所以加一个跳转指令
ORG 0080H ;程序真正在这里开始
;*********************************************************
MAIN:
MOV SP,#60H ;定义堆栈的首地址。
MOV P0,#0FFH ;P0,P1,P2 端口都置高 所有的LED不显示
MOV P1,#0FFH
MOV P2,#0FFH
CLR RED_ZHU ;第一个状态
CLR RED_ZHI
MOV R5,#10 ;延时5S 利用R5寄存器 重复10次
D_TIME1:
CALL DELAY ;延时为0.5s
DJNZ R5,D_TIME1 ;比较是否到时间
MAIN1:
SETB RED_ZHU ;第二个状态
CLR GREEN_ZHU
CLR RED_ZHI
MOV R5,#160
D_TIME2:
CALL DELAY ;延时80S
DJNZ R5,D_TIME2
MOV R4,#06H
GREEN_ZHU_FLASH:
CPL GREEN_ZHU ;第三个状态
CALL DELAY
DJNZ R4,GREEN_ZHU_FLASH

SETB GREEN_ZHU
SETB RED_ZHU
CLR YELLOW_ZHU
MOV R5,#6 ;延时3S
D_TIME3:
CALL DELAY
DJNZ R5,D_TIME3
CLR RED_ZHU ;第四个状态
SETB YELLOW_ZHU
SETB GREEN_ZHU
SETB RED_ZHI
CLR GREEN_ZHI
MOV R5,#120 ;延时60S
D_TIME4:
CALL DELAY
DJNZ R5,D_TIME4
MOV R4,#06H
GREEN_ZHI_FLASH:
CPL GREEN_ZHI ;第五个状态
CALL DELAY
DJNZ R4,GREEN_ZHI_FLASH
SETB GREEN_ZHI
SETB RED_ZHI
CLR YELLOW_ZHI
MOV R5,#6 ;延时3S
D_TIME5: ;延时0.5s的函数
CALL DELAY
DJNZ R5,D_TIME5
SETB YELLOW_ZHI
JMP MAIN1

/*你写的程序很直观,只需要把相应的端口按照一定的时序控制好就行了*/
/*但是要注意一点 那就是每种状态变化时 要把上一状态 恢复成原样*/
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-06-01
DELAY:
MOV R6,#230
DEL1:
MOV R7,#250
DEL2:
NOP
NOP
NOP
NOP
NOP
NOP
DJNZ R7,DEL2
DJNZ R6,DEL1
RET
;*********************************************************
END
第2个回答  2010-05-31
不懂汇编语言
相似回答
大家正在搜