[STC单片机] STC1KH08通信时不断复位为哪般?

[复制链接]
1726|27
 楼主| cainiao518 发表于 2021-1-15 10:52 | 显示全部楼层 |阅读模式
如题,串口通信2400波特率,只是控制LED灯珠亮灭,通信过程中就不断自动复位

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×

评论

@shuizhongyu521 :没打开看门狗  发表于 2021-1-16 11:30
是不是有看门狗,超时了  发表于 2021-1-16 11:03
ayb_ice 发表于 2021-1-15 11:00 | 显示全部楼层
是不是指针乱了
 楼主| cainiao518 发表于 2021-1-15 16:41 | 显示全部楼层
ayb_ice 发表于 2021-1-15 11:00
是不是指针乱了

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

  4.         if(cmd==3)
  5.         {
  6.                 TX1_Buffer[0]=dj_id>>8;
  7.                 TX1_Buffer[1]=dj_id&0xff;
  8.                 TX1_Buffer[2]= 3;
  9.                 TX1_Buffer[3]= 4;
  10.                 TX1_Buffer[4]=gy_gz;
  11.                 TX1_Buffer[5]=dj_style;
  12.                 TX1_Buffer[6]=0;
  13.                 TX1_Buffer[7]=led_stat;
  14.                 jisuan_crc=Calculate_CRC(TX1_Buffer,8);        // 计算CRC16结果
  15.                 TX1_Buffer[8]=(jisuan_crc)>>8;                   // 00 01 03 04 00 04 00 00 10 00
  16.                 TX1_Buffer[9]= jisuan_crc&0xff;                    // 00 01 03 04 00 04 00 00 1f 10
  17.             for(i=0;i<8;i++)
  18.                 {                                                                                //8不会
  19.                     Uart_SendByte(TX1_Buffer[i]);                //9开始出现复位
  20.                 }
  21.         }
  22.        
  23. }
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 | 显示全部楼层
  1. void Uart_SendByte(uchar dat)
  2. {
  3.         ES=0;
  4.         SBUF =        dat;
  5.         while(TI==0);
  6.         TI=0;
  7.         ES=1;       
  8. }
ayb_ice 发表于 2021-1-15 17:30 | 显示全部楼层

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

评论

不关ES 也一样复位  发表于 2021-1-15 18:22
 楼主| cainiao518 发表于 2021-1-15 18:20 | 显示全部楼层
ayb_ice 发表于 2021-1-15 17:30
不用关ES,
可能是接收的问题

中断接收程序:

  1. void Uart_Int(void) interrupt 4
  2. {
  3. //        static u8  led_stat=0;
  4.         if(1==RI)
  5.     {
  6.         RI = 0;
  7.         RX1_Buffer[RX1_Cnt] = SBUF;
  8.                 RX1_Cnt++;
  9.         if(RX1_Cnt >= UART1_BUF_LENGTH)
  10.                 {
  11.                    RX1_Cnt = 0;            //防溢出
  12.                 }
  13.        
  14.                 flag_rx_star=1;                //接收开始

  15.                   rx_tim_count=0;                //
  16.                
  17.     }

  18.     if(1==TI)
  19.     {
  20.         TI = 0;
  21.         B_TX1_Busy = 0;
  22.     }
  23. }
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)
    {
  1. void Uart_Int(void) interrupt 4 //串口中断
  2. {

  3.         if(1==RI)
  4.     {
  5.         RI = 0;
  6.         RX1_Buffer[RX1_Cnt] = SBUF;
  7.                 RX1_Cnt++;
  8.         if(RX1_Cnt >= UART1_BUF_LENGTH)
  9.                 {
  10.                    RX1_Cnt = 0;            //防溢出
  11.                 }       
  12.                 flag_rx_star=1;                //接收开始
  13.                   rx_tim_count=0;                //               
  14.     }

  15. //    if(1==TI)
  16. //    {
  17. //        TI = 0;
  18. //        B_TX1_Busy = 0;
  19. //    }
  20. }
  21. void Uart_SendByte(uchar dat)//串口发送
  22. {

  23.         SBUF =        dat;
  24.         while(TI==0);
  25.         TI=0;

  26. }


还是不行
ayb_ice 发表于 2021-1-18 11:09 | 显示全部楼层

说明你代码可能其它地方还有问题
ayb_ice 发表于 2021-1-18 11:38 | 显示全部楼层

这样改试下

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 16:40 | 显示全部楼层
ayb_ice 发表于 2021-1-18 15:53
狗有没有打开呢

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
ayb_ice 发表于 2021-1-18 16:43 | 显示全部楼层

上全部代码吧,最好上工程文件
 楼主| cainiao518 发表于 2021-1-18 16:49 | 显示全部楼层
ayb_ice 发表于 2021-1-18 16:43
上全部代码吧,最好上工程文件

附件

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
ayb_ice 发表于 2021-1-18 17:11 | 显示全部楼层

应该是这个函数有问题
Calculate_CRC
先屏蔽这个函数再试
发送还是按我之前的做法搞
您需要登录后才可以回帖 登录 | 注册

本版积分规则

135

主题

1431

帖子

4

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