📄 driver.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 + -