作者makefriends (5 + 2 = life)
看板ASM
標題[問題] 89c51 serial port 問題 "救救我"
時間Mon Oct 14 15:05:08 2013
板上的各位大大
想請教一個關於 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
1F:推 WolfLord:org 23H 10/14 16:25
2F:→ WolfLord:看漏了 XDD 上面那行作廢 XDD 你把RXD PULL HIGH4.7K看看 10/14 16:28
3F:→ WolfLord:另外你應該在中斷內清RI不是主迴圈,主迴圈jmp$就好了 10/14 16:30