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

📄 initsys.c

📁 低压电力线载波通信PL3200驱动程序
💻 C
字号:
/********************************************************************
包含头文件
********************************************************************/
#include "PL3200.H"
#include "CONST.H"
#include "RAM.H"
#include "IO.H"

/********************************************************************
引用的外部函数
********************************************************************/
extern void SetZbMode(void) ;

/********************************************************************
函数名称: void InitRAM(void)
功    能: 系统上电初始化RAM
入    口: 无
出    口: 无
********************************************************************/
void InitRAM(void)
{
    com0_step    = 0 ;  //串口1接收步进计数器清0 
    zb_rece_step = 0 ;  //载波接收步进计数器清0 
    COM0_RECE_OK = 0 ;  //串口1接收成功标志清0
    ZB_RECE_OK   = 0 ;  //载波接收成功标志清0
    flag0        = 0 ;  //位标志清0 
    zb_rece_ptr  = 0 ;  //载波接收指针清0
    zb_send_ptr  = 0 ;  //载波发送指针清0
    led_time     = 0 ;
}

/********************************************************************
函数名称: void InitSys(void)
功    能: 系统上电初始化配置
入    口: 无
出    口: 无
********************************************************************/
void InitSys(void)
{
    CKCON = 0x3f ;              //设置喂狗时间间隔;设置访问外部RAM时钟
    ALU_MOD = 0 ;               //运算模式选择 0:8位   1-16位
 
    //载波设置
    SSC_ADR = 0x01 ;            //发送前导字节个数64
    SSC_DAT = BASE_LEADER ;
    
    SSC_ADR = 0xff ;            //B制时,KASAMI或GOLDEN码地址为1FH
    SSC_DAT = 0xff ;
    SSC_ADR = 0x02 ;    
    SSC_DAT = 0x1f ;
    SSC_ADR = 0xff ;
    SSC_DAT = 0xaa ;
    
    SetZbMode() ;               //设置DEMO板载波通讯方式
    
    //串口1通讯设置
    PCON  = 0xc0 ;              //波特率加倍
    TMOD  = 0x21 ;              //定时器0工作模式1;定时器2工作模式2
    SCON  = 0xd0 ;              //数据格式:11位,偶校验
    
    SCON1 = 0xd0 ;
    TMOD1 = 0x02 ;
    TMOD1 = TMOD1|0x30 ;        //T1和T2时钟为12倍
    
    TH0 = T0_BASE_H ;           //定时器T0定时间隔为5ms         
    TL0 = T0_BASE_L ;
    TR0 = 1 ;
    
    TH1 = T1_BASE_H ;           //串口0波特率为9600bps
    TL1 = T1_BASE_L ;
    TR1 = 1 ;
    
    TH2 = T2_BASE_H ;           //串口0波特率为9600bps
    TL2 = T2_BASE_L ;
    TR2 = 1 ;
    
    //中断控制
    IP  = 0x00 ;                //无中断优先级
    IE  = 0xc2 ;                //使能定时器T0中断,串口1接收中断,开总中断
    EIE = 1 ;                   //使能载波中断
}


/********************************************************************
函数名称: void InitSysRef(void)
功    能: 系统冗余初始化
入    口: 无
出    口: 无
********************************************************************/
void InitSysRef(void)
{
    if(IE!=0xc2) IE = 0xc2 ;
    if(EIE!=0x01) EIE = 0x01 ;
    
    if(TH2!=T2_BASE_H) TH2 = T2_BASE_H ;
    if(SCON1!=0xd0) SCON1  = 0xd0 ;
    
    SSC_ADR = 0x02 ; 
    if(SSC_DAT!=0x1f)
    {
        SSC_ADR = 0xff ;
        SSC_DAT = 0xff ;
        SSC_ADR = 0x02 ;    
        SSC_DAT = 0x1f ;
        SSC_ADR = 0xff ;
        SSC_DAT = 0xaa ;
    }

    SSC_ADR = 0x01 ;            //发送前导字节个数64              
    if(SSC_DAT!=BASE_LEADER)
    {               
        SSC_DAT = BASE_LEADER ;
    }
    
        
    RXD_IO = 1 ;                //串口接收和发送管脚置高
    TXD_IO = 1 ;
    BELOW_OK_IO = 1 ;           //联络信号置高
    UP_OK_IO    = 1 ;           //联络信号置高
    UP_DATA_IO  = 1 ;           //数据传送置高
}

/********************************************************************
函数名称: void InitLED(void)
功    能: 系统上电初始化LED,复费率闪烁3次
入    口: 无
出    口: 无
********************************************************************/
void InitLED(void)
{
    uint8  i ;
    uint16 time ;

    for(i=0;i<1;i++)
    {
        
        MODE_LED  = 0 ;
        time = 0xffff ;
        while(time--) WDT_RST =0xa1 ;

        MODE_LED  = 1 ;
        time = 0xffff ;
        while(time--) WDT_RST =0xa1 ;
    }
}

⌨️ 快捷键说明

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