作者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