[STM32F1] 从电脑发送一个数据

[复制链接]
766|18
 楼主| morrisk 发表于 2021-1-19 23:40 | 显示全部楼层 |阅读模式
现象:从电脑发送一个数据,单片机就不停的发送数据到电脑上...
本来想从电脑接收一个字节,然后再由单片机发送到电脑的

500大于255有什么关系?延时是没问题的

#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;
}
xxrs 发表于 2021-1-19 23:42 | 显示全部楼层
在你的中断里,判断if(RI)改为        if(!RI)。。
yinxiangh 发表于 2021-1-19 23:44 | 显示全部楼层
只有在RI=1,才发生中断
renyaq 发表于 2021-1-19 23:47 | 显示全部楼层
感觉波特率不对,51好久没用了。
songqian17 发表于 2021-1-19 23:50 | 显示全部楼层
51的串口例子很多的。
dingy 发表于 2021-1-19 23:52 | 显示全部楼层
串口波特率和晶振有关...
supernan 发表于 2021-1-19 23:54 | 显示全部楼层

不是void delay_nms(uint x)么?
unsigned int应该是允许500的。
houcs 发表于 2021-1-19 23:57 | 显示全部楼层
再发下接收程序,去掉一行while(!RI)Key_ScanStop();
uchar Uart_RcvData(void)
{
        uchar Rcv=0;
        Rcv = SBUF;
        RI = 0;        
        return Rcv;
}
pangb 发表于 2021-2-1 22:17 | 显示全部楼层
仔细看代码,肯定代码不仔细
zyf部长 发表于 2021-2-1 22:20 | 显示全部楼层
这个就是用电脑发数据的触发下单片机的数据发送功能的吧。
dingy 发表于 2021-2-1 22:24 | 显示全部楼层
你的发送程序不要那么一直发啊
supernan 发表于 2021-2-1 22:26 | 显示全部楼层
弄个判断
pangb 发表于 2021-2-1 22:29 | 显示全部楼层
或者标志位。
 楼主| morrisk 发表于 2021-2-1 22:30 | 显示全部楼层
哦,那我就知道怎么回事了,多谢大家
zljiu 发表于 2021-2-5 20:15 | 显示全部楼层
数据类型的问题啊
coshi 发表于 2021-2-5 20:16 | 显示全部楼层
既然是实时发送  就不涉及到大数组的问题了啊
aoyi 发表于 2021-2-5 20:20 | 显示全部楼层
延时时间是不是有点短啊
drer 发表于 2021-2-5 20:28 | 显示全部楼层
中断里边没有必要判断标志位吧
gwsan 发表于 2021-2-5 20:31 | 显示全部楼层
波特率对不对 用示波器卡一下就行
您需要登录后才可以回帖 登录 | 注册

本版积分规则

701

主题

6879

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部