打印

801串口问题

[复制链接]
8006|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
supernan|  楼主 | 2021-6-16 23:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
发送数据:在中断里清零发送中断位,就会出现我发多个字节,在串口助手上只能收到最后一个字节。后来我改为在不用中断在程序里等待发送中断位TI变为1时清零中断位,就不会出现之前的情况,但是差不多超过六七个字节程序就会卡死没有数据,不清楚原因是什么。

使用特权

评论回复
沙发
supernan|  楼主 | 2021-6-16 23:29 | 只看该作者
接收到特定数据后会返回BB _ _ CC  但是用串口接收,刚开始几次就只能收到BB 00 CC  后来改为BB FF CC  又只能收到 BB EE CC,,。

使用特权

评论回复
板凳
llljh| | 2021-6-16 23:31 | 只看该作者
楼主程序可以公开吗?贴程序看下吧,这么说看不出什么原因

使用特权

评论回复
地板
houcs| | 2021-6-16 23:34 | 只看该作者
是的,看下程序吧

使用特权

评论回复
5
chenjunt| | 2021-6-16 23:36 | 只看该作者
估计是低级问题

使用特权

评论回复
6
supernan|  楼主 | 2021-6-16 23:38 | 只看该作者
#include"main.h"
unsigned int ceshi=0,shou=0,fa=0,ttt=0;

void delay_s(unsigned int d);
void fanhui (int wei);

void main()
{
//        unsigned int i,add_pint,add_pint1,refresh_count;//////j,k,l,p,
        unsigned int i,vcd=0;
        delay_s(2000);

        SM0=0;
        SM1=1;
        SM2=0;
        REN=1;
        PCON=0x00;            //电源波特率控制寄存器
        TMOD=0x20;            //定时器1模式2
        TCON=0x00;
        AUXR=0x00;           //辅助寄存器
        TH1=0xFD;
        TL1=0xFD;
        ET1=1;
        TR1=1;
        IP=0x10;          //中断优先级
        IPH=0x10;         //中断优先级
        TI=0;
        RI=0;




        mot=1;

//        for(i=0;i<126;i++)data_in_buf=0x30;

        while(1)
        {
                EA=1;
                ES=1;

                if ((data_in_buf[0]==0xee) && (data_in_buf[2]==0x03) && (data_in_buf[byte_count]==0xcc))
                {
                        if (data_in_buf[1]==(byte_count-2))
                        {
                                //这里可以忽略
                        }
                        else
                        {
                                r_succ(0xff);
                  }
                }
                else
                {
                        r_succ(0x06);
                }

        }
}




/********串口中断程序**********/

void serial() interrupt 4 using 1          //  串口中断子程序
{


        if(RI)
        {
                RI=0;
                if (SBUF==0xee)           //  
                {
                                byte_count=0;
                }        
                data_in_buf[byte_count]=SBUF;         //  
                ++byte_count;

                shou=SBUF;

                ceshi=ceshi+4;
         }
         else if(TI)
         {

                fa += 1;
         }
         else
         {
                ttt=ttt+1;
         }
}


void delay_s(unsigned int d)
{
        unsigned int i=0,j=0,c=100;
        for(i=0;i<d;i++)
                for(j=0;j<c;j++);
}



void r_succ(unsigned int d)       //  
{


          SBUF=0xbb;                  //  d
          while (TI==0);                          //  
          TI=0;                                                  //  注

          SBUF=d;                                          //  CMD 0x01,0x02,0x03,0x05,0x06
          while (TI==0);
          TI=0;

          SBUF=0xcc;                                  //  注
          while (TI==0);
          TI=0;
}

使用特权

评论回复
7
chuxh| | 2021-6-16 23:44 | 只看该作者
串口发送会乱?

使用特权

评论回复
8
supernan|  楼主 | 2021-6-16 23:47 | 只看该作者

是的,比如发CE 55 AA    会收到CA E5 之类的

使用特权

评论回复
9
juventus9554| | 2021-6-16 23:49 | 只看该作者
延时到差不多一秒以后 呢

使用特权

评论回复
10
supernan|  楼主 | 2021-6-16 23:51 | 只看该作者
正常

使用特权

评论回复
11
renyaq| | 2021-6-16 23:53 | 只看该作者
查看波特率是不是一致

使用特权

评论回复
12
xxrs| | 2021-6-16 23:55 | 只看该作者
串口中断的优先级是不是有其它中断打断,将串口优先级设置成最高级试试

使用特权

评论回复
13
chenho| | 2021-6-16 23:58 | 只看该作者
主频是多少?可以使用示波器看看串口的波形是否正确!

使用特权

评论回复
14
supernan|  楼主 | 2021-6-17 21:05 | 只看该作者
搞定了,呵呵,犯了低级错误……

使用特权

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

本版积分规则

730

主题

10412

帖子

6

粉丝