作者loveflames (.....)
看板ASM
標題Re: 麻煩會8051的大大,幫我一個忙!拜託了...謝謝
時間Wed Jan 31 23:29:14 2007
註:此程式完全沒考慮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)
1F:推 ruemann:這個程式是利用p3來偵測led是否有壞嗎?那硬體要如何接? 02/03 00:28
2F:→ ruemann:不太懂為何p3可以知道led是好是壞 02/03 00:28
3F:推 loveflames:其實只是讓LED的負端變1使其不亮 02/03 00:29
4F:推 loveflames:我的猜測是如果送電進p3的某接腳會使該接腳的值變1 02/03 00:31
5F:→ loveflames:p3的接腳如果是1則會設定p1對應的接腳為1,用p3來控制亮或不亮 02/03 00:33
6F:→ loveflames:至於實作,要到下學期才行,所以有些猜測無法證實 02/03 00:34
7F:→ loveflames:現在都只是在pc上模擬而已 02/03 00:37
※ 編輯: loveflames 來自: 61.225.1.115 (02/03 00:39)
8F:→ ruemann:所以在讀狀態時要先將該pin設為1後才能正確讀取資料 02/03 00:38
9F:→ ruemann:另外問個問題,我記得8051的io是類似open drain的做法 02/03 00:39
10F:→ ruemann:所以在讀狀態時要先將該pin設為1後才能正確讀取資料 02/03 00:39
11F:→ ruemann:所以這個程式部份有點問題(上面被砍了,重推) 02/03 00:39
12F:→ loveflames:一開始不是把p3每個接腳都歸0了?送電給p3是希望該接腳 02/03 00:40
13F:→ loveflames:變1,進而設定p1接腳 02/03 00:42
14F:→ loveflames:假設送電進p3就變1,似乎是我想得太簡單的樣子 02/03 00:43
15F:推 ruemann:所謂的open drain是指pin只擁有輸出0的能力 02/03 00:51
16F:→ ruemann:因此輸出1的能力很差。所以若設為0時,可視為接地 02/03 00:52
17F:→ ruemann:如此外部的電壓也會被keep在接近的電位 02/03 00:52
18F:→ ruemann:如此外部的電壓也會被keep在接近地的電位 02/03 00:54
19F:→ ruemann:因此需要先設為1後,將pin釋放才能正確的取得外部號 02/03 00:55
※ 編輯: loveflames 來自: 61.225.1.115 (02/03 01:40)