打印

关与单片机串行通信,问个奇怪的问题

[复制链接]
1601|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
小之海|  楼主 | 2007-3-25 21:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
一个很奇怪的问题,我把下边的程序烧进单片机后第一次运行成功,在发送区输入4个字符,接收区收到4个字符,.可后来再次运行的时候就有问题了,上位机上接收不到字符了,我重新烧了程序可还是不行,请问这是为什么阿,谢谢!
#include <reg51.h>
#include <string.h>
#include <stdio.h>
#define INBUF_LEN 4
unsigned char inbuf1[INBUF_LEN];
unsigned char count3=0;
bit read_flag=0;
void send_char_com(unsigned char ch)//向串口发送一个字符
{
  SBUF=ch;
  while(TI==0);
  TI=0;
}

void send_string_com(unsigned char *str, unsigned int strlen)//向串口发送一个字符串,strlen为该字符串长度 
{
  unsigned int k=0;
  do 
   { 
    send_char_com(*(str+k));
    k++;
   } while(k<strlen);
}


void main(void)
{
SCON=0X50;
TMOD=0X20;
TH1=0XE8;
TL1=0XE8;
IE=0X90;

TR1=1;


   while(1)
   {
     
     if(read_flag)
     {
       read_flag=0;
       send_string_com(inbuf1,INBUF_LEN);
          // TI=0;
     } 
   }

}
//串口接收中断函数
void serial () interrupt 4 using 3
{
   if(RI)
     {
      unsigned char ch;
    RI=0;
    ch=SBUF;
    inbuf1[count3]=ch;
        count3++;
    if((count3==(INBUF_LEN-1)))
    {  
       read_flag=1;
     }
   }
}

相关帖子

沙发
khsb| | 2007-3-26 11:42 | 只看该作者

count3要清零

第一次收到数据时,count3从0-3,
没有count3=0;第二次收数据时inbuf1[count3]就溢出了

使用特权

评论回复
板凳
小之海|  楼主 | 2007-3-26 18:54 | 只看该作者

谢谢,count3清零后可以了

谢谢,count3清零后可以了

使用特权

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

本版积分规则

4

主题

8

帖子

0

粉丝