cainiao518 发表于 2021-1-15 10:52

STC1KH08通信时不断复位为哪般?

如题,串口通信2400波特率,只是控制LED灯珠亮灭,通信过程中就不断自动复位

ayb_ice 发表于 2021-1-15 11:00

是不是指针乱了

cainiao518 发表于 2021-1-15 16:41

ayb_ice 发表于 2021-1-15 11:00
是不是指针乱了

好像不是,去掉通信部分程序,不会复位
只接收不发送数据,不复位;
接收,且发送数据少于8个时,不复位;
接收,且发送数据大于8个时,复位;
void send_frame_data1(u8 cmd,u8 gy_gz,u8 led_stat) //发送一帧数据
{
    u8 i;

        if(cmd==3)
        {
                TX1_Buffer=dj_id>>8;
                TX1_Buffer=dj_id&0xff;
                TX1_Buffer= 3;
                TX1_Buffer= 4;
                TX1_Buffer=gy_gz;
                TX1_Buffer=dj_style;
                TX1_Buffer=0;
                TX1_Buffer=led_stat;
                jisuan_crc=Calculate_CRC(TX1_Buffer,8);        // 计算CRC16结果
                TX1_Buffer=(jisuan_crc)>>8;                   // 00 01 03 04 00 04 00 00 10 00
                TX1_Buffer= jisuan_crc&0xff;                  // 00 01 03 04 00 04 00 00 1f 10
          for(i=0;i<8;i++)
                {                                                                                //8不会
                  Uart_SendByte(TX1_Buffer);                //9开始出现复位
                }
        }
       
}

ayb_ice 发表于 2021-1-15 16:43

cainiao518 发表于 2021-1-15 16:41
好像不是,去掉通信部分程序,不会复位
只接收不发送数据,不复位;
接收,且发送数据少于8个时,不复位 ...

TX1_Buffer分配空间不够吧

cainiao518 发表于 2021-1-15 16:46

ayb_ice 发表于 2021-1-15 16:43
TX1_Buffer分配空间不够吧

有12字节空间,实际只用了10个

cainiao518 发表于 2021-1-15 16:52

void Uart_SendByte(uchar dat)
{
        ES=0;
        SBUF =        dat;
        while(TI==0);
        TI=0;
        ES=1;       
}

ayb_ice 发表于 2021-1-15 17:30

cainiao518 发表于 2021-1-15 16:52


不用关ES,
可能是接收的问题

cainiao518 发表于 2021-1-15 18:20

ayb_ice 发表于 2021-1-15 17:30
不用关ES,
可能是接收的问题

中断接收程序:

void Uart_Int(void) interrupt 4
{
//        static u8led_stat=0;
        if(1==RI)
    {
      RI = 0;
      RX1_Buffer = SBUF;
                RX1_Cnt++;
      if(RX1_Cnt >= UART1_BUF_LENGTH)
                {
                   RX1_Cnt = 0;            //防溢出
                }
       
                flag_rx_star=1;                //接收开始

                rx_tim_count=0;                //
               
    }

    if(1==TI)
    {
      TI = 0;
      B_TX1_Busy = 0;
    }
}

90houyidai 发表于 2021-1-15 22:17

LZ带的灯珠是多大功率的?3V3的电源来自哪里?STC的还不至于这么脆弱

zhxzhxzzhhxx 发表于 2021-1-16 00:38

把中断里 if(1==ti) 这部分去了

cainiao518 发表于 2021-1-16 08:40

90houyidai 发表于 2021-1-15 22:17
LZ带的灯珠是多大功率的?3V3的电源来自哪里?STC的还不至于这么脆弱

3.3V来自上面的那个芯片,LED也是由那个芯片驱动

cainiao518 发表于 2021-1-18 10:42

ayb_ice 发表于 2021-1-18 08:46
去掉这部分代码
    if(1==TI)
    {


void Uart_Int(void) interrupt 4 //串口中断
{

        if(1==RI)
    {
      RI = 0;
      RX1_Buffer = SBUF;
                RX1_Cnt++;
      if(RX1_Cnt >= UART1_BUF_LENGTH)
                {
                   RX1_Cnt = 0;            //防溢出
                }       
                flag_rx_star=1;                //接收开始
                rx_tim_count=0;                //               
    }

//    if(1==TI)
//    {
//      TI = 0;
//      B_TX1_Busy = 0;
//    }
}
void Uart_SendByte(uchar dat)//串口发送
{

        SBUF =        dat;
        while(TI==0);
        TI=0;

}

还是不行

ayb_ice 发表于 2021-1-18 11:09

cainiao518 发表于 2021-1-18 10:42
还是不行

说明你代码可能其它地方还有问题

ayb_ice 发表于 2021-1-18 11:38

cainiao518 发表于 2021-1-18 10:42
还是不行

这样改试下

bit bSendOk;




        if(1==TI)
        {
                TI = 0;
                bSendOk = 1;
        }
}


void Uart_SendByte(uchar dat)//串口发送
{

      SBUF =      dat;
      while(!bSendOk);
      bSendOk=0;

}

cainiao518 发表于 2021-1-18 15:38

ayb_ice 发表于 2021-1-18 11:38
这样改试下

bit bSendOk;


还是不行

ayb_ice 发表于 2021-1-18 15:53

cainiao518 发表于 2021-1-18 15:38
还是不行

狗有没有打开呢

cainiao518 发表于 2021-1-18 16:40

ayb_ice 发表于 2021-1-18 15:53
狗有没有打开呢

ayb_ice 发表于 2021-1-18 16:43

cainiao518 发表于 2021-1-18 16:40


上全部代码吧,最好上工程文件

cainiao518 发表于 2021-1-18 16:49

ayb_ice 发表于 2021-1-18 16:43
上全部代码吧,最好上工程文件

附件

ayb_ice 发表于 2021-1-18 17:11

cainiao518 发表于 2021-1-18 16:49
附件
应该是这个函数有问题
Calculate_CRC
先屏蔽这个函数再试
发送还是按我之前的做法搞
页: [1] 2
查看完整版本: STC1KH08通信时不断复位为哪般?