单片机与电脑串口通信问题:单片机会不停的发送给电脑

来源:百度知道 编辑:UC知道 时间:2024/05/14 12:55:19
我是初学单片机的.在学到串口通信时遇到以下一个问题
单片机用C51的.电脑软件用<串口调试助手V2.2>
单片机写下:
MOV TMOD,#20H
MOV TL1,#0F4H
MOV TH1,#0F4H
MOV PCON,#00H
STEB TR1
MOV SCON,#50H
MOV SBUF,#0AAH

电脑设的波特率与单片机的一样.
之后电脑一直不停的接收”AA”(显示接收窗口也显示”AA”不停的显示)
1.为什么单片机会不停的发给电脑”AA”?
2.我哪里写错的程序?

我的理解是:”AA”只发一次给电脑.
3.程序怎么写才只发一次”AA”给电脑

这是你的全部程序吗?
如果是这样,程序执行过程是这样的:首先程序执行完这一段后,会发数据出来.然后程序一直执行,但后面没有程序,也就是程序空间全是FF,执行的指令是MOV R7, A.因为这条指令不会让程序跳转,所以程序一直执行到程序存储器结尾(如89C51为0FFFH,89C52为1FFFFH等),由于后面没有实际的程序空间,之后PC指针会映射在有实际空间的部分,也就又从头开始执行。这样,程序周而复始,就会不断发送数据。

希望对你有所帮助!

主要原因是,发送完后会有TI变高..
如果你不将它清0的话,会再次执行串口中断程序...
因为串口中断是在,RI或TI变高时产生的...
还有就是,你的程序不会就这么一点吧...
如果就是这几句话...具体还真的不好说..
这样写看看应该能行...
其实一般都用中断来写的..
ORG 0000
MOV TMOD,#20H
MOV TL1,#0F4H
MOV TH1,#0F4H
MOV PCON,#00H
SETB TR1
LCALL UART
AJMP $
URART:
MOV SCON,#50H
MOV SBUF,#0AAH
RET
END

估计是你的程序里面有返回的语句如“RET、RETI”“JMP、LJMP”等语句,而且是返回到了这个串口调用程序的开始甚至之前了,所以,每次程序返回后都会在执行一次发“AA”的程序

你的程序的怎么没有定头与尾,还是把程序写详细点,我们才好给你看看,现在,就这几句话,是没有问题的.

死循环了,一直在执行:
MOV SBUF,#0AAH