• STC12LE5A60S2第二串口出现的奇葩问题


    今天在调试的过程中,发现了个奇葩的问题,我按照datasheet上面的程序测试Uart2,但是只能发送一个字节,当通过uart和uart2交叉发送数据时,可以一直发送,但是当我禁掉uart只用Uart2发送时,却出现了问题:不能连续发送。。我纳闷了,这到底是怎么回事,后来才发现原来是TI=1时,影响了Uart2的发送,必须申明的是,Uart的S2TI是通过串口中断的方式清零的,如果是程序等待S2TI==0后直接发送不会出现该问题。具体程序如下:

    bit busy;

    void main(){

       S2CON=0x50; //8位Uart 无奇偶校验
        BRT=-(FOSC/32/BAUD2);
        AUXR=0x14;
        IE2=0x01; //Enable Uart2 Interrupt   
                       
           EA = 1;                  //打开总中断  

        TI=1; 

       while(1)   //在网络正常后跳出循环
       {

          send_uart2('O');
          send_uart2('K');

          send_uart2('K');
        }

    }

    void serial2 () interrupt 8 using 1
    {
        if (S2CON&S2RI)
        { 
            S2CON &= ~S2RI ;   //清除接收结束标志位
        }


     if(S2CON&S2TI)//S2TI变为1时清除标志位1
     {
      S2CON &= ~S2TI;
      busy=0;
     }
    }

    void send_uart2( unsigned char ch)
             { 
              
                  while(busy); 
           busy=1;
           S2BUF=ch;   
              }

    如上所示,如果TI=1的话,就不能连续发送了,此时TI必须为0(不知道是什么原因)

    当然也可以这样写

    void send_uart2( unsigned char ch)
             { 
              
           S2BUF=ch;
                while(!(S2CON&S2TI)); 
           S2CON &= ~S2TI;
         
              }

    这样的话TI等不等于1就无关紧要了

  • 相关阅读:
    pinia简单使用及持久化
    vue3中使用elementui 菜单栏(elmenu)点击两次才高亮的bug
    python 从文件下载lib包
    Centos7安装Python3.8
    Rust如何开发eBPF应用?(一)
    使用GetSelection模仿GetEntity
    CAD错误消息
    一款好用的pdf工具软件我的ABC软件工具箱
    wget 多线程下载 mwget 工具安装
    minio
  • 原文地址:https://www.cnblogs.com/ltfbk/p/3596699.html
Copyright © 2020-2023  润新知