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

📄 intinit.c

📁 采用MPS430控制的项目
💻 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 + -