ORG?0000H
LJMP?START
ORG?0003H;INT?0?中斷入口地址
LJMP?INT0
ORG?0040H
START:
MOV?SP,#60H
SETB?EX0?;INT?0?中斷有效
SETB?IT0
SETB?EA
LCALL?STATUS0?;初始狀態(都是紅燈)
CIRCLE:
LCALL?STATUS1?;南北綠燈,東西紅燈
LCALL?STATUS2?;南北綠燈閃轉黃燈,東西紅燈
LCALL?STATUS3?;南北紅燈,東西綠燈
LCALL?STATUS4?;南北紅燈,東西綠燈閃轉黃燈
LJMP?CIRCLE
INT0:
PUSH?PSW?;保護現場
PUSH?2
PUSH?ACC
MOV?DPTR,#8300H
MOV?A,#0FH;南北,東西都亮紅燈
MOVX?@DPTR,A
MOV?R2,#100;延時10秒
LCALL?DELAY
POP?ACC;恢復現場
MOVX?@DPTR,A
POP?2
POP?PSW
RETI
STATUS0:?;南北紅燈,東西紅燈
MOV?DPTR,#8300H
MOV?A,#0FH
MOVX?@DPTR,A
MOV?R2,#10;延時1秒
LCALL?DELAY
RET
STATUS1:?;南北綠燈,東西紅燈
MOV?DPTR,#8300H
MOV?A,#96H;南北綠燈,東西紅燈
MOVX?@DPTR,A?
MOV?R2,#200;延時20秒
LCALL?DELAY
RET
STATUS2:?;南北綠燈閃轉黃燈,東西紅燈
MOV?DPTR,#8300H
MOV?R3,#03H;綠燈閃3次
FLASH:
MOV?A,#9FH
MOVX?@DPTR,A
MOV?R2,#03H
LCALL?DELAY
MOV?A,#96H
MOVX?@DPTR,A
MOV?R2,#03H
LCALL?DELAY
DJNZ?R3,FLASH
MOV?A,#06H;南北黃燈,東西紅燈
MOVX?@DPTR,A
MOV?R2,#10;延時1秒
LCALL?DELAY
RET
STATUS3:?;南北紅燈,東西綠燈
MOV?DPTR,#8300H
MOV?A,#69H
MOVX?@DPTR,A
MOV?R2,#200;延時20秒
LCALL?DELAY
RET
STATUS4:?;南北紅燈,東西綠燈閃轉黃燈
MOV?DPTR,#8300H
MOV?R3,#03H;綠燈閃3次
FLASH1:
MOV?A,#6FH
MOVX?@DPTR,A
MOV?R2,#03H
LCALL?DELAY
MOV?A,#69H
MOVX?@DPTR,A
MOV?R2,#03H
LCALL?DELAY
DJNZ?R3,FLASH1
MOV?A,#09H;南北紅燈,東西黃燈
MOVX?@DPTR,A
MOV?R2,#10;延時1秒
LCALL?DELAY
NOP
RET
DELAY:;延時子程序
PUSH?2
PUSH?1
PUSH?0
DELAY1:
MOV?1,#00HDELAY2:
MOV?0,#0B2H
DJNZ?0,$
DJNZ?1,DELAY2?;延時?100?mS
DJNZ?2,DELAY1
POP?0
POP?1
POP?2
RET
END
這是我們的實驗,程序肯定沒問題。至於ULN2803,只是壹個增大電流,電壓的芯片,因為51單片機本身的電流太小。妳改壹下就好。至於其他不明白的地方,可以交流。QQ375778861