⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 comm_usart.c

📁 PIC Kit serial source code.
💻 C
📖 第 1 页 / 共 2 页
字号:
         
         COMM_SB_USART_CONFIG_RCV_DIS_FLAG = 0;
         RCSTAbits.CREN = 1;
         comm_state = COMM_STATE_GEN_NEXT;
         break;

      //====================================================
      case COMM_TAG_USART_DATA_ARCV_DISABLE:

         //-----------------------------
         //--- CHECK MODE
         //-----------------------------
         if(not COMM_MODE_USART_A)
         {
            COMM_SB_BAD_CMND_FLAG = 1;
            break;
         }
         
         COMM_SB_USART_CONFIG_RCV_DIS_FLAG = 1;
         RCSTAbits.CREN = 0;
         comm_state = COMM_STATE_GEN_NEXT;
         break;

      //====================================================
      case COMM_TAG_USART_BREAK_XMT:
      case COMM_TAG_USART_BREAK_DATA_XMT:

         //-----------------------------
         //--- CHECK MODE
         //-----------------------------
         if(not COMM_MODE_USART_SM)
         {
            COMM_SB_BAD_CMND_FLAG = 1;
            break;
         }
         

         //--- SETUP XMIT
         if(not COMM_0_FLAG)
         {
            TXSTAbits.TXEN = 1;
            TXSTAbits.SENDB = 1;
            TXREG = 0;
            COMM_0_FLAG = 1;
            COMM_PROC_LOOP_FLAG = 1;
         }

         //--- WAIT for TXREG MT, LOAD W/ DATA IF APPLICABLE
         else if(not COMM_1_FLAG)
         {
            if(PIR1bits.TXIF)
            {
               if(comm_state == COMM_TAG_USART_BREAK_DATA_XMT)
               {
                  if(comm_data_get())
                  {
                     TXREG = comm_data;
                     COMM_1_FLAG = 1;
                  }
               }
               else
               {
                  COMM_1_FLAG = 1;
               }
               comm_led_busy_data();
               COMM_PROC_LOOP_FLAG = 1;
            }
         }
         else
         {
            if(PIR1bits.TXIF)
            {
               if(not TXSTAbits.SENDB)
               {
                  if(TXSTAbits.TRMT)
                  {
                     comm_state = COMM_STATE_GEN_NEXT;
                     COMM_PROC_LOOP_FLAG = 1;
                  }
                  comm_led_busy_data();
               }
            }
         }
         break;

      //====================================================
      case COMM_TAG_USART_BAUD:
         if(not COMM_0_FLAG)
         {
            if(comm_data_get())
            {
               SPBRG = comm_data;
               COMM_SB_USART_BRG_LO_REG = SPBRG;
               COMM_0_FLAG = 1;
               COMM_PROC_LOOP_FLAG = 1;
            }
         }
         else
         {
            if(comm_data_get())
            {
               SPBRGH = comm_data;
               COMM_SB_USART_BRG_HI_REG = SPBRGH;
               comm_state = COMM_STATE_GEN_NEXT;
               COMM_PROC_LOOP_FLAG = 1;
            }
         }
         break;

      //====================================================
      case COMM_TAG_USART_CKP_SET:

         //-----------------------------
         //--- CHECK MODE
         //-----------------------------
         if(not COMM_MODE_USART_SM)
         {
            COMM_SB_BAD_CMND_FLAG = 1;
            break;
         }
         
         BAUDCONbits.SCKP = 1;
         COMM_SB_USART_CONFIG_CKP_FLAG = 1;
         comm_state = COMM_STATE_GEN_NEXT;
         break;

      //====================================================
      case COMM_TAG_USART_CKP_RST:

         //-----------------------------
         //--- CHECK MODE
         //-----------------------------
         if(not COMM_MODE_USART_SM)
         {
            COMM_SB_BAD_CMND_FLAG = 1;
            break;
         }
         
         BAUDCONbits.SCKP = 0;
         COMM_SB_USART_CONFIG_CKP_FLAG = 0;
         comm_state = COMM_STATE_GEN_NEXT;
         break;


      //====================================================
      case COMM_TAG_USART_AUX1_RST:
         USART_AUX1_PORT = 0;
         comm_state = COMM_STATE_GEN_NEXT;
         COMM_PROC_LOOP_FLAG = 1;
         break;
         
      //====================================================
      case COMM_TAG_USART_AUX1_SET:
         USART_AUX1_PORT = 1;
         comm_state = COMM_STATE_GEN_NEXT;
         COMM_PROC_LOOP_FLAG = 1;
         break;
         
      //====================================================
      case COMM_TAG_USART_AUX1_OUT:
         USART_AUX1_TRIS = 0;
         comm_state = COMM_STATE_GEN_NEXT;
         COMM_PROC_LOOP_FLAG = 1;
         break;
         
      //====================================================
      case COMM_TAG_USART_AUX1_IN:
         USART_AUX1_TRIS = 1;
         comm_state = COMM_STATE_GEN_NEXT;
         COMM_PROC_LOOP_FLAG = 1;
         break;
         
      //====================================================
      case COMM_TAG_USART_AUX1_WAIT_0:
         if(not USART_AUX1_PORT)
         {
            comm_state = COMM_STATE_GEN_NEXT;
            COMM_PROC_LOOP_FLAG = 1;
         }
         break;
         
      //====================================================
      case COMM_TAG_USART_AUX1_WAIT_1:
         if(USART_AUX1_PORT)
         {
            comm_state = COMM_STATE_GEN_NEXT;
            COMM_PROC_LOOP_FLAG = 1;
         }
         break;
         

      //====================================================
      case COMM_TAG_USART_AUX2_RST:
         USART_AUX2_PORT = 0;
         comm_state = COMM_STATE_GEN_NEXT;
         COMM_PROC_LOOP_FLAG = 1;
         break;
         
      //====================================================
      case COMM_TAG_USART_AUX2_SET:
         USART_AUX2_PORT = 1;
         comm_state = COMM_STATE_GEN_NEXT;
         COMM_PROC_LOOP_FLAG = 1;
         break;
         
      //====================================================
      case COMM_TAG_USART_AUX2_OUT:
         USART_AUX2_TRIS = 0;
         comm_state = COMM_STATE_GEN_NEXT;
         COMM_PROC_LOOP_FLAG = 1;
         break;
         
      //====================================================
      case COMM_TAG_USART_AUX2_IN:
         USART_AUX2_TRIS = 1;
         comm_state = COMM_STATE_GEN_NEXT;
         COMM_PROC_LOOP_FLAG = 1;
         break;
         
      //====================================================
      case COMM_TAG_USART_AUX2_WAIT_0:
         if(not USART_AUX2_PORT)
         {
            comm_state = COMM_STATE_GEN_NEXT;
            COMM_PROC_LOOP_FLAG = 1;
         }
         break;
         
      //====================================================
      case COMM_TAG_USART_AUX2_WAIT_1:
         if(USART_AUX2_PORT)
         {
            comm_state = COMM_STATE_GEN_NEXT;
            COMM_PROC_LOOP_FLAG = 1;
         }
         break;
         

      //====================================================
      default:
         COMM_SB_BAD_CMND_FLAG = 1;
         break;

   } // end SWITCH
   
   //-----------------------------------
   //--- CHECK RCV BUFFER
   //-----------------------------------
//   comm_usart_rcv();
}


//==========================================================
//--- comm_usart_rcv()
//    receive USART data (ASYNC mode)
//==========================================================
void comm_usart_rcv_isr(void)
{
   //-------------------------------------------------------
   //--- RECEIVE ENABLE ?
   //-------------------------------------------------------
   if(COMM_MODE_USART_A)
   {
      if(PIR1bits.RCIF)
      {
         comm_data = RCREG;
         comm_post_data();
         if(COMM_CB_USART_EVENT_BYTE_RX_FLAG)
            comm_post_event_1b(COMM_TAG_USART_EVENT_BYTE_RX, comm_data);
         COMM_USART_RCV_FLAG = 1;
      }
   }
}
   
//==========================================================
//--- comm_usart_postproc()
//    post processing
//
//    look for status error(s)
//    set appropriate STATUS_BLOCK flags
//    set composite status bit
//==========================================================
void comm_usart_postproc(void)
{
   
   //-----------------------------------
   //--- CHECK RCV
   //-----------------------------------
   if(COMM_USART_RCV_FLAG)
   {
      COMM_USART_RCV_FLAG = 0;
      comm_led_busy_data();
   }
   
//   comm_usart_rcv();

   //-----------------------------------
   //--- AUX PIN STATUS
   //-----------------------------------
   COMM_SB_USART_AUX1_TRIS_FLAG = 0;
   if(USART_AUX1_TRIS)
      COMM_SB_USART_AUX1_TRIS_FLAG = 1;

   COMM_SB_USART_AUX2_TRIS_FLAG = 0;
   if(USART_AUX2_TRIS)
      COMM_SB_USART_AUX2_TRIS_FLAG = 1;
   
   COMM_SB_USART_AUX1_PORT_FLAG = 0;
   if(USART_AUX1_PORT)
      COMM_SB_USART_AUX1_PORT_FLAG = 1;
   
   COMM_SB_USART_AUX2_PORT_FLAG = 0;
   if(USART_AUX2_PORT)
      COMM_SB_USART_AUX2_PORT_FLAG = 1;

   
   //-----------------------------------
   //--- transaction error
   //-----------------------------------
   COMM_4_FLAG = 0;
   if(RCSTAbits.FERR)
   {
      COMM_4_FLAG = 1;
      RCSTAbits.FERR = 0;
      COMM_SB_USART_STATUS_FERR_FLAG = 1;
   }
   if(RCSTAbits.OERR)
   {
      COMM_4_FLAG = 1;
      RCSTAbits.OERR = 0;
      COMM_SB_USART_STATUS_OERR_FLAG = 1;
   }
   
   if(COMM_4_FLAG)
   {
      if(COMM_CB_USART_EVENT_STATUS_ERR_FLAG)
      {
         comm_post_event_1b(COMM_TAG_USART_EVENT_STATUS_ERR, COMM_SB_USART_ERR_REG);
      }
   }
   
   //-----------------------------------
   //--- composite error
   //-----------------------------------
   if(COMM_SB_USART_ERR_REG & COMM_SB_USART_ERR_REG_MASK)
   {
      COMM_SB_GEN_ERR_FLAG = 1;
      COMM_SB_USART_ERR_FLAG = 1;
   }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -