Re: 麻煩會8051的大大,幫我一個忙!拜託了...謝謝

看板ASM (組合語言)作者 (.....)時間17年前 (2007/01/31 23:29), 編輯推噓4(4015)
留言19則, 2人參與, 最新討論串3/3 (看更多)
註:此程式完全沒考慮clock cycle 3個LED的負分別接p1.0 p1.1 p1.2(由p3來控制p1,如果p3.0為1則p1.0為1) p1.0是0則第1個LED會亮 p1.0是1則第1個LED不會亮 以此類推 如果p1.0是1維持了50000us*200=10000000us=10秒會跳到start2 p1.1是1維持了10秒會跳到start3 p1.2是1維持了10秒會跳到over結束 $mod51 $DEBUG mov p1,#11111110b mov p3,#11111111b mov tmod,#01h;timer0 =mode1 start:mov r0,#199 lcall re loop:jnb tf0,c1 ;2 50000 lcall re;2 50000 djnz r0,c1 sjmp start2 c1:jnb p3.0,d1 clr p1.0 sjmp start d1:setb p1.0 sjmp loop start2:mov p1,#11111101b mov r0,#199 lcall re;2 loop2:jnb tf0,c2 ;2 lcall re;2 djnz r0,c2 sjmp start3 c2:jnb p3.1,d2 clr p1.1 sjmp start2 d2:setb p1.1 sjmp loop2 start3:mov p1,#11111011b mov r0,#199 lcall re;2 loop3:jnb tf0,c3 ;2 lcall re;2 djnz r0,c3 sjmp over c3:jnb p3.2,d3 clr p1.2 sjmp start3 d3:setb p1.2 sjmp loop3 over:sjmp $ re:clr tr0;1 mov th0,#03ch;3cb0h=15536=65536-50000 mov tl0,#0b0h; clr tf0;1 setb tr0;1 ret;2 end ※ 編輯: loveflames 來自: 61.225.2.81 (02/01 01:33) ※ 編輯: loveflames 來自: 61.225.2.81 (02/01 01:37) ※ 編輯: loveflames 來自: 61.225.2.81 (02/01 18:35)

02/03 00:28, , 1F
這個程式是利用p3來偵測led是否有壞嗎?那硬體要如何接?
02/03 00:28, 1F

02/03 00:28, , 2F
不太懂為何p3可以知道led是好是壞
02/03 00:28, 2F

02/03 00:29, , 3F
其實只是讓LED的負端變1使其不亮
02/03 00:29, 3F

02/03 00:31, , 4F
我的猜測是如果送電進p3的某接腳會使該接腳的值變1
02/03 00:31, 4F

02/03 00:33, , 5F
p3的接腳如果是1則會設定p1對應的接腳為1,用p3來控制亮或不亮
02/03 00:33, 5F

02/03 00:34, , 6F
至於實作,要到下學期才行,所以有些猜測無法證實
02/03 00:34, 6F

02/03 00:37, , 7F
現在都只是在pc上模擬而已
02/03 00:37, 7F
※ 編輯: loveflames 來自: 61.225.1.115 (02/03 00:39)

02/03 00:38, , 8F
所以在讀狀態時要先將該pin設為1後才能正確讀取資料
02/03 00:38, 8F

02/03 00:39, , 9F
另外問個問題,我記得8051的io是類似open drain的做法
02/03 00:39, 9F

02/03 00:39, , 10F
所以在讀狀態時要先將該pin設為1後才能正確讀取資料
02/03 00:39, 10F

02/03 00:39, , 11F
所以這個程式部份有點問題(上面被砍了,重推)
02/03 00:39, 11F

02/03 00:40, , 12F
一開始不是把p3每個接腳都歸0了?送電給p3是希望該接腳
02/03 00:40, 12F

02/03 00:42, , 13F
變1,進而設定p1接腳
02/03 00:42, 13F

02/03 00:43, , 14F
假設送電進p3就變1,似乎是我想得太簡單的樣子
02/03 00:43, 14F

02/03 00:51, , 15F
所謂的open drain是指pin只擁有輸出0的能力
02/03 00:51, 15F

02/03 00:52, , 16F
因此輸出1的能力很差。所以若設為0時,可視為接地
02/03 00:52, 16F

02/03 00:52, , 17F
如此外部的電壓也會被keep在接近的電位
02/03 00:52, 17F

02/03 00:54, , 18F
如此外部的電壓也會被keep在接近地的電位
02/03 00:54, 18F

02/03 00:55, , 19F
因此需要先設為1後,將pin釋放才能正確的取得外部號
02/03 00:55, 19F
※ 編輯: loveflames 來自: 61.225.1.115 (02/03 01:40)
文章代碼(AID): #15mBNCj2 (ASM)
文章代碼(AID): #15mBNCj2 (ASM)