不停的发送数据

2019-07-20 16:42发布


现象:从电脑发送一个数据,单片机就不停的发送数据到电脑上...

#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint  unsigned int

//;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
/*
延时X 毫秒函数
*/
void delay_nms(uint x)
{
uchar i;
uint j;
for(j=0;j<x;j++)
{
   for(i=200;i>0;i--);
}
}

void send_byte_to_pc(uchar dat)
{
//ES=0;
SBUF=dat;
while(!TI);
TI=0;
//ES=1;

}
void init_uart(void)
{
// EA=1;
TMOD=0X20;
TH1=252;TL1=252;//9600//波特率和晶振有关
TR1=1;
ET1=0;
SCON=0X50;
//ES=1;
}
/*******************************************************************/
uchar rece_data_chuli(void)//接收数据处理
{
uchar i=0;
while(!RI);
RI=0;
i=SBUF;
TI=0;
SBUF=i;
while(!TI);
TI=0;
delay_nms(1);
return 0;
}
//;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
void main(void)
{
init_uart();         //UART 初始化
delay_nms(500);
while(1)
{
   
   rece_data_chuli();
  delay_nus(2);
}
}
/*******************************************************************/
void  int_uart(void) interrupt 4
{
uchar sbuf_value;
ES=0;
if(RI)
   {
   RI=0;
     sbuf_value=SBUF;
   rece_data_buff[in_data_cnt]=sbuf_value;//保存一字节数据
     in_data_cnt++;//接收数据个数计数
   if(in_data_cnt==1)//共接收一个数据
    {
     in_data_cnt=0;
     flag_receive=1;
    }

  }
ES=1;
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
19条回答
午夜粪车
1楼-- · 2019-07-22 08:40
 精彩回答 2  元偷偷看……
午夜粪车
2楼-- · 2019-07-22 12:21
 精彩回答 2  元偷偷看……
dengdc
3楼-- · 2019-07-22 12:45
楼主这个程序写的不是很好的啊,,不过是可以运行的
heweibig
4楼-- · 2019-07-22 15:43
试试这个接收一个字节,发送一个字节的程序



#include <reg52.h>
unsigned char    sbuf_value;
bit      flag_receive;
bit      flag_send;

void init_uart(void)
{   EA=1;
    TMOD=0X20;
    TH1=252;TL1=252;
    TR1=1;
    SCON=0X50;
    ES=1;
    flag_receive=0;
    flag_send=0;   
}

void main(void)
{   init_uart();
    while(1)
    {
        if ( (flag_receive==1 )  &&  ( flag_send==0) );
        {  SBUF = sbuf_value;
            flag_receive = 0;
            flag_send =1;
        }
    }
}

void  int_uart(void) interrupt 4
{  if(RI)
    {   sbuf_value=SBUF;
        flag_receive=1;
        RI=0;
    }
    else
    {  TI=0;
        flag_send=0;
    }
}
wuhany
5楼-- · 2019-07-22 19:09
哪里这么麻烦?

主程序除了初始化只要
while(1);

中断只要
void int_uart(void) interrupt 4
{
   if(RI)
   {
     RI=0;
     SBUF=SBUF;
   }
   if(TI)
   {
     TI=0;
   }
}
wyjie
6楼-- · 2019-07-22 20:05
 精彩回答 2  元偷偷看……

一周热门 更多>