??
字號(hào):
;-----------------------------------
; 交通燈控制器實(shí)例
;功能:使用6只LED模擬交通燈控制器
;-----------------------------------
SOUTH_RED EQU P0.0
SOUTH_YELLOW EQU P0.1
SOUTH_GREEN EQU P0.2
EAST_RED EQU P0.3
EAST_YELLOW EQU P0.4
EAST_GREEN EQU P0.5
SECOND_FLAG BIT 00H
TIME_COUNT0 DATA 30H
TIME_COUNT1 DATA 31H
STATUS_FLAG DATA 32H
SECOND_COUNT DATA 33H
ORG 0000H ;偽指令,指定程序從0000H開始存放
LJMP MAIN ;跳轉(zhuǎn)指令,程序跳轉(zhuǎn)到MAIN處
ORG 000BH ;偽指令,指定程序從T0入口地址000BH開始存放
LJMP T0_INT ;跳轉(zhuǎn)指令,程序跳轉(zhuǎn)到T0_INT處
ORG 0100H
MAIN:
MOV SP,#60H ;給堆棧指針賦初值
LCALL INIT ;調(diào)用狀態(tài)初始化子程序
LCALL T0_INIT ;調(diào)用定時(shí)器中斷初始化子程序
LOOP:
JNB SECOND_FLAG,LOOP ;根據(jù)SECOND_FLAG值判斷0.5秒是否到
LCALL STATUS_CHANGE ;每0.5秒調(diào)用交通燈狀態(tài)轉(zhuǎn)換子程序
CLR SECOND_FLAG ;清零SECOND_FLAG
SJMP LOOP ;跳轉(zhuǎn),程序繼續(xù)
STATUS_CHANGE:
;---------------------------------
; 交通燈狀態(tài)轉(zhuǎn)換子程序
;---------------------------------
MOV A,STATUS_FLAG ;根據(jù)STATUS_FLAG值進(jìn)行散轉(zhuǎn)
ADD A,STATUS_FLAG
MOV DPTR,#STATUS_PROC_TABLE
JMP @A+DPTR
STATUS_PROC_TABLE:
AJMP STATUS1
AJMP STATUS2
AJMP STATUS3
AJMP STATUS4
AJMP STATUS5
AJMP STATUS6
STATUS1:
;---------------------------------
; 散轉(zhuǎn)子程序1
;狀態(tài)1:南北綠燈,東西紅燈,持續(xù)20秒
;然后轉(zhuǎn)到狀態(tài)2
;---------------------------------
DJNZ SECOND_COUNT,STATUS1_EXIT
MOV SECOND_COUNT,#6 ;20秒定時(shí)到,轉(zhuǎn)換到狀態(tài)2
MOV STATUS_FLAG,#01H
STATUS1_EXIT:
RET
STATUS2:
;---------------------------------
; 散轉(zhuǎn)子程序2
;狀態(tài)2:南北綠燈閃,東西紅燈,持續(xù)3秒
;然后轉(zhuǎn)到狀態(tài)3
;---------------------------------
DJNZ SECOND_COUNT,STATUS2_EXIT
MOV SECOND_COUNT,#4 ;3秒定時(shí)到,轉(zhuǎn)換到狀態(tài)3
MOV STATUS_FLAG,#02H
SETB SOUTH_RED ;南北紅燈滅
CLR SOUTH_YELLOW ;南北黃燈亮
SETB SOUTH_GREEN ;南北綠燈滅
CLR EAST_RED ;東西紅燈亮
SETB EAST_YELLOW ;東西黃燈滅
SETB EAST_GREEN ;東西綠燈滅
RET
STATUS2_EXIT:
CPL SOUTH_GREEN ;南北綠燈閃
RET
STATUS3:
;---------------------------------
; 散轉(zhuǎn)子程序3
;狀態(tài)3:南北黃燈,東西紅燈 ,持續(xù)2秒
;然后轉(zhuǎn)到狀態(tài)4
;---------------------------------
DJNZ SECOND_COUNT,STATUS3_EXIT
MOV SECOND_COUNT,#40 ;2秒定時(shí)到,轉(zhuǎn)換到狀態(tài)4
MOV STATUS_FLAG,#03H
CLR SOUTH_RED ;南北紅燈亮
SETB SOUTH_YELLOW ;南北黃燈滅
SETB SOUTH_GREEN ;南北綠燈滅
SETB EAST_RED ;東西紅燈滅
SETB EAST_YELLOW ;東西黃燈滅
CLR EAST_GREEN ;東西綠燈亮
STATUS3_EXIT:
RET
STATUS4:
;---------------------------------
; 散轉(zhuǎn)子程序4
;狀態(tài)4:南北紅燈,東西綠燈,持續(xù)20秒
;然后轉(zhuǎn)到狀態(tài)5
;---------------------------------
DJNZ SECOND_COUNT,STATUS4_EXIT
MOV SECOND_COUNT,#6 ;20秒定時(shí)到,轉(zhuǎn)換到狀態(tài)5
MOV STATUS_FLAG,#04H
STATUS4_EXIT:
RET
STATUS5:
;---------------------------------
; 散轉(zhuǎn)子程序5
;狀態(tài)5:南北紅燈,東西綠燈閃,持續(xù)3秒
;然后轉(zhuǎn)到狀態(tài)6
;---------------------------------
DJNZ SECOND_COUNT,STATUS5_EXIT
MOV SECOND_COUNT,#4 ;3秒定時(shí)到,轉(zhuǎn)換到狀態(tài)6
MOV STATUS_FLAG,#05H
CLR SOUTH_RED ;南北紅燈亮
SETB SOUTH_YELLOW ;南北黃燈滅
SETB SOUTH_GREEN ;南北綠燈滅
SETB EAST_RED ;東西紅燈滅
CLR EAST_YELLOW ;東西黃燈亮
SETB EAST_GREEN ;東西綠燈滅
RET
STATUS5_EXIT:
CPL EAST_GREEN ;東西綠燈閃
RET
STATUS6:
;---------------------------------
; 散轉(zhuǎn)子程序6
;狀態(tài)6:南北紅燈,東西黃燈 ,持續(xù)2秒
;然后轉(zhuǎn)到狀態(tài)1
;---------------------------------
DJNZ SECOND_COUNT,STATUS6_EXIT
MOV SECOND_COUNT,#40 ;2秒定時(shí)到,轉(zhuǎn)換到狀態(tài)1
MOV STATUS_FLAG,#00H
SETB SOUTH_RED ;南北紅燈滅
SETB SOUTH_YELLOW ;南北黃燈滅
CLR SOUTH_GREEN ;南北綠燈亮
CLR EAST_RED ;東西紅燈亮
SETB EAST_YELLOW ;東西黃燈滅
SETB EAST_GREEN ;東西綠燈滅
STATUS6_EXIT:
RET
INIT:
;---------------------------------
; 狀態(tài)初始化子程序
;---------------------------------
SETB SOUTH_RED ;南北紅燈滅
SETB SOUTH_YELLOW ;南北黃燈滅
CLR SOUTH_GREEN ;南北綠燈亮
CLR EAST_RED ;東西紅燈亮
SETB EAST_YELLOW ;東西黃燈滅
SETB EAST_GREEN ;東西綠燈滅
MOV TIME_COUNT0,#250 ;變量TIME_COUNT0賦初值250
MOV TIME_COUNT1,#8 ;變量TIME_COUNT1賦初值8
MOV SECOND_COUNT,#40 ;變量SECOND_COUNT賦初值40
MOV STATUS_FLAG,#00H ;變量STATUS_FLAG賦初值00H
CLR SECOND_FLAG ;清零位變量SECOND_FLAG
RET
T0_INT:
;---------------------------------
; T0中斷服務(wù)程序
;每0.5秒置一SECOND_FLAG
;---------------------------------
DJNZ TIME_COUNT0,T0_INT_EXIT
MOV TIME_COUNT0,#250
DJNZ TIME_COUNT1,T0_INT_EXIT
MOV TIME_COUNT1,#8
SETB SECOND_FLAG ;定時(shí)0.5秒到,置一SECOND_FLAG
T0_INT_EXIT:
RETI
T0_INIT:
;---------------------------------
; 定時(shí)器T0的初始化
;---------------------------------
MOV TMOD,#00000010B ;定時(shí)器T0工作在方式2
MOV TL0,#06H ;設(shè)定定時(shí)器T0的初始值
MOV TH0,#06H ;設(shè)定定時(shí)器T0的自動(dòng)重裝入值
MOV TCON,#00010000B ;定時(shí)器T0使能
SETB EA ;中斷允許總控制位使能
SETB ET0 ;T0中斷使能
RET
END
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -