📄 intinit.c
字号:
#define _INTINIT_
#include "..\Inc\includes.h"
extern Init_Sys(void);
/*********************************************************************************************************
* 函数名称: CPU_rest
*
* 功能描述: 初始化液晶变量及系统寄存器等
*
* 入口参数: 无
*
* 出口参数: 无
*
* 全局变量: 无
*
* 调用模块: intsys();clear(); ON_face(); ON_1_face();AD_rest(); Variable_rest();TimerA_init();Serial_init1();
*
* 作 者: Cache
* 创建时间: 2006年1月16日
********************************************************************************************************/
void CPU_rest(void)
{
Uint16 k;
WDTCTL = WDTPW + WDTHOLD;
for(k=0; k<50000; k++) ;
intsys(); // LCD 初始化
clear(); // 清屏
LCD_EL1; // 开背光
Init_Sys();
_EINT();
sound_txt("东电通信连接未来");
Variable_rest();
Time_rest(); //时钟芯片初始化
AD_rest();
Serial_init0(); //串口初始化
ON_face(); // 标志及东电通信连接未来
//GetDeviceAdr(); //搜索智能设备地址
ON_1_face(); // 显示主界面
TimerB_init();
Serial_init1(); //串口初始化
_EINT();
}
/*********************************************************************************************************
* 函数名称:Variable_rest
*
* 功能描述: 变量初始化
*
* 入口参数: 无
*
* 出口参数: 无
*
* 全局变量: Alarm_Sum,AlarmAD_Data等等
*
* 调用模块:无
*
* 作 者: Cache
* 创建时间: 2006年1月16日
********************************************************************************************************/
void Variable_rest(void)
{
Uint16 i,k;
for(k=0; k<16; k++) //读模拟通道检测代码
{
Set_temp = II3RD(AT24C256,k);
if(Set_temp==0xff) Set_temp = 0x20;
ADSam_Code[k] = Set_temp;
}
for(k=0; k<16; k++) //读开关量输入通道检测代码
{
Set_temp = II3RD(AT24C256,k+16);
if(Set_temp==0xff) Set_temp = 0x20;
DISam_Code[k] = Set_temp;
}
for(k=0; k<8; k++) //读开关量输出通道检测代码
{
Set_temp = II3RD(AT24C256,k+32);
if(Set_temp==0xff) Set_temp = 0x20;
DOSam_Code[k] = Set_temp;
}
for(i=0; i<3; i++) //读上限、下限、零点
{
for(k=0; k<16; k++)
{
Set_temp = (II3RD(AT24C256,I2C_UP+32*i+k*2)<<8);
Set_temp += II3RD(AT24C256,I2C_UP+32*i+k*2+1);
if(Set_temp == 0xffff)
{
if(i==0) Set_temp = 1000;
else if(i==1) Set_temp = 0;
else if(i==2) Set_temp = Zero;
}
ADAlarm_para[i][k] = Set_temp;
}
}
for(i=0; i<MaxCard; i++) //读具有权限的门禁卡号
{
for(k=0; k<5; k++)
CardNo[i][k] = II3RD(AT24C256,I2C_Card+i*5+k);
}
for(k=0; k<16; k++)
Set_array[k] = II3RD(AT24C256,I2C_IP+k); //读IP 端口
Yuan_IP = Set_array[0]*0x1000000 + Set_array[1]*0x10000 + Set_array[2]*0x100 + Set_array[3];
Yuan_dk = Set_array[4]*0x100 + Set_array[5];
Bendi_IP = Set_array[8]*0x1000000 + Set_array[9]*0x10000 + Set_array[10]*0x100 + Set_array[11];
Bendi_dk = Set_array[12]*0x100 + Set_array[13];
for(k=0; k<6; k++) //读密码
MIMA[k] = II3RD(AT24C256,I2C_MIMA+k);
Time_interval = II3RD(AT24C256,I2C_TongXunTime)*256; //读上传时间间隔
Time_interval += II3RD(AT24C256,I2C_TongXunTime+1);
if(Time_interval==0xffff) Time_interval = 0;
Alarm_Sum = II3RD(AT24C256,I2C_Alarm_Sum); //读历史报警总数
Alarm_Now = II3RD(AT24C256,I2C_Alarm_Sum+1); //当前报警索引
if(Alarm_Sum==0xff) Alarm_Sum = 0;
Alarm_Now = 0;
Alarm_Sum = 0;
k = II3RD(AT24C256,I2C_OldData_Sum); //读历史数据
k = (k<<8) + II3RD(AT24C256,I2C_OldData_Sum+1);
if(k > I2C_MaxOldData) OldData_Sum = 0;else OldData_Sum = k;
k = II3RD(AT24C256,I2C_OldData_Sum+2);
k = (k<<8) + II3RD(AT24C256,I2C_OldData_Sum+3);
if(k>I2C_MaxOldData) OldData_Now = 0; else OldData_Now = k;
Time_rd_data();
LastSaveDataTime[0] = Time_now[3];
LastSaveDataTime[1] = Time_now[4];
LastSaveDataTime[2] = Time_now[5];
for(k=0; k<16; k++)
{
ADMax[k] = 0;
ADMin[k] = 0xffff;
}
OldData_Now = 0;
OldData_Sum = 0;
Task = 0;
STR0_Re_flag=0; //接收数据标志清零
STR1_Re_flag=0;
STR0_len = 0;
STR1_len = 0;
DATAFLAG = 0; //通讯标记位
Adr_sum=0; //智能设备个数初始设为0
OutStates = 0x00ff; //开关量输出设置为全关
CtrlDoor(CLOSE); //上电后,自动关门
CloseDoorDelay = CLOSEDOORDELAY;
OpenDoorDelay = 0;
HaveDoorRight = 0;
DoorOK = 0; //解网
Com0Busy = 0;
DoorAlarm = 0;
}
/*********************************************************************************************************
* 函数名称:TimerB_init
*
* 功能描述:定时器B初始化
*
* 说明:
*
********************************************************************************************************/
void TimerB_init(void)
{
WDTCTL = WDTPW + WDTHOLD;
TBCTL = TBSSEL0 + TBCLR; //选择ACLK,清除TAR
TBCCTL0 = CCIE; //打开中断
TBCCR0 = CCR0_Const; //32768 1 秒定时
TBCTL |= MC0; //增计数方式
}
/*********************************************************************************************************
* 函数名称: Serial_init1
*
* 功能描述: 串口1寄存器初始化---同计算机相连
*
* 入口参数: 无
*
* 出口参数: 无
*
* 全局变量: 无
*
* 调用模块: 无
*
* 作 者: Cache
* 创建时间: 2006年1月16日
********************************************************************************************************/
void Serial_init1()
{
UCTL1 &= ~SWRST; //SWRST复位,USART允许
UCTL1 = 0x10; //8位数据位,1位停止位,无校验
UBR01 = 0x03;
UBR11=0x00; //使用32KHZ晶振时,波特率为9600
UMCTL1=0x4A; //位调整
UTCTL1=0x10; //选定ACLK(32KHZ晶振)为时钟源
ME2 = UTXE1 + URXE1;
P3SEL |= 0xc0; //P3.6,P3.7被UART1发送模块占用
P3DIR |= 0x40; //p3.6输出,p3.7输入
P3DIR &= 0x7f;
IE2 |= URXE1; //接收中断允许
}
/*********************************************************************************************************
* 函数名称: Serial_init0
*
* 功能描述: 串口0寄存器初始化---同智能设备相连
*
*
* 作 者: Cache
* 创建时间: 2006年1月16日
********************************************************************************************************/
void Serial_init0()
{
UCTL0 &= ~SWRST; //SWRST复位,USART允许
UCTL0=0x10; //8位数据位,1位停止位,无校验
UBR00=0x03;
UBR10=0x00; //使用32KHZ晶振时,波特率为9600
UMCTL0=0x4A; //位调整
UTCTL0=0x10; //选定ACLK(32KHZ晶振)为时钟源
ME1 = UTXE0 + URXE0; // 允许发送和接受
P3SEL |= 0x30; // UART0
P3DIR |= 0x10; // TXD----P3.4----Output
P3DIR &= 0xdf; // RXD----P3.5----Input
IE1|=URXE0; //接收中断允许
}
//文件结尾
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -