[問題] 89c51 serial port 問題 "救救我"

看板ASM (組合語言)作者 (5 + 2 = life)時間11年前 (2013/10/14 15:05), 編輯推噓1(102)
留言3則, 1人參與, 最新討論串1/1
板上的各位大大 想請教一個關於 89c51 serial poart的問題 是這樣的 我寫了一組code如下---------------------- org 00h jmp start org 23h jmp uart_int start: MOV IE,#10010000B MOV SP,#6FH mov scon,#01110000b mov tmod,#00100000b mov th1,#253 setb tr1 mov P0,#11111111b receive: jnb ri,$ clr ri jmp receive uart_int: push IE mov IE,#00h loop: call delay cpl P0.0 jmp loop back: pop IE reti delay: mov r5,#5 d1: mov r6,#202 d2: mov r7,#246 djnz r7,$ djnz r6,d2 djnz r5,d1 ret end --------------------------------------------- 硬體的部分 1.EA/Vpp接5V 並且跟Reset pin中間串一10u的電容 Reset再接個10k拉到GND 2.X1 X2中間選用了11.059MH的OSC並且各自接一27p的電容拉到GND 3. P0.0腳串LED串150歐姆電阻pull high至5V 4. Vcc=5V ----------------------------------------------- 由於只是單純想測試serial的中斷旗標RI是否能正常工作 所以照上述語法 他應該會有的動做是 1. 89c51上電並處於stby的狀態 2. 我從電腦端發射任何一串訊號 89c51執行中斷副程式 LED開始閃爍 可我時實際的情況是 1. 89c51上電,並處於stby狀態,但是從電腦端發送訊息後卻沒反應 2. 89c51上電,LED立馬開始閃爍(並沒有發送任何訊號給RxD,但卻直接執行中斷副程式了) 以上兩種狀況會隨機出現,完全沒有一個規律 所以我火了 乾脆直接把89c51上Rxd Txd的腳位floating再來做測試 有趣的是89c51上電後LED竟然還是會馬上就開始閃爍 (隨機出現的 另一種情況當然就是沒有任何反應) 我LED閃爍的動作是寫在serial的中斷副程式內 所以推測應該是RI被設為1了觸發中斷副程式 但為什麼RxD floating的狀態 RI卻會變成1阿 是我語法寫錯了嗎 可我一開始有設定scon讓RI為0阿 所以應該是是硬體的問題(??) 電路的部分 是我遺漏了甚麼地方嗎? 各位大大們 可以幫小弟解惑一下嗎 拜託~ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.120.179.172

10/14 16:25, , 1F
org 23H
10/14 16:25, 1F

10/14 16:28, , 2F
看漏了 XDD 上面那行作廢 XDD 你把RXD PULL HIGH4.7K看看
10/14 16:28, 2F

10/14 16:30, , 3F
另外你應該在中斷內清RI不是主迴圈,主迴圈jmp$就好了
10/14 16:30, 3F
文章代碼(AID): #1IMvUeML (ASM)
文章代碼(AID): #1IMvUeML (ASM)