查看: 306|回复: 7
打印 上一主题 下一主题

我遇到了一个上下位机之间通信程序的问题,十分令我头痛,请教各位大侠!

[复制链接] qrcode

8

主题

29

帖子

70

积分

注册会员

Rank: 2

积分
70
楼主
跳转到指定楼层
发表于 2015-12-2 04:48 AM | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
test.c 程序功能为从键盘收到字符从串行口1发送出去,从串行口接受的字符在屏幕上显示。(上位机程序,TURBO C编写)
#include
#include
#define PROTOCAL 0xe3
#define PROT 0
#define TX 1
#define RX 2
#define STATUS 3
int port= 0 ;
main()
{ int s;
unsigned char c;
bioscom(PROT, PROTOCAL, port);
clrscr();
puts("-------------");
puts("test.ext PC RS232 COM1 <9,600 N 8 1>");
puts("-------------");

while(1)
{ s= bioscom (STATUS,0,port)&0x100;
if(s)
{ c= bioscom (RX, 0,port);
printf("%c",c); }
if(kbhit())
{ c= getch ();
switch(c)
{case ' ':
clrscr();
puts("-------------");
puts("test.ext PC RS232 COM1 <9,600 N 8 1>");
puts("-------------");
break;
case 27:
exit(0);
break;
default:
printf("%c",c);
bioscom(TX, c, port);
break;
}
}
}
}

test_send.c 程序功能为每发送一串“HELLO”延时一段时间后重复发送,上位机可以在屏幕上显示。(下位机程序,C51编写)
#include
#define BYTE unsigned char
#define WORD unsigned int
BYTE idata txdata[7]={"HELLO\n"};
void main()
{ BYTE i;
WORD j;
TMOD= 0x20 ;
TL1=0xfd; TH1=0xfd;
SCON= 0xd8 ; PCON= 0x00 ;
TR1=1;
while(1)
{ i= 0 ;

while(txdata[i]!=0x00) {
SBUF= txdata [i];
while(TI= =0);
TI= 0 ;
i++;
}
for(j=0;j<10000;j++);
}
}

test_tr.c 程序功能为收到字节后即刻发送出去,微机输入的字符回显在屏幕上。(下位机程序,C51编写)
#include
void main(void)
{ unsigned char a;
TMOD= 0x20 ;
TL1=0xfd; TH1=0xfd;
SCON= 0xd8 ; PCON= 0x00 ;
TR1=1;
while(1)
{
while(RI= =0);
a= SBUF ;
RI= 0 ;
SBUF= a ;
while(TI= =0);
TI= 0 ;
}
}

问题描述:
test_send.c 程序功能为每发送一串“HELLO”延时一段时间后重复发送,上位机可以在屏幕上显示,这个功能我已经实现了。但是test_tr.c 程序功能即下位机收到字节后即刻发送出去,微机输入的字符回显在屏幕上。比如键盘输入“A”,屏幕上应显示“AA”。这个功能没有能实现,不知道test_tr.c 程序哪里出现问题了。我调了好久也没搞定,请教各位了!!!补充:我下位机用的是edn51的板子。
回复

使用道具 举报

8

主题

29

帖子

70

积分

注册会员

Rank: 2

积分
70
沙发
 楼主| 发表于 2015-12-2 07:11 AM | 只看该作者
#include
void main(void)
{ unsigned char a;
TMOD="0x20";
TL1=0xfd; TH1=0xfd;
SCON="0xd8";PCON=0x00;
TR1=1;
while(1)
{
while(RI==0);
a="SBUF";
RI="0";
SBUF="a";
while(TI==0);
TI="0";
}
}

红色代码问题吧,双引号表示字符串,赋值肯定不对。但是你说发送Hello的那段程序运行正常,但是你那段程序也是这个问题。你最好在验证一下,发送Hello的那段程序确实运行正常。
回复 支持 反对

使用道具 举报

20

主题

233

帖子

490

积分

中级会员

Rank: 3Rank: 3

积分
490
板凳
发表于 2015-12-3 08:30 AM | 只看该作者
我又把程序的那些不应加双引号的地方删了,请二楼的老大在指点下啊!!!                                                                                                                                                                       
回复 支持 反对

使用道具 举报

4

主题

18

帖子

42

积分

新手上路

Rank: 1

积分
42
地板
发表于 2015-12-3 09:37 AM | 只看该作者
你调试一下,看程序能不能走道a= SBUF ;,并切收到的数据对部队就清楚拉                                                                                                                                                                       
回复 支持 反对

使用道具 举报

8

主题

209

帖子

430

积分

中级会员

Rank: 3Rank: 3

积分
430
5#
发表于 2015-12-22 11:37 AM | 只看该作者
很奇怪,程序总觉得没问题,但我也调试不出自发自收,郁闷                                                                                                                                                                       
回复 支持 反对

使用道具 举报

8

主题

29

帖子

70

积分

注册会员

Rank: 2

积分
70
6#
 楼主| 发表于 2015-12-22 12:29 PM | 只看该作者
我是新手,请问二楼的老大,你说"看程序能不能走道 a= SBUF ",是用什么软件来调试?谢谢!                                                                                                                                                                       
回复 支持 反对

使用道具 举报

4

主题

18

帖子

42

积分

新手上路

Rank: 1

积分
42
7#
发表于 2015-12-22 01:53 PM | 只看该作者
感觉是延时问题

在接受数据和发送数据之间加个延时吧

调试时候可以分开调试啊, 先测试接收数据(SBUF积存器)是否正确,再调试发送数据是否OK

回复 支持 反对

使用道具 举报

8

主题

209

帖子

430

积分

中级会员

Rank: 3Rank: 3

积分
430
8#
发表于 2015-12-22 02:52 PM | 只看该作者
一是看看硬件;

二是看看软件的通信部分;

其次就看看你的波特率。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表