打印
[51单片机]

求助51串口收发字符串遇到问题

[复制链接]
1657|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
liaojw94|  楼主 | 2013-7-24 12:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
程序的目的是接收一个10位以下的字符串,存储在数组中然后发回上位机。第一位为长度。EG:PCsend:5asdfg。51MPUsend:asdfg。
以下程序能实现1次接收和回复上位机,但是第二次接收的时候就没有返回了。真的想不出是哪里问题,请大神帮看看。
#include<reg52.h>
#include<stdio.h>
#include<string.h>
#define uchar unsigned char
#define uint unsigned int
uint count=0,read_flag=0,string_len=0;
uchar inbuf[20]={0};
sbit led=P0^1;
char a,c[30];
void init()      //中断初始化
{
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
// REN=1;
SM0=0;
SM1=1;
REN=1;
EA=1;
ES=1;
}
void send_char(uchar a)    //发送一个字符
{
TI=0;
SBUF=a;
while(!TI);
TI=0;
}
void send_string( uchar *str, uint strlen)  //发送字符串
{
unsigned int k= 1 ;
do
        {
        send_char(*(str + k));
        k++;
        } while (k <=strlen);  
}

void main()
{
init();
ES=0;
TI=1;
printf("I am the best!>.<\n");
while(!TI);
TI=0;
ES=1;
led=1;
while(1)
{
  if(read_flag==1)
  {
   ES=0;
   send_string(inbuf,inbuf[0]-'0');
   inbuf[0]='0';
   read_flag=0;
   ES=1;
  }
}
}
void serial () interrupt 4
{  
    unsigned char ch;
if(RI==1)
    {
        RI = 0 ;
        ch=SBUF;
        if (ch==0xff )
         {
                count= 0 ;
            }
        else
            {

                inbuf[count]=ch;
               
                if (count==(inbuf[0]-'0'))
                 {
                        read_flag= 1 ;  //如果串口接收的数据达到string_len个,
                        count=0;
                                //就置位取数标志
                    }
     count++;
             }
}
}

相关帖子

沙发
joyme| | 2013-7-24 16:47 | 只看该作者
程序错误,很简单的,置位取数标志之后要退出中断函数,否则下次进来count = 1了,之后就别想它能按你设计的运行了

使用特权

评论回复
板凳
南宫云明| | 2013-7-24 17:20 | 只看该作者
楼上正解

if (count==(inbuf[0]-'0'))
{
  read_flag= 1 ;  //如果串口接收的数据达到string_len个,
  count=0;  //就置位取数标志
  return;
}

试试看

使用特权

评论回复
地板
ayb_ice| | 2013-7-24 17:28 | 只看该作者
                                read_flag= 1 ;  //如果串口接收的数据达到string_len个,
                                count=0;
                                //就置位取数标志
                        }
                        count++;

分析: count=0;已经等于0了,后面还在count++;,事实count不可能等于零了

另外逻辑混乱,

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

1

帖子

0

粉丝