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