遇到的问题
1.发送的字符个数与读取回来的字符个数有时候会不一样
例如发送78, 返回的有时候是7878 或787或7或8。
2.只发送一位数字的时候LED也是黑的
单片机程序如下
#include
#define uchar unsigned char
#define uint unsigned int
***it dula=P2^6;
***it wela=P2^7;
***it d1=P1^0;
uchar num;
uchar dat[20];
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void LED(uchar num) //LED显示接收到的数据
{
dula=1;
P0=table[num];
dula=0;
wela=1;
P0=0xfe;
wela=0;
}
void init(void)
{
TMOD=0x20;
PCON=0x80;
SCON=0x50;
TL1=0xFA;
TH1=0xFA;
TR1=1;
}
void rece(void)
{
uint i=0;
while(RI==0); //扫描判断是否接收到数据,
dat[i] = SBUF; //接收数据SBUF赋与dat
RI=0; //RI清零。
SBUF = dat[i]; //在原样把数据发送回去
while(ti==0);
TI=0;
i++;
num=dat[i-1];
}
void main()//主程序功能:实现接收数据并把接收到的数据原样发送回去///////
{
init();//串口初始化
while(1)
{
while(RI==0);
rece();
LED(num); //显示接收到的数据
}
}
1
|
|
|
|
应该是单片机的程序有点问题。
可以先一次性把接收的数据存在一个数组里。接受完毕再把这数组一次性发送到PC。
|
|
|
|
|
lingzhiquan 发表于 2012-7-28 12:44
应该是单片机的程序有点问题。
可以先一次性把接收的数据存在一个数组里。接受完毕再把这数组一次性发送到P ...
新手上路,请多指教
你是说把发送的字符串最后加个结束标志(回车之类的),for循环接受,全部接受完在for循环送回去??
我修改了下labview程序中发送字符跟接受字符之间的时间延迟,把10ms改成100ms,错误次数明显减少了,是什么原因呢?
|
|
|
|
|
学习学习,我也正在做单片机与PC通讯这块呢
|
|
|
|
|
头像被屏蔽
· 2013-6-18 21:55:41
|
|
|
|
|
可能是单片机传输数据速度慢,尝试其它传输方式比如RS-232
|
|
|
|
|