SOGO論壇
  登入   註冊   找回密碼
查看: 5077|回覆: 21
列印 上一主題 下一主題

[問題求助] 8051 紅綠燈模擬 [複製連結]

Rank: 3Rank: 3

狀態︰ 離線
跳轉到指定樓層
1
發表於 2011-12-8 16:22:39 |只看該作者 |正序瀏覽
各位大大可以幫小弟看一下這個程式哪裡有問題,長時間執行就會出現誤差
電路使用P1來控制6個LED,P10~P12控制一組分別是G.Y.R三色,p13~p15控制另一組

Start:
        mov        a,#100001b
        outl        p1,a
        mov        r4,#500
        call        Timer
;
        mov        r5,#5
;
Loop:        anl        p1,#111110b
        mov        r4,#10
        call        Timer
        orl        p1,#000001b
        mov        r4,#10
        call        Timer
        djnz        r5,Loop
;
        mov        a,#100010b
        outl        p1,a
        mov        r4,#100
        call        Timer
;
        mov        a,#001100b
        outl        p1,a
        mov        r4,#500
        call        Timer
;
        mov        r5,#5
;
Loop1:        anl        p1,#110111b
        mov        r4,#10
        call        Timer
        orl        p1,#001000b
        mov        r4,#10
        call        Timer
        djnz        r5,Loop1
;
        mov        a,#010100b
        outl        p1,a
        mov        r4,#100
        call        Timer
        jmp        Start
;******************************
; Delay Time=(R4)*0.02 SEC.
;******************************
Timer:
        mov        a,#256-250
        mov        t,a
        strt        t
L:        jtf        X1
        jmp        L
X1:        djnz        r4,Timer
        ret
        end
喜歡嗎?分享這篇文章給親朋好友︰
               感謝作者     

Rank: 3Rank: 3

狀態︰ 離線
22
發表於 2011-12-19 12:17:16 |只看該作者
感謝各位大大的鼎力相助,你們的解說比上課學到的還多,begti20大大提供的程式解說太神奇我居然都了解,請受小弟一拜
剛開始做對程式都不清楚,程式也是東拼西湊到處"借"來的,經過大大們指點解說受益良多,各位大德請受小弟第二拜
.......第三拜我掰不開來了....總之感謝了

點評

begti20  會員互動討論,大家都在受益,大家都在學習,大家都在成長,彼此彼此別客氣.  發表於 2011-12-22 02:51:21
已有 1 人評分SOGO幣 收起 理由
又靜 + 5 真誠與會員互動交流討論,值得肯定.

總評分: SOGO幣 + 5   查看全部評分

Rank: 5Rank: 5

狀態︰ 離線
21
發表於 2011-12-16 05:41:05 |只看該作者
本帖最後由 begti20 於 2011-12-16 05:49 編輯
  1. ; 交通號誌紅綠燈模擬控制程式
  2. ;                          begti20 2011.12.16 AM.
  3. ; MCU:Atmel AT89S51
  4. ; P0的I/O規劃
  5. ; 第一組紅綠燈(縱向) P0.2=紅燈,P0.1=黃燈,P0.0=綠燈
  6. ; 第二組紅綠燈(橫向) P0.5=紅燈,P0.4=黃燈,P0.3=綠燈
  7. ;
  8. ; 燈號流程變化表(觀察無倒數計秒的路口紅綠燈)
  9. ;        (橫向)  (縱向)  時間 
  10. ; STEP NC NC R2 Y2 G2 R1 Y1 G1  SEC   說明
  11. ;  1  0 0 1 0 0 0 0 1  20   縱向通行20秒
  12. ;                     STEP2-3重複三次(綠燈閃爍三次)
  13. ;  2    0 0 1 0 0 0 0 0  .5   縱向綠燈滅0.5秒
  14. ;  3    0 0 1 0 0 0 0 1  .5   縱向綠燈亮0.5秒
  15. ;  4    0 0 1 0 0 0 1 0  2    縱向黃燈亮2秒
  16. ;  5    0 0 0 0 1 1 0 0  20   橫向通行20秒
  17. ;                     STEP6-7重複三次(綠燈閃爍三次)
  18. ;  6    0 0 0 0 0 1 0 0  .5   橫向綠燈滅0.5秒
  19. ;  7    0 0 0 0 1 1 0 0  .5   橫向綠燈亮0.5秒
  20. ;  8  0 0 0 1 0 1 0 0  2    橫向通行20秒 
  21. ;  9  跳回STEP 1進入下一次縱向通行

  22.         
  23. LED:    REG     P0                    ;宣告P0接6個LED
  24.         ORG     0                     ;宣告程式起始位置
  25. STEP1:  MOV     LED,#00100001B        ;縱向通行20秒
  26.         CALL    DT20                  
  27.         MOV     R3,#3                 ;縱向綠燈閃爍三次
  28. STEP2:  MOV     LED,#00100000B        ;縱向綠燈滅0.5秒
  29.         CALL    DT05                  
  30.         MOV     LED,#00100001B        ;縱向綠燈亮0.5秒
  31.         CALL    DT05                  
  32.         DJNZ    R3,STEP2              ;STEP2-3重複三次(閃三次)
  33.         MOV     LED,#00100010B        ;縱黃亮2秒
  34.         CALL    DT2                  
  35.         MOV     LED,#00001100B        ;橫向通行20秒
  36.         CALL    DT20
  37.         MOV     R3,#3                 ;橫向綠燈閃爍3次
  38. STEP6:  MOV     LED,#00000100B        ;橫向綠燈滅0.5秒
  39.         CALL    DT05                  
  40.         MOV     LED,#000011000B       ;橫向綠燈亮0.5秒
  41.         CALL    DT05
  42.         DJNZ    R3,STEP6              ;重複3次
  43.         MOV     LED,#00010100B        ;橫向黃燈亮2秒
  44.         CALL    DT2
  45.         JMP     STEP1                 ;跳回STEP1,再次縱向通行

  46. DT20:   MOV     R4,#100              ;設定R4延遲20秒的參數
  47.         JMP     DTN

  48. DT05:   MOV     R4,#5                 ;設定R4延遲0.5秒的參數
  49.         JMP     DTN

  50. DT2:    MOV     R4,#20                ;設定R4,2秒的參數
  51.         JMP     DTN

  52. DTN:    CALL    DT01                  ;設定R4*0.1秒的時間
  53.         DJNZ    R4,DTN
  54.         RET


  55. DT01:   MOV     R6,#250               ;延遲0.1秒的副程式
  56. T01:    MOV     R7,#200
  57.         DJNZ    R7,$
  58.         DJNZ    R6,T01
  59.         RET

  60.         END                           ;宣告程式結束
複製代碼
寫程式說明比寫程式花更多的時間,好無聊!

終於完成了,以供參考,請多指教

點評

alphi  讓人可以很清楚知道紅綠燈的動作原理.讓我獲益良多  發表於 2011-12-16 10:52:44
已有 1 人評分威望 收起 理由
又靜 + 2 感謝您熱心幫助會員解決問題,論壇需要您的.

總評分: 威望 + 2   查看全部評分

Rank: 5Rank: 5

數位軟體勳章

狀態︰ 離線
20
發表於 2011-12-15 19:53:56 |只看該作者
又靜 發表於 2011-12-15 17:38  
您是最專業的程式設計師怎麼可以這樣寫程式呢
本來還沒注意到,是2237076 提問,才仔細看了一下 |08 ...

哈哈,8051我又不熟.沒有版主那麼厲害.加上用查表可以更清楚看出狀態與設定紅綠燈每一個需要時間.只要把
delay時間弄好.就可以得到每一秒一個單位
紅燈1:15秒.綠燈1:20秒,黃燈1:閃爍5秒;
紅燈2:25秒,綠燈2:10秒.黃燈2:閃爍5秒
失敗只有一種:那就是半途而廢

Rank: 13Rank: 13Rank: 13Rank: 13

原創及親傳圖影片高手勳章 熱心參予論壇活動及用心回覆主題勳章 榮譽會員勳章 數位硬體勳章 小說之星勳章 原創寫手勳章

狀態︰ 離線
19
發表於 2011-12-15 17:38:31 |只看該作者
alphi 發表於 2011-12-15 16:43  
我只是讓他紅燈與绿燈凉久一點是黃燈兩倍時間

您是最專業的程式設計師怎麼可以這樣寫程式呢
本來還沒注意到,是2237076 提問,才仔細看了一下
果然跟我想的一樣 ,扣分!!!扣分  

Rank: 5Rank: 5

數位軟體勳章

狀態︰ 離線
18
發表於 2011-12-15 16:43:12 來自手機 |只看該作者
又靜 發表於 2011-12-15 12:21
alphi 大師,問一下

        DB        10000100B

我只是讓他紅燈與绿燈凉久一點是黃燈兩倍時間
失敗只有一種:那就是半途而廢

Rank: 13Rank: 13Rank: 13Rank: 13

原創及親傳圖影片高手勳章 熱心參予論壇活動及用心回覆主題勳章 榮譽會員勳章 數位硬體勳章 小說之星勳章 原創寫手勳章

狀態︰ 離線
17
發表於 2011-12-15 12:21:33 |只看該作者
alphi 大師,問一下

        DB        10000100B
        DB        10000100B

        DB        00110000B
        DB        00110000B
為何要執行兩次

Rank: 5Rank: 5

數位軟體勳章

狀態︰ 離線
16
發表於 2011-12-14 17:44:46 |只看該作者
本帖最後由 alphi 於 2011-12-14 17:50 編輯

會恆亮.你可以看我寫的註解.對應就知道
1:亮,0代表暗
  1. TABLE:
  2.         DB        10000100B
  3.         DB        10000100B
  4.         DB        01000100B
  5.         DB        00110000B
  6.         DB        00110000B
  7.         DB        00101000B
複製代碼
所以當另一邊黃燈時. 另一邊是紅燈亮.你如果要有閃爍功能.更改TAB的值與R0變數迴圈次數即可.所以查表法對於有規則性的修改會比較容易
失敗只有一種:那就是半途而廢

Rank: 3Rank: 3

狀態︰ 離線
15
發表於 2011-12-14 17:36:50 |只看該作者
alphi 發表於 2011-12-9 18:56  
感謝"begti20" 大師提供編譯錯誤,原先我以為語法上沒問題只是邏輯上的問題,沒有編譯過測試.看到"begti20"的 ...

謝謝大大的支援,想請問大大你的程式中有沒有閃綠燈跟閃黃燈
閃黃燈時另一組的紅燈也一起閃,還是會恆亮
之前一直在分析你的程式,只是小弟功力不好可以請大大開示一下,感恩

Rank: 3Rank: 3

狀態︰ 離線
14
發表於 2011-12-13 11:01:37 |只看該作者
謝謝各位大大的支援,整個動作都正常在此向各位大大說聲感恩

點評

alphi  版主與各位大大有幫助到你就好了  發表於 2011-12-14 12:35:07
您需要登錄後才可以回覆 登入 | 註冊


本論壇為非營利自由討論平台,所有個人言論不代表本站立場。文章內容如有涉及侵權,請通知管理人員,將立即刪除相關文章資料。侵權申訴或移除要求:abuse@oursogo.com

GMT+8, 2025-7-21 14:36

© 2004-2025 SOGO論壇 OURSOGO.COM
回頂部