framedispose.c

来自「small RTOS 嵌入式实时多任务开发」· C语言 代码 · 共 62 行

C
62
字号

#include "config.h"

#ifndef TRUE
#define TRUE  1
#endif

#ifndef FALSE
#define FALSE 0
#endif

extern volatile Info ControlByte;  // 声明
static volatile uint8 Sequence=0xff;  // 定义


void Transmit(uint8 Address, uint8 *p, uint8 Type)
{
  Delay(_10MS);// 由于2401的发射有延迟,故此10ms的延迟用于保证数据接收方发送应答信息时,
                                          //  数据发送方的2401已经处于接收状态了 
  ChangeState(_Tx_Word);  // 2401进入发送状态,且有1ms的延迟
  for(AddressCnt=0;AddressCnt<_AddrWidth;AddressCnt++)
    { _TX_SPI(Address); }
  _TX_SPI(Type); _TX_SPI(SelfAddr);
  for(DataCnt=0;DataCnt<_DataWidth;DataCnt++)
    { _TX_SPI(*(p+DataCnt)); }
  _2401_START_TX;  // 启动2401的发送过程,且有5ms的延迟
  ChangeState(_Rx_Word); // 2401进入接收状态,且有1ms的延迟
}

uint8 Dispose(uint8 Address)  
{
  uint8 err; 
  Address=Address;
  if((uint8)Sequence == (uint8)ControlByte.FrameSequence)                
    { 
     err=_ThisFrameHasReceived;
     _TURN_ON_3STA;return(err);
    } 
  else 
    {
      if((uint8)(Sequence+1) == ControlByte.FrameSequence)
        {
          Sequence++;
          switch((uint8)ControlByte.LastFrame)
               {
                  case  TRUE  :  err=_AllFramesHasReceived;
                                 Sequence=0xff; _TURN_ON_SCH;
                                 break;
                  default     :  err=_ReceivedANewFrame; 
                                 _TURN_ON_RIGHT; break;
               }
          return(err);
        } 
      else err=_LostAtLeastOneFrame; _TURN_ON_WRONG;
    }                                                            
  return(err);
}




⌨️ 快捷键说明

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