新手提问:两个单片机RS232通讯问题,谢谢各位学长啊!
解决时间 2021-01-30 12:43
- 提问者网友:沉默的哀伤
- 2021-01-29 11:56
小弟初学PROTUES,做了个两个单片机通讯的模拟,有些问题,请大帮帮忙,谢谢啊!
//发送程序,通过SBUF口发送 0x56
#include
main()
{
TMOD= 0x20;
SM0=0;
SM1=1;
REN=1;
PCON=0;
TH1 =0xFD;
TL1 =0xFD;
TR1=1;
SBUF=0x56;
}
//接受程序,P1口接受SBUF数据
#include
main()
{
TMOD= 0x20;
SM0=0;
SM1=1;
REN=1;
PCON=0;
TH1 =0xFD;
TL1 =0xFD;
TR1=1;
while(1)
{
P1=SBUF;while(!RI);RI=0;
}
}
问题1: 这个程序有没有什么错误啊?为什么接受单片机P1口的值一直在晃动。
问题2: 我看书上写发送还要加一条程序,就在SBUF赋值后面, P1=SBUF;while(!TI);TI=0;
但如果加上这条程序就无法显示了。
问题3:SBUF的数据加上,是不是就一直存在了?需要while(1)循环码?
问题4:如果做一个电脑与单片机通讯,应该如何改进呢?(就是将图中发送机换成串口通讯助手)
(饿。。才一级,没法传图,图其实很简单,就是两个单片机P3.0/RXD与P3.1/TXD相互连接,波特率为9600.晶振11.0592)
最佳答案
- 五星知识达人网友:枭雄戏美人
- 2021-01-29 12:51
1,
2,书上那样说使用在一次发送多个数据的情况,要确保上一个数据发送完成才发送下一个数据,你只发送一个一个数据可以不用这么做;
3,发送程序确实需要加上while(1);但原因不是你所的那样,是因为你不加while(1);程序可能从开始又执行起来,这也是导致问题1的可能原因;
4,程序上不需要太大改动,主要是硬件上面,需要加232电平转换电路,芯片是MAX232,连接串口DB9的时候用2.3.5脚,5脚是地,接单片机地;2.3脚是发送接收(具体顺序我忘了,你查一查吧),接单片机的发送接收(交叉连接);或者你看一看MAX232的芯片资料,上面有电路图,你就懂了
全部回答
- 1楼网友:撞了怀
- 2021-01-29 16:40
首先要分清是硬件问题还是软件的问题,两个单片机物理上相距多远,直接用TTL电平连接的两个串口,还是变成了RS232电平,哎,这类问题靠提问不好解决,看不见,最好在身边找一个懂一点的,高手都很忙,
单片机 P3.0/RXD与P3.1/TXD 直接 相连 的话
A机 RXD 连B机 TXD
A机 TXD 连B机 RXD
其他 都 差不多 吧
- 3楼网友:杯酒困英雄
- 2021-01-29 14:09
方法有二:【1】弄个有串口的单片机,例如c8051f300,还有一片max232。一头连接pc机,一头连接单片机。单片机的gpio连接x1和x2,例如p1.0 & p1.1,并设为中断引脚。每次接收到x1 或者x2信号改变,就往pc机发送一段字符。pc机就检查这个接受的字串,做相应的动作。这里涉及到mscomm32 或者 windows api的createfile函数;【2】max232直接连接x1 和x2,另一端连接pc机的cts 和rts。也用createfile函数,不用单片机。windows(pc机)直接检查cts 和rts,间接有效!ms-comm32也可以检查cts和rts。
我要举报
大家都在看
推荐资讯