📄 main.c
字号:
/***********************************************************
pjname:Group phone system
author:rpj
version: V0.1
description:v0.1 only for switch system
*************************************************************/
#include "reg52.h"
#include "absacc.h"
#include "clock.h"
#include "define.h"
#include "extsystem.h"
#include "uartmodule.h"
#include "drive.h"
#include "command.h"
#include "variable.h"
main()
{
unchar data i;
programstart:
SP = 0X60;
Init_System();
Delay_ms(200);
while(systemreload==0)
{
if( Flagscan )
{
Flagscan = 0;
Micro_Scan_8870();
}
if( Flag30MS )
{
Flag30MS = 0;
Ext_Timer_Judge();
for(i=0;i<TAL_EXTGroup;i++)
{
Read_8870ST();
EXT_StateScan(i);
}
}
if( Flag90MS )
{
Flag90MS = 0;
WorkRight =~WorkRight;
}
if( Flag1S )
{
Flag1S = 0;
if(SetParamCounter)
{
SetParamCounter++;
if(SetParamCounter>250)
{
SetParamCounter = 0;
Save_System(0);
}
}
if((FlagHeartSkip==1)||(FlagHeartSkip==3)||(FlagHeartSkip==9))
{
UartData_List[0] = 0;
BaseDataComm(RepWorking,0);
}
}
//系统收号标志检查
Read_8870ST();
if( CounterMS < 4 )
{
Ext_Event_Analyse();
}
}
systemreload= 0;
goto programstart;
}
/***************************************
flash数据存放说明,flash以256BYTE为扇区保留读取数据
所有数据为了扩展兼容,都以最大256BYTE为单元存储
用户普通零散数据存放 0x00000~0x000FF
用户会议组数据存放 0X00100~0X001FF
用户中继组数据存放 0X00200~0X002FF
用户参数组数据存放Num_H_Logic 0X01000~0X010FF
用户参数组数据存放Num_L_Logic 0X01100~0X011FF
用户参数组数据存放Num_Hot_Call 0X01200~0X012FF
用户参数组数据存放Num_Trans_Call 0X01300~0X013FF
用户参数组数据存放Num_Busy_Recall 0X01400~0X014FF
用户参数组数据存放Num_Group_Call 0X01500~0X015FF
用户参数组数据存放Trk_Group_Right 0X01600~0X016FF
用户参数组数据存放Trk_Group_Num 0X01700~0X017FF
用户参数组数据存放Trk_Group_Param 0X01800~0X018FF
用户参数组数据存放Bit_Param 0X01900~0X019FF
用户参数组数据存放Num_Troop_Call 0X01a00~0X01aFF
用户逻辑号码数据存放1000个号码 0X02000~0X220FF
用户普通零散数据存放说明
0X00000~0X00002
数据首次读取判断说明,如果都为FF,表示
为首次启动,并进入默认设置模式,同时修改
数据为(电源启动计数)(系统保存分机字头)(系统分机长度)
0X00003~0X00005
数据为(会议组数)(中继组数)(用户数)
存储说明∶由于该系统使用的FLASH RAM相对小,只使用前32B
所以 SelecEN_A15 = 0; SelecEN_A16 = 0;不用考虑大于32KB的空间
***************************************/
void Init_System(void)
{
unint data i,j;
PSW = 0 ;
IE = 0; //屏蔽所有中断
TMOD = 0x21; //定时器T1用于串口,定时器T0用于16位定时器。
PCON = 0x80; //串行SMOD波特率翻倍
SCON = 0x50; //串行方式为1,SM = 0,REN = 1,
IP = 0x02; //设置T0为高级中断
ET0 = 1; //设置定时器中断
TCON = 0; //清楚定时器初始状态
LOAD_TIMER0(TimerH_1ms, TimerL_1ms);
LOAD_TIMER1(bps4800);
TI = 0;
RI = 0;
TR1 = 1;
EA = 1;
Control_4052A = 1;
Control_4052B = 1;
SLEC_Point = 3;
Init_RC_Port();
Init_8816();
/************************
检查RAM 的数据情况
************************/
do
{
j = 0;
for(i=0;i<0x7f00;i++)
{
XBYTE[(i)] = 0x55;
if(XBYTE[(i)]!=0x55)
j++;
}
}while(j>0);
/******************************************/
//防止启动出现振铃,先对用户状态复位
/************************
Init_EXT_Parma();
************************/
for(i=0;i<255;i++)
{
FlashRamTemp[i] = 0xff;
}
Write_FlashPage();
Read_FlashSecter(0x0000);
/*****check the flash,if 0000~0006 addr has write data ,then load flash data or system set****/
if( (FlashRamTemp[0]!=0x55)||(FlashRamTemp[20]==0xaa))
{
Write_FlashProvide(Erase_Flash);
Delay_ms(20);
Def_EXT_Parma();
}
else
{
Copy_EXT_Parma();
}
Init_RC_Port();
/************************
Init_EXT_variable();
************************/
for(i=0;i<TAL_EXT_PORT;i++)
{
Ext_Param[i].Num_Call_Other = 0xff; //默认被叫号码是无效0xff
Ext_Param[i].Num_Call_Me = 0xff; //默认主叫号码是无效0xff
Ext_Param[i].Num_Switch_Cable = 0xff; //默认绳路号码是无效0xff
Ext_Param[i].Num_MeetGroup = 0xff; //默认会议组号码是无效0xff
Ext_Param[i].Temp_Troop_Call= 0; //默认临时群呼组号码是无效0
Ext_Param[i].RecDTMF_Data = 0xff; //默认8870接收号码是无效0xff
Ext_Param[i].RecDTMF_En = MT8870_NoRec;//默认收号是有效0x10
Ext_Param[i].Ext_EVENT = 0xff; //默认用户事件是无效0xff
Ext_Param[i].Ext_State = 0; //默认用户状态是空闲0
Ext_Param[i].Flag_Signal = 0; //默认用户信号音是空闲0
Ext_Timer[i].Counter_HK = 0; //默认计数器是空闲0
Ext_Timer[i].Counter_Signal = 0; //默认计数器是空闲0
Ext_Timer[i].Counter_Pause = 0; //默认计数器是空闲0
Ext_Timer[i].Counter_Rec_DTMF = 0; //默认计数器是空闲0
for(j=0;j<12;j++)
{
Ext_Param[i].Ext_RecDtmf_List[j] = 0;//默认收号BUF是空闲0
}
}
/************************
Init_HostEXT_variable();
************************/
for(i=0;i<MAX_Ext;i++)
{
HostExt_Calling_List[i] = 0;
HostExt_Called_List[i] = 0;
}
/**********************
init system timer variable
*********************/
FlagMS = 0;
Flag5MS = 0;
Flag15MS = 0;
Flag30MS = 0;
Flag90MS = 0;
Flag1S = 0;
Flagscan = 0;
CounterMS = 0;
Counter5MS = 0;
Counter15MS = 0;
Counter30MS = 0;
Counter90MS = 0;
Counter_Uart = 0;
SLEC_Point = 0;
SetParamCounter = 0;
systemreload = 0;
System_Modify = 0xff;
/**********************
init router variable
*********************/
for(i=0;i<TAL_CABLE;i++)
{
CABLE_USE_LIST[i] = 0;
}
CABLE_USE = 0;
CABLE_USE_NOW = 0;
/**********************
init event variable
*********************/
for(i=0;i<BufSize;i++)
{
EXT_EVENT_QUEUE[i] = 0;
}
WP_EVENT = 0;
RP_EVENT = 0;
TAL_EVENT = 0;
/**********************
init uart variable
*********************/
for(i=0;i<AlignSize;i++)
{
UartSend_List[i] = 0;
UartRec_List[i] = 0;
UartData_List[i] = 0;
}
WP_UartRec = 0;
WP_UartSend = 0;
RP_UartRec = 0;
RP_UartSend = 0;
TAL_UartRec = 0;
TAL_UartSend = 0;
WP_UartData = 0;
TAL_UartData = 0;
DataHeadRec = 0;
DataType = 0;
/**********************
init temp meet group variable
*********************/
for(i=0;i<TAL_CABLE;i++)
{
Temp_MeetGroup[i].MeetGroup = 0xff;
Temp_MeetGroup[i].Manager_Ext = 0xff;
Temp_MeetGroup[i].Num_Member = 0;
Temp_MeetGroup[i].Meetstate = 0;
for(j=0;j<TAL_EXT_PORT;j++)
{
Temp_MeetGroup[i].Meet_Member[j] = 0xff;
}
}
FlagHeartSkip = 2;
TR0 = 1; //初始化开关状态
}
/*****************************
name:Copy_EXT_Parma(void)
input:/
output:/
description:
将在FLASH中的所有系统数据全部
复制到现在的RAM中
*****************************/
void Copy_EXT_Parma(void)
{
unchar data i,m;
unint xdata j;
Write_FlashPage();
Read_FlashSecter(0x0000);
EXT_Head = FlashRamTemp[1];
EXT_Len = 3;//FlashRamTemp[2];//直接定义死长度是3
Host_Head = FlashRamTemp[3];
TAL_EXT_PORT = FlashRamTemp[4];
TAL_MeetGroup = FlashRamTemp[5];
TAL_TrkGroup = FlashRamTemp[6];
TAL_TroopGroup = FlashRamTemp[7];
Hot_Len = FlashRamTemp[8];
Host_Ext = FlashRamTemp[9];
First_Meet_Head = FlashRamTemp[10];
First_Troop_Head = FlashRamTemp[11];
FlagSystemType = FlashRamTemp[12];
FlagHeartSkip = FlashRamTemp[21];
NoFreeFlag = FlashRamTemp[22];
NoFreeCounter = FlashRamTemp[23];
FlashRamTemp[23]++;
Password1 = FlashRamTemp[24];
if(Password1>9)
Password1 = Fun_Head;
Password2 = FlashRamTemp[25];
if(Password2>9)
Password2 = Fun_End;
Password3 = FlashRamTemp[26];
if(Password3>9)
Password3 = Fun_Head;
TAL_EXTGroup = TAL_EXT_PORT/8;
if( TAL_EXT_PORT % 8 )
{
TAL_EXTGroup++;
}
Write_FlashPage();
Write_FlashSecter(0x0000);
/**********************************************************/
/*系统组参数表拷贝,地址从0100h开始*/
/**********************************************************/
Write_FlashPage();
Read_FlashSecter(0x0100);
for(i=0;i<7;i++)//会议组最大7组
{
j = i*36;
Meet_Group[i].MeetLen = FlashRamTemp[j++];
Meet_Group[i].MeetHead = FlashRamTemp[j++];
Meet_Group[i].Meetstate = FlashRamTemp[j++];
Meet_Group[i].Num_Member = FlashRamTemp[j++];
for(m=0;m<MAX_Ext;m++)
{
Meet_Group[i].Meet_Member[m] = FlashRamTemp[j++];
}
}
/*
Write_FlashPage();
Read_FlashSecter(0x0200);
for(i=0;i<7;i++)//中继组最大7组
{
j = i*36;
Trk_Group[i].TrkLen = FlashRamTemp[j++];
Trk_Group[i].TrkHead = FlashRamTemp[j++];
Trk_Group[i].Num_Member = FlashRamTemp[j++];
Trk_Group[i].Num_Use = FlashRamTemp[j++];
for(m=0;m<MAX_Ext;m++)
{
Trk_Group[i].Trk_Member[m] = FlashRamTemp[j++];
}
}
*/
Write_FlashPage();
Read_FlashSecter(0x0300);
for(i=0;i<7;i++)//群呼组最大7组
{
j = i*37;
Troop_Param[i].TroopLen= FlashRamTemp[j++];
Troop_Param[i].TroopHead= FlashRamTemp[j++];
Troop_Param[i].Num_Member = FlashRamTemp[j++];
Troop_Param[i].TroopType= FlashRamTemp[j++];
Troop_Param[i].Troopstate= FlashRamTemp[j++];
for(m=0;m<MAX_Ext;m++)
{
Troop_Param[i].Troop_Member[m] = FlashRamTemp[j++];
}
}
/**********************************************************/
/*用户的物理参数表拷贝,地址从1000h开始*/
/**********************************************************/
Write_FlashPage();
Read_FlashSecter(0x1000);
for(i=0;i<TAL_EXT_PORT;i++)
{
Ext_Param[i].Num_H_Logic = FlashRamTemp[i];
}
Write_FlashPage();
Read_FlashSecter(0x1100);
for(i=0;i<TAL_EXT_PORT;i++)
{
Ext_Param[i].Num_L_Logic = FlashRamTemp[i];
}
Write_FlashPage();
Read_FlashSecter(0x1200);
for(i=0;i<TAL_EXT_PORT;i++)
{
Ext_Param[i].Num_Hot_Call = FlashRamTemp[i];
}
Write_FlashPage();
Read_FlashSecter(0x1300);
for(i=0;i<TAL_EXT_PORT;i++)
{
Ext_Param[i].Num_Trans_Call = FlashRamTemp[i];
}
Write_FlashPage();
Read_FlashSecter(0x1400);
for(i=0;i<TAL_EXT_PORT;i++)
{
Ext_Param[i].Num_Busy_Recall = FlashRamTemp[i];
}
Write_FlashPage();
Read_FlashSecter(0x1500);
for(i=0;i<TAL_EXT_PORT;i++)
{
Ext_Param[i].Num_Group_Call = FlashRamTemp[i];
}
Write_FlashPage();
Read_FlashSecter(0x1600);
for(i=0;i<TAL_EXT_PORT;i++)
{
Ext_Param[i].Trk_Group_Right = FlashRamTemp[i];
}
Write_FlashPage();
Read_FlashSecter(0x1700);
for(i=0;i<TAL_EXT_PORT;i++)
{
Ext_Param[i].Trk_Group_Num = FlashRamTemp[i];
}
Write_FlashPage();
Read_FlashSecter(0x1800);
for(i=0;i<TAL_EXT_PORT;i++)
{
Ext_Param[i].Trk_Group_Param = FlashRamTemp[i];
}
Write_FlashPage();
Read_FlashSecter(0x1900);
for(i=0;i<TAL_EXT_PORT;i++)
{
Ext_Param[i].Bit_Param = FlashRamTemp[i];
}
Write_FlashPage();
Read_FlashSecter(0x1a00);
for(i=0;i<TAL_EXT_PORT;i++)
{
Ext_Param[i].Num_Troop_Call= FlashRamTemp[i];
}
/**********************************************************/
/*1000个用户的逻辑号码表拷贝,地址从2000h开始*/
/**********************************************************/
Write_FlashPage();
Read_FlashSecter(0x2000);
j = 0;
for(i=0;i<255;i++)
{
EXT_Number_List[j++] = FlashRamTemp[i];
}
EXT_Number_List[j++] = FlashRamTemp[i];
Write_FlashPage();
Read_FlashSecter(0x2100);
for(i=0;i<255;i++)
{
EXT_Number_List[j++] = FlashRamTemp[i];
}
EXT_Number_List[j++] = FlashRamTemp[i];
Write_FlashPage();
Read_FlashSecter(0x2200);
for(i=0;i<255;i++)
{
EXT_Number_List[j++] = FlashRamTemp[i];
}
EXT_Number_List[j++] = FlashRamTemp[i];
Write_FlashPage();
Read_FlashSecter(0x2300);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -