- 註冊時間
- 2004-10-19
- 最後登錄
- 2023-5-14
- 主題
- 查看
- 積分
- 205
- 閱讀權限
- 50
- 文章
- 56
- 相冊
- 0
- 日誌
- 0
狀態︰
離線
|
本帖最後由 begti20 於 2011-12-16 05:49 編輯
- ; 交通號誌紅綠燈模擬控制程式
- ; begti20 2011.12.16 AM.
- ; MCU:Atmel AT89S51
- ; P0的I/O規劃
- ; 第一組紅綠燈(縱向) P0.2=紅燈,P0.1=黃燈,P0.0=綠燈
- ; 第二組紅綠燈(橫向) P0.5=紅燈,P0.4=黃燈,P0.3=綠燈
- ;
- ; 燈號流程變化表(觀察無倒數計秒的路口紅綠燈)
- ; (橫向) (縱向) 時間
- ; STEP NC NC R2 Y2 G2 R1 Y1 G1 SEC 說明
- ; 1 0 0 1 0 0 0 0 1 20 縱向通行20秒
- ; STEP2-3重複三次(綠燈閃爍三次)
- ; 2 0 0 1 0 0 0 0 0 .5 縱向綠燈滅0.5秒
- ; 3 0 0 1 0 0 0 0 1 .5 縱向綠燈亮0.5秒
- ; 4 0 0 1 0 0 0 1 0 2 縱向黃燈亮2秒
- ; 5 0 0 0 0 1 1 0 0 20 橫向通行20秒
- ; STEP6-7重複三次(綠燈閃爍三次)
- ; 6 0 0 0 0 0 1 0 0 .5 橫向綠燈滅0.5秒
- ; 7 0 0 0 0 1 1 0 0 .5 橫向綠燈亮0.5秒
- ; 8 0 0 0 1 0 1 0 0 2 橫向通行20秒
- ; 9 跳回STEP 1進入下一次縱向通行
-
- LED: REG P0 ;宣告P0接6個LED
- ORG 0 ;宣告程式起始位置
- STEP1: MOV LED,#00100001B ;縱向通行20秒
- CALL DT20
- MOV R3,#3 ;縱向綠燈閃爍三次
- STEP2: MOV LED,#00100000B ;縱向綠燈滅0.5秒
- CALL DT05
- MOV LED,#00100001B ;縱向綠燈亮0.5秒
- CALL DT05
- DJNZ R3,STEP2 ;STEP2-3重複三次(閃三次)
- MOV LED,#00100010B ;縱黃亮2秒
- CALL DT2
- MOV LED,#00001100B ;橫向通行20秒
- CALL DT20
- MOV R3,#3 ;橫向綠燈閃爍3次
- STEP6: MOV LED,#00000100B ;橫向綠燈滅0.5秒
- CALL DT05
- MOV LED,#000011000B ;橫向綠燈亮0.5秒
- CALL DT05
- DJNZ R3,STEP6 ;重複3次
- MOV LED,#00010100B ;橫向黃燈亮2秒
- CALL DT2
- JMP STEP1 ;跳回STEP1,再次縱向通行
- DT20: MOV R4,#100 ;設定R4延遲20秒的參數
- JMP DTN
- DT05: MOV R4,#5 ;設定R4延遲0.5秒的參數
- JMP DTN
- DT2: MOV R4,#20 ;設定R4,2秒的參數
- JMP DTN
- DTN: CALL DT01 ;設定R4*0.1秒的時間
- DJNZ R4,DTN
- RET
- DT01: MOV R6,#250 ;延遲0.1秒的副程式
- T01: MOV R7,#200
- DJNZ R7,$
- DJNZ R6,T01
- RET
- END ;宣告程式結束
複製代碼 寫程式說明比寫程式花更多的時間,好無聊!
終於完成了,以供參考,請多指教 |
-
總評分: 威望 + 2
查看全部評分
|