tgs0910
|
分享:
▼
不好意思時常麻煩大大的幫忙 老大請教一下我18樓的程式對嗎 就算用2顆8051對接也無法收到信號 謝謝 我今天又去買兩個75176 我共有六個75176 但是只有一個可以這樣接還收的到東西 程式是用大大幫小弟改的程式 ORG 00h MOV TMOD,#00100000B MOV TH1,#0FDH SETB TR1 ORL PCON,#80H MOV SCON,#01111000B clr 20h.0 START: jnb ri, checkp21 clr ri mov a, sbuf cjne a, #30h, chkrcv31h setb p1.1 setb 20h.0 jmp checkp21 chkrcv31h: cjne a, #31h, rcvother setb p1.2 jnb 20h.0, checkp21 setb p1.3 ; 收到 30h, 31h clr 20h.0 jmp checkp21 rcvother: clr 20h.0 ; 非 30h, 31h checkp21: setb p2.1 ; pull high p2.1 for input jnb p2.1, START_9 jmp START START_9: mov dptr, #table next: mov a,#0 movc a,@a+dptr cjne a,#'$',trans jmp START trans: mov sbuf,a jnb ti,$ clr ti inc dptr ajmp next table: DB 30h, 31h, '$' 謝謝
[ 此文章被tgs0910在2006-04-19 21:23重新編輯 ]
|
|
x0
[20 樓]
From:台灣中華電信
| Posted:2006-04-19 21:16 |
|
|
tgs0910
|
分享:
▲
▼
老大小弟終於找出問題的所在了 原來是小弟的麵包版太舊了 有些接觸不良 小弟換了一塊就沒這個問題了 謝謝大大的幫忙 不過小弟還有些問題 可否麻煩大大有空時幫幫小弟謝謝 ORG 00h MOV TMOD,#00100001B MOV TH1,#0FDH SETB TR1 ORL PCON,#80H MOV SCON,#01110000B ; LOOP: MOV P1,#11111111B JNB RI,K0 CLR RI ; MOV A,SBUF ; C1: CJNE A,#FFH,C2 CLR P1.0 JMP K0 ; C2: CJNE A,#31H,C3 CLR P1.1 JMP K0 ; C3: CJNE A,#32H,C4 CLR P1.2 JMP K0 ; C4: CJNE A,#33H,C5 CLR P1.3 JMP K0 ; C5: CJNE A,#34H,C6 CLR P1.4 JMP K0 ; C6: CJNE A,#35H,C7 CLR P1.5 JMP K0 ; C7: CJNE A,#36H,C8 CLR P1.6 JMP K0 ; C8: CJNE A,#37H,LOOP CLR P1.7 JMP K0 ; K0: MOV P2,#11111111B JB P2.0,K1 MOV A,#FFH ACALL DELAY JMP K8 ; K1: JB P2.1,K2 MOV A,#31H ACALL DELAY JMP K8 ; K2: JB P2.2,K3 MOV A,#32H ACALL DELAY JMP K8 ; K3: JB P2.3,K4 MOV A,#33H ACALL DELAY JMP K8 ; K4: JB P2.4,K5 MOV A,#34H ACALL DELAY JMP K8 ; K5: JB P2.5,K6 MOV A,#35H ACALL DELAY JMP K8 ; K6: JB P2.6,K7 MOV A,#36H ACALL DELAY JMP K8 ; K7: JB P2.7,K9 MOV A,#37H ACALL DELAY JMP K8 ; K9: JMP LOOP ; K8: MOV SBUF,A JNB TI,$ CLR TI JMP LOOP ; DELAY: MOV R4,#40 ; TIMER: MOV TH0,#3CH MOV TL0,#B0H SETB TR0 ; WAIT: JB TF0,OK AJMP WAIT ; OK: CLR TF0 DJNZ R4,TIMER RET ; END 小弟這樣寫哪裡有問題請大大幫小弟看一下 為什麼不能用 小弟看過可以用 一隻腳來選擇要用哪一段程式 然後把那一隻腳接地就永遠用那一段程式來執行 就是第一段把 P1.1 SETB 時就發射30H 第二段把 P1.1 SETB 時就發射31H
請問大大知道大概要如何寫 謝謝
|
|
x0
[22 樓]
From:台灣
| Posted:2006-04-29 18:11 |
|
|
cmovies
|
分享:
▲
▼
小弟這樣寫哪裡有問題請大大幫小弟看一下 為什麼不能用 -> 我不曉得你所謂的不能用是指什麼問題? 唯一能看出不太合理的地方是收到資料後, 如果 P2 沒有被按下那麼 P1 的動作立刻就消失了 LOOP: MOV P1,#11111111B <- 就是這行 就算 P2 有被按下, 兩秒鐘後 P1 得動作也會消失 (DELAY 在 12 MHz 應該是兩秒吧!?)
如果你的程式是想要發送端的 P2 被按了哪些, 接收端的 P1 相對應的腳位就拉 High 其他為 Low. 那直接把 P2 送出去就好了 ORG 00h MOV TMOD,#00100001B MOV TH1,#0FDH SETB TR1 ORL PCON,#80H MOV SCON,#01110000B MOV P1,#11111111B LOOP: JNB RI,K0 CLR RI MOV A,SBUF MOV P1, A K0: MOV P2,#11111111B NOP MOV A,P2 CPL A MOV SBUF,A CALL DELAY JMP LOOP
DELAY: MOV R4,#40 TIMER: MOV TH0,#3CH MOV TL0,#B0H CLR TF0 SETB TR0 WAIT: JNB TF0,WAIT DJNZ R4,TIMER RET END
小弟看過可以用 一隻腳來選擇要用哪一段程式 然後把那一隻腳接地就永遠用那一段程式來執行 就是第一段把 P1.1 SETB 時就發射30H 第二段把 P1.1 SETB 時就發射31H -> 這跟你用 JB 來判別要送哪個資料有什麼不一樣嗎??? LOOP: JB P0.0, CODE1 JMP CODE2 CODE1: ; JMP LOOP CODE2: ; JMP LOOP
|
|
x0
[23 樓]
From:台灣中華電信
| Posted:2006-04-30 23:52 |
|
|
|