51单片机通信问题,串口调试助手能接受单片机发送的数据,但是单片机却不能接受串口调试助手发送的数据。

采用的是查询法,用汇编写得程序,串口调试助手控制发送给P1(LED灯)不知道哪里不对?大侠帮帮忙
一个很简单的用串口调试助手控制LED小灯(P1口),查询法,程序如下,但是弄不出来,帮忙程序看看哪里错了
ORG 0000H
SJMP START
ORG 0030H
START:MOV SP,#60H ;给堆栈指针赋值
MOV P1,#0FBH ;给p1附初值
MOV TMOD.#20H ;设置定时器1工作方式2
MOV TL1,#0FDH
MOV TH1,#0FDH ;给定时器赋值,波特率为9600
SETB TR1 ; ;启动定时器
MOV SCON,#50H ;设置串口工作方式1
MOV PCON,#00H ;波特率不加倍
SETB RI
MAIN:JBC RI,RCV ;若TI为1,则转到RCV,否则跳转MAIN
SJMP MAIN
RCV:MOV A,SBUF ;将接受到的数据读到累加器中
MOV P1,A ;将累加器中的数据送到P1口显示
CALL DELAY ;延时
SJMP MAIN ; 跳转主程序
DELAY:MOV R1,#255
D1:MOV R2,#200
DJNZ R2,$
DJNZ R1,D1
RET
END

第1个回答  2012-10-16
不需要延时的。下面的程序可以正常接收。

ORG 0000H
SJMP START
ORG 0030H
START:
MOV P1, #0FBH ;给p1附初值
MOV SCON, #50H ;设置串口工作方式1
MOV PCON, #00H ;波特率不加倍
MOV TMOD, #20H ;设置定时器1工作方式2
MOV TL1, #0FDH
MOV TH1, #0FDH ;给定时器赋值,波特率为9600
SETB TR1 ;启动定时器
MAIN:
JBC RI, RCV ;若RI为1,则转到RCV,否则跳转MAIN
SJMP MAIN
RCV:
MOV A, SBUF ;将接受到的数据读到累加器中
MOV P1, A ;将累加器中的数据送到P1口显示
SJMP MAIN ;跳转主程序
END追问

我没看出来你这个程序跟我的有什么区别?

追答

你试试看吧。
本程序可以正常接收,这是经过试验的。

追问

把你写的这段程序下载进去,也不行啊

追答

那就检查通信线路、对方的设置,等等。
这个程序,可以接收,这是试验过的。

追问

按你的程序如果P1接LED灯,能否清楚看到灯的状态?如果程序对的,那怎么检查我的硬件电路?总觉得我硬件电路是没问题的,因为我能用串口调试助手接受P1口的数据。谢谢!

第2个回答  2012-10-16
改后的程序如下:
RCV:MOV A,SBUF ;将接受到的数据读到累加器中
CLR RI
MOV P1,A ;将累加器中的数据送到P1口显示
每次接收完一个串口数据后,需要软件将RI清零。追问

jbc 有清零的意思

本回答被网友采纳
第3个回答  2012-10-16
DELAY 延时短一点, 其他没看出有问题
相似回答