下位机与上位机通信问题

zhangtete 2009-09-13 05:06:02
问题:用232串口通信,下位机连续发生,上位机现在用串口助手调试,下面发上来的数据不是写的数据,为什么?将下位机程序贴一下。
#include <sst89.h>
#include <stdio.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define WorkTimes 3

uint dianya[3] = {700,200,100},dianliu[3] = {1200,1500,1000};
uchar fangshi[3] ={1,2,1};
uchar dinshi[3] = {11,24,13};
uchar dinfen[3] = {20,30,10};
uchar xunhuan[3] = {0,0,1};
uchar recei_flag = 0;
uchar rec[24] = {0};



void init_ps(void)
{
TMOD =0X20;
TH1 = 0Xfd;
TL1 = 0xfd;
PCON = 0;
TR1 = 1;
ES=1;
TI=1;
EA=1;
SCON = 0X50;
}


void send_char_com( unsigned char ch)
{
SBUF=ch;
while (TI== 0 );
TI= 0 ;
}

void send_section1(uchar m)//发送最开始的设置值
{ uchar i,dianyaH=0,dianyaL=0,dianliuH=0,dianliuL=0;
send_char_com(m);
for(i = 0;i < m;i++)
{ dianyaH = dianya[i]/100;
dianyaL = dianya[i]%100;
dianliuH = dianliu[i]/100;
dianliuL = dianliu[i]%100;
send_char_com(i+1);
send_char_com(dianyaH);
send_char_com(dianyaL);
send_char_com(dianliuH);
send_char_com(dianliuL);
send_char_com(fangshi[i]);
send_char_com(dinshi[i]);
send_char_com(dinfen[i]);
send_char_com(xunhuan[i]);
}
}


void receive_data(void)
{ uchar i=0;
if(RI)
{ RI=0;
if(recei_flag == 0)
{
recei_flag = SBUF;
}
else if(recei_flag == 1)
{
for(i=0;i<24;i++)
{
rec[i] = SBUF;
}
}
}
}


void main(void)
{ init_ps();

while(1)
{ send_char_com(0x16) ;
// send_section1(WorkTimes);
// receive_data();
}

}
接收的数据8个字符一组,有时后4个字符接收是对的,有时却是其他的
...全文
273 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhangtete 2009-09-16
  • 打赏
  • 举报
回复
如果是PC机的问题的话,为什么我在两个电脑之间通信又是可以的呢
zhangtete 2009-09-16
  • 打赏
  • 举报
回复
我试了AccessPort也是一样的。我用的是sst的单片机作为下位机,下位机程序已经贴出来了,很简单的只是一个联系发送的功能,发送的是0X16 接收的时候有时候是对的有的时候却是0X91,不知道为什么
dronly 2009-09-15
  • 打赏
  • 举报
回复
如果你的串口用的是USB转串口,然后下位机用的是单片机或者板子模拟的串口的话,出现这个情况的机会是很高的,因为同是9600,可能两个地方的串口有微妙的区别的。

建议先用两台台式机,用主板带的那个串口比较稳定。
barech 2009-09-15
  • 打赏
  • 举报
回复
我也遇到过接收数据错误的情况

一种可能是PC机存在问题,还有一种可能是串口助手不稳定

建议楼主换AccessPort用一下,对比用串口助手与AccessPort发送相同的数据,你的上位机接收的是否相同,如果相同并且都是乱码那就可能是硬件的问题了
zhipin_guo 2009-09-15
  • 打赏
  • 举报
回复
232串口通信只会是波特率或者硬件线路,波特率问题的可能性比较大。
奉海 2009-09-15
  • 打赏
  • 举报
回复
肯定不能一个字节一个字节的发啦,缓存一会再发
schlafenhamster 2009-09-15
  • 打赏
  • 举报
回复
9600时约1ms一个字符,你放的太快。
zhangtete 2009-09-14
  • 打赏
  • 举报
回复
求解啊,有没有人回答啊
zhangtete 2009-09-14
  • 打赏
  • 举报
回复
波特率单片机上设置的是9600啊,串口调试助手上也是设置的9600呢。而且我只是连续发送的0x16这个字符,接收的时候每打开一次串口助手接收的结果都是不一样的
kondykuang 2009-09-13
  • 打赏
  • 举报
回复
波特率问题,你先试试 发单个字符 有没问题???

15,978

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧