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

📄 driver.c[2008-07-17-01-31-21].sfb

📁 GPS驱动集合
💻 SFB
字号:
/*********************************************************************** 
文件名: 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 + -