打印
[STC单片机]

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

[复制链接]
1231|27
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
cainiao518|  楼主 | 2021-1-15 10:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如题,串口通信2400波特率,只是控制LED灯珠亮灭,通信过程中就不断自动复位

使用特权

评论回复
评论
cainiao518 2021-1-16 11:30 回复TA
@shuizhongyu521 :没打开看门狗 
shuizhongyu521 2021-1-16 11:03 回复TA
是不是有看门狗,超时了 

相关帖子

沙发
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[0]=dj_id>>8;
                TX1_Buffer[1]=dj_id&0xff;
                TX1_Buffer[2]= 3;
                TX1_Buffer[3]= 4;
                TX1_Buffer[4]=gy_gz;
                TX1_Buffer[5]=dj_style;
                TX1_Buffer[6]=0;
                TX1_Buffer[7]=led_stat;
                jisuan_crc=Calculate_CRC(TX1_Buffer,8);        // 计算CRC16结果
                TX1_Buffer[8]=(jisuan_crc)>>8;                   // 00 01 03 04 00 04 00 00 10 00
                TX1_Buffer[9]= jisuan_crc&0xff;                    // 00 01 03 04 00 04 00 00 1f 10
            for(i=0;i<8;i++)
                {                                                                                //8不会
                    Uart_SendByte(TX1_Buffer[i]);                //9开始出现复位
                }
        }
       
}

使用特权

评论回复
地板
ayb_ice| | 2021-1-15 16:43 | 只看该作者
cainiao518 发表于 2021-1-15 16:41
好像不是,去掉通信部分程序,不会复位
只接收不发送数据,不复位;
接收,且发送数据少于8个时,不复位 ...

TX1_Buffer分配空间不够吧

使用特权

评论回复
5
cainiao518|  楼主 | 2021-1-15 16:46 | 只看该作者
ayb_ice 发表于 2021-1-15 16:43
TX1_Buffer分配空间不够吧

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

使用特权

评论回复
6
cainiao518|  楼主 | 2021-1-15 16:52 | 只看该作者
void Uart_SendByte(uchar dat)
{
        ES=0;
        SBUF =        dat;
        while(TI==0);
        TI=0;
        ES=1;       
}

使用特权

评论回复
7
ayb_ice| | 2021-1-15 17:30 | 只看该作者

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

使用特权

评论回复
评论
cainiao518 2021-1-15 18:22 回复TA
不关ES 也一样复位 
8
cainiao518|  楼主 | 2021-1-15 18:20 | 只看该作者
ayb_ice 发表于 2021-1-15 17:30
不用关ES,
可能是接收的问题

中断接收程序:

void Uart_Int(void) interrupt 4
{
//        static u8  led_stat=0;
        if(1==RI)
    {
        RI = 0;
        RX1_Buffer[RX1_Cnt] = 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;
    }
}

使用特权

评论回复
9
90houyidai| | 2021-1-15 22:17 | 只看该作者
LZ带的灯珠是多大功率的?3V3的电源来自哪里?STC的还不至于这么脆弱

使用特权

评论回复
10
zhxzhxzzhhxx| | 2021-1-16 00:38 | 只看该作者
把中断里 if(1==ti) 这部分去了

使用特权

评论回复
11
cainiao518|  楼主 | 2021-1-16 08:40 | 只看该作者
90houyidai 发表于 2021-1-15 22:17
LZ带的灯珠是多大功率的?3V3的电源来自哪里?STC的还不至于这么脆弱

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

使用特权

评论回复
12
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[RX1_Cnt] = 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;

}


还是不行

使用特权

评论回复
13
ayb_ice| | 2021-1-18 11:09 | 只看该作者

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

使用特权

评论回复
14
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;

}

使用特权

评论回复
15
cainiao518|  楼主 | 2021-1-18 15:38 | 只看该作者
ayb_ice 发表于 2021-1-18 11:38
这样改试下

bit bSendOk;

还是不行

使用特权

评论回复
16
ayb_ice| | 2021-1-18 15:53 | 只看该作者

狗有没有打开呢

使用特权

评论回复
17
cainiao518|  楼主 | 2021-1-18 16:40 | 只看该作者
ayb_ice 发表于 2021-1-18 15:53
狗有没有打开呢

使用特权

评论回复
18
ayb_ice| | 2021-1-18 16:43 | 只看该作者

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

使用特权

评论回复
19
cainiao518|  楼主 | 2021-1-18 16:49 | 只看该作者
ayb_ice 发表于 2021-1-18 16:43
上全部代码吧,最好上工程文件

附件

灯程序210118.rar

88.53 KB

使用特权

评论回复
20
ayb_ice| | 2021-1-18 17:11 | 只看该作者

应该是这个函数有问题
Calculate_CRC
先屏蔽这个函数再试
发送还是按我之前的做法搞

使用特权

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

本版积分规则

133

主题

1356

帖子

4

粉丝