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

📄 driver.c

📁 GPS驱动集合
💻 C
字号:
/*********************************************************************** 
文件名: Driver.c 
内容: 底层驱动程序 
创建人: Bob Lee 
创建日期: 2005-8-12 
修改日期: 2005-8-12 
版本: 1.00.000 
 ***********************************************************************/
#include "Driver.h" 

/*&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt; 
状态灯操作 
&amt;*/
/*------------------------------------------------------------------ 
名称: LightStatus 
作用: 点亮状态灯 
输入: 无 
输出: 无 
修改原因: 
修改内容: 
创建日期: 2005-8-26 
修改日期: 2005-8-26 
------------------------------------------------------------------*/
void LightStatus(void)
{
  LIGHT_STATUS = false;
}

/*------------------------------------------------------------------ 
名称: DelightStatus 
作用: 熄灭状态灯 
输入: 无 
输出: 无 
修改原因: 
修改内容: 
创建日期: 2005-8-26 
修改日期: 2005-8-26 
------------------------------------------------------------------*/
void DelightStatus(void)
{
  LIGHT_STATUS = true;
}

/*------------------------------------------------------------------ 
名称: DelightAll 
作用: 熄灭所有灯以及继电器 
输入: 无 
输出: 无 
修改原因: 
修改内容: 
创建日期: 2005-8-26 
修改日期: 2005-8-26 
------------------------------------------------------------------*/
void DelightAll(void)
{
  DelightOther(1);
  DelightOther(2);
  DelightOther(3);
  DelightOther(4);
  DisableRelay(0);
}

/*&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt; 
其它指示灯操作 
&amt;*/
/*------------------------------------------------------------------ 
名称: LightOther 
作用: 点亮其它灯 
输入: Serial -> 灯的序号 
输出: 无 
修改原因: 
修改内容: 
创建日期: 2005-8-26 
修改日期: 2005-8-26 
------------------------------------------------------------------*/
void LightOther(uchar Serial)
{

  switch (Serial)
  {
    case 0x00:
      LIGHT_WARN = false;
      break;
      #ifdef YCC_6MG1 
      case 0x01:
        EnableRelay(1);
        break;
      case 0x02:
        EnableRelay(2);
        break;
      case 0x03:
        LIGHT_3 = false;
        break;
        #ifndef HARDDEBUG 
        case 0x04:
          LIGHT_4 = false;
          break;
        #endif 
      #endif 
    default:
      break;
  }

}

/*------------------------------------------------------------------ 
名称: DelightOther 
作用: 熄灭其它灯 
输入: 无 
输出: 无 
修改原因: 
修改内容: 
创建日期: 2005-8-26 
修改日期: 2005-8-26 
------------------------------------------------------------------*/
void DelightOther(uchar Serial)
{

  switch (Serial)
  {
    case 0x00:
      LIGHT_WARN = true;
      break;
      #ifdef YCC_6MG1 
      case 0x01:
        DisableRelay(1);
        break;
      case 0x02:
        DisableRelay(2);
        break;
      case 0x03:
        LIGHT_3 = true;
        break;
        #ifndef HARDDEBUG 
        case 0x04:
          LIGHT_4 = true;
          break;
        #endif 
      #endif 
    default:
      break;
  }

}

/*&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt; 
无线模块操作 
&amt;*/
/*------------------------------------------------------------------ 
名称: EnableWireless 
作用: 使能无线模块 
输入: 无 
输出: 无 
修改原因: 
修改内容: 
创建日期: 2005-8-26 
修改日期: 2005-8-26 
------------------------------------------------------------------*/
void EnableWireless(void)
{
  ENWIRELESS = true;
}

/*------------------------------------------------------------------ 
名称: DisableWireless 
作用: 复位无线模块 
输入: 无 
输出: 无 
修改原因: 
修改内容: 
创建日期: 2005-8-26 
修改日期: 2005-8-26 
------------------------------------------------------------------*/
void DisableWireless(void)
{
  ENWIRELESS = false;
}

/*&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt; 
继电器操作 
&amt;*/
/*------------------------------------------------------------------ 
名称: InitializeA 
作用: 初始化继电器操作口 
输入: 无 
输出: 无 
修改原因: 
修改内容: 
创建日期: 2005-8-26 
修改日期: 2005-8-26 
------------------------------------------------------------------*/
void InitializeRelay(void)
{

  PSD8xx_reg.VM.bits.PIO_EN = 0;
  PSD8xx_reg.DATAOUT_A = 0x2a; // initial output data 
  PSD8xx_reg.CONTROL_A = 0x00; // 1=latched address out, 0=genernal I/O 
  PSD8xx_reg.DIRECTION_A = 0xff; // 1= ouput mode, 0 = input mode 
  PSD8xx_reg.OUTENABLE_A = 0xff; // 
  PSD8xx_reg.DRIVE_A = 0x00;
  // upper 4 bits (bit7-4) are for open-drain/CMOS control of PA7-4 
  // 1 = open drain, 0 = CMOS 
  // lower 4 bits (bit3-0) are for slew late control of PA3-0 
  // 1 = higher slew rate, 0 = normal slew rate 
  PSD8xx_reg.OMCMASK_AB = 0x00; // write mask control of MCellAB 
  // 1 = blocking write, 0 = enable write 
  PSD8xx_reg.OMC_AB = 0xff; // write a initial data to Flip-Flops in MCellAB 

}

/*------------------------------------------------------------------ 
名称: EnableRelay 
作用: 使能继电器 
输入: Serial -> 继电器的序号 
输出: 无 
修改原因: 
修改内容: 
创建日期: 2005-8-26 
修改日期: 2005-8-26 
------------------------------------------------------------------*/
void EnableRelay(uchar Serial)
{

  switch (Serial)
  {
    case 0x00:
      PORTA &amt;
       = 0xfc;
      PORTA |= 0x02;
      break;
    case 0x01:
      PORTA &amt;
       = 0xf3;
      PORTA |= 0x08;
      break;
    case 0x02:
      PORTA &amt;
       = 0xcf;
      PORTA |= 0x20;
      break;
    default:
      break;
  }
  PSD8xx_reg.DATAOUT_A = PORTA;
}

/*------------------------------------------------------------------ 
名称: DisableRelay 
作用: 禁止继电器 
输入: Serial -> 继电器的序号 
输出: 无 
修改原因: 
修改内容: 
创建日期: 2005-8-26 
修改日期: 2005-8-26 
------------------------------------------------------------------*/
void DisableRelay(uchar Serial)
{

  switch (Serial)
  {
    case 0x00:
      PORTA &amt;
       = 0xfc;
      PORTA |= 0x01;
      break;
    case 0x01:
      PORTA &amt;
       = 0xf3;
      PORTA |= 0x04;
      break;
    case 0x02:
      PORTA &amt;
       = 0xcf;
      PORTA |= 0x10;
      break;
    default:
      break;
  }
  PSD8xx_reg.DATAOUT_A = PORTA;

}

/*------------------------------------------------------------------ 
名称: EnableBattery 
作用: 接通电池 
输入: 无 
输出: 无 
修改原因: 
修改内容: 
创建日期: 2005-8-26 
修改日期: 2005-8-26 
------------------------------------------------------------------*/
void EnableBattery(void)
{

  PORTA |= 0x40;
  PSD8xx_reg.DATAOUT_A = PORTA;

}

/*------------------------------------------------------------------ 
名称: DisableBattery 
作用: 断开电池 
输入: 无 
输出: 无 
修改原因: 
修改内容: 
创建日期: 2005-8-26 
修改日期: 2005-8-26 
------------------------------------------------------------------*/
void DisableBattery(void)
{

  PORTA &amt;
   = 0xbf;
  PSD8xx_reg.DATAOUT_A = PORTA;

}

#ifdef YCC_3JP5 
  /*------------------------------------------------------------------ 
  名称: EnableBattery 
  作用: 接通电池 
  输入: 无 
  输出: 无 
  修改原因: 
  修改内容: 
  创建日期: 2005-8-26 
  修改日期: 2005-8-26 
  ------------------------------------------------------------------*/
  void Enable485Receive(void)
  {

    PORTA &amt;
     = 0x7f;
    PSD8xx_reg.DATAOUT_A = PORTA;

  }

  /*------------------------------------------------------------------ 
  名称: DisableBattery 
  作用: 断开电池 
  输入: 无 
  输出: 无 
  修改原因: 
  修改内容: 
  创建日期: 2005-8-26 
  修改日期: 2005-8-26 
  ------------------------------------------------------------------*/
  void Enable485Send(void)
  {

    PORTA |= 0x80;
    PSD8xx_reg.DATAOUT_A = PORTA;

  }
#endif 
/*&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt; 
WDT操作 
&amt;*/
/*------------------------------------------------------------------ 
名称: ClearWDT 
作用: 喂狗 
输入: 无 
输出: 无 
修改原因: 
修改内容: 
创建日期: 2005-8-26 
修改日期: 2005-8-26 
------------------------------------------------------------------*/
void ClearWDT(void)
{
  WDRST = 0x00;
}

/*&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt; 
定时中断 
&amt;*/
/*------------------------------------------------------------------ 
名称: Timer0Interrupt 
作用: Timer0中断 
创建日期: 2005-8-26 
修改日期: 2005-8-26 
------------------------------------------------------------------*/
static void Timer0Interrupt(void)interrupt TF0_VECTOR
{

  DetectPulse = 0;

  if (!sRegister--)
  {
    sRegister = 14;
    if (!SecondRegister--)
      Flag_1s = true;
    Flag_s = true;
  }
  if (!FlashRegister--)
  // 
  {
    FlashRegister = 0x02;
    if (LoginFlag)
      FlashRegister = 0x08;
    if (!InitializeFlag)
    {
      LIGHT_STATUS ^= 0x01;
    }
    else
    {
      LIGHT_WARN ^= 0x01;
    }
  }
}


/*&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt;&amt; 
通讯串口中断及底层操作 
&amt;*/
/*------------------------------------------------------------------ 
名称: UART2Interrupt 
作用: UART2中断 
创建日期: 2005-8-26 
修改日期: 2005-8-26 
------------------------------------------------------------------*/
static void UART2Interrupt(void)interrupt SIO1_VECTOR using 1
{
  unsigned char data c;
  if (SCON2 &amt; 0x01)
  {
    ReceiveBuffer[ReceiveTail] = SBUF2;
    ReceiveTail++;
    SCON2 &amt;
     = 0xfe;
    ReceiveFlag = true;
  }
  else
  {
    if (SendFlag)
    {
      c = SendBuffer[SendPointer++];
      if (c != 0x00)
      {
        SBUF2 = c;
      }
      else
      {
        SendFlag = false;
      }
    }
    SCON2 &amt;
     = 0xfd;
  }
}

/*------------------------------------------------------------------ 
名称: ATSend 
作用: 发送字符串 
输入: 所要发送的字符串 
输出: 无 
创建日期: 2005-8-26 
修改日期: 2005-8-26 
------------------------------------------------------------------*/
void ATSend(char *ATString)
{

  unsigned char data i;

  for (i = 0x00; i < 0xff; i++)
    SendBuffer[i] = 0x00;

  i = 0x00;
  while (true)
  //将所要发送的数据发送到发送缓冲区 
  {
    SendBuffer[i] = ATString[i];
    if (SendBuffer[i] == 0x0d)
      break;
    i++;
    if (i > 254)
      break;
  }

  SendPointer = 0x01;
  SBUF2 = SendBuffer[0]; //发送第一个字节,启动发送 
  SCON2 &amt;
   = 0xfd;
  SendFlag = true;

  while (SendFlag){}
  //等待发送完毕 

}

/*------------------------------------------------------------------ 
名称: ATReceive 
作用: 接收字符串 
输入: 无 
输出: = 0x00:没有接收到字符 
其它:所接收的字符 
创建日期: 2005-8-26 
修改日期: 2005-8-26 
------------------------------------------------------------------*/
unsigned char ATReceive(void)
{

  unsigned char data c;

  if (!ReceiveFlag)
    return 0x00;
  //没有接收到数据 
  c = ReceiveBuffer[ReceiveHead++];
  if (ReceiveHead == ReceiveTail)
    ReceiveFlag = false;
  return c;

}

void Delays(char ss)
{
  char i;
  for (i = 0x00; i < ss; i++)
  {
    Flag_s = false;
    while (!Flag_s)
    {
      ClearWDT();
    }
  }
}

⌨️ 快捷键说明

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