8051 신호등 설계 소스 질문입니다.

hyoyeob의 이미지

안녕하세요. 8051을 통해 신호등을 만들려고 설계중입니다. 빨간불 이후 노란불, 초록불 순으로 들어오고 인터럽트 키를 통해 스피커음이 발생하며, 각 신호때마다 led창 8x8에 그에 맞는 색을 출력합니다.
빨간불일때 빨간 8x8 led 노란불일때 노란 8x8 led 이런 식으로요.

스피커와 led구현에서 막히는데 책 예제보며 부랴부랴 따라 하는 거라 조금 힘듭니다. 소스좀 봐주시고 수정 부탁드리겠습니다!

아래는 소스입니다.

PPI_A      EQU    0C014H
PPI_B      EQU    0C015H
PPI_C      EQU    0C016H
PPI_CR     EQU    0C017H
RED_FONT   EQU    30H
GREN_FONT  EQU    31H 
 ORG 2000H
 SJMP START
 ORG 2003H
 SJMP SERVICE
;
;
DISP_LED:
           PUSH   PSW
           MOV    PSW,#00001000B        ; BANK 1
DSP_LOOP:
           MOV    A,RED_FONT
           MOV    DPTR,#PPI_A
           MOVX   @DPTR,A               
           MOV    A,GREN_FONT
           INC    DPTR
           MOVX   @DPTR,A              
           MOV    A,#00
           INC    DPTR                  ; 8255 Cport
           MOVX   @DPTR,A               
           MOV    A,RED_FONT
           RL     A
           MOV    RED_FONT,A           
           MOV    A,GREN_FONT
           RL     A
           MOV    GREN_FONT,A           
           MOV    A,#0FFH
           MOVX   @DPTR,A               ; LED Off
           POP    PSW
           RET
;
;
;
START: MOV SP,#50H
 MOV    PSW,#0H
 SETB IP.0
 SETB EA
 SETB IE.0
 SETB TCON.0
 MOV DPTR,#PPI_CR
           MOV    A,#80H
           MOVX   @DPTR,A  
 DEC     DPL                   ; DPTR <= Cport
            MOV  A,#0FFH
           MOVX @DPTR,A
LOOP: MOV A,#11101110B 
 MOV P1,A
 MOV RED_FONT,#00000001B
 MOV GREEN_FONT,#0
 ACALL DEL1
 MOV A,#11011101B
 MOV P1,A
 ACALL DEL2
 MOV A,#10111011B
 MOV P1,A
 MOV RED_FONT,#0
 MOV GREEN_FONT,#00000001B
 ACALL DEL1
 SJMP LOOP
SERVICE: MOV A,#000000000B
 MOV P1,A
 RETI
DEL1: MOV 30H,#8
DEL11: ACALL TIMER
 CALL DISP_LED
 DJNZ 30H,DEL11
 RET
DEL2: MOV 30H,#6
DEL21: ACALL TIMER
 DJNZ 30H,DEL21
 RET
TIMER: PUSH 0
 PUSH B
 MOV R0,#90
L1: MOV B,#0
L2:  NOP
 NOP
 NOP
 NOP
 NOP
 DJNZ B,L2
 DJNZ R0,L1
 POP B
 POP 0
 RET
 END