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

📄 main.c

📁 采用MPS430控制的项目
💻 C
字号:
#define   _Global_
#include  "..\Inc\includes.h"
extern TA0_ISR(void);
/***************************************************************************
主程序
****************************************************************************/
void main(void)
{
	CPU_rest();	RS4850
	//SendDefine(0x84);		//主动上传检测量定义表
	//SendAllAdr(0x87);		//主动上传智能设备地址
	ALARM0
	while(1)
	{	
		if(Task & Read_Key)				Key_Deal();
		if(Task & CaiJi_Data)			CaiJiData();
		if(Task & Read_OutDoor)			Read_Door(CARD_OUT);
		if(Task & Read_InDoor)			Read_Door(CARD_IN);
		if(Task & UpSend_Data)			ShangChuanData();			//定时上传数据				
		if(Task & Save_Data)			SaveData();
		if(DoorAlarm !=0 )			    DealDoorAlarm();
		if(STR1_Re_flag==1)				DealUpData_Com1();			//处理COM1,来自上位机的消息
		if(STR0_Re_flag==1)				DealDownData_Com0();		//处理COM0,同智能设备间的数据交换
		if(Task & Com1OrderToCom0)
		{
			if(Com0Busy==0)
			{
				SendStrlenToCom0(STR1_Rec,STR1_len);
				STR1_len = 0;
				Com0Busy = LONGCOMDELAY;
				STR1_Re_flag = 0;
				Task &=~ Com1OrderToCom0;
			}
		}
		if(Task & Com0DataToCom1)
		{
			if(STR1_Re_flag==0)
			{
				SendStrlenToCom1(STR0_Rec,STR0_len);
				STR0_len = 0;
				STR0_Re_flag = 0;
				Com0Busy = 0;
				Task &=~ Com0DataToCom1;
			}
		}
	}
}

/******************************************************************************
			定时器0中断--用于模拟串口,和语音芯片通信
******************************************************************************/
#pragma vector= TIMERA0_VECTOR  
__interrupt void Timer_A0 (void)
{
	TA0_ISR();
}
/******************************************************************************
					Timer_B 0.25秒钟定时器中断
******************************************************************************/
#pragma vector= TIMERB0_VECTOR 
__interrupt void Timer_B0 (void)
{	
static Uint16 Count=0;
	Task |= Read_Key;
	Count += 1;

	if(Com0Busy >= 1)	Com0Busy -= 1;
	else if((Task&Com1OrderToCom0)==0)
	{
		if((Count%2)==0)	Task |= Read_OutDoor;	else Task |= Read_InDoor;
	}
	
	if(Count >= 4)		// 1 秒
	{
		Count = 0;
		Task |= CaiJi_Data;
		if(Time_interval != 0)			//需要定时上传数据
		{
			Time_Count += 1;
			if(Time_Count >= Time_interval)
			{
				Task |= UpSend_Data;
				Time_Count = 0;
			}
		}
		
		if(OpenDoorDelay!=0)
		{
			OpenDoorDelay -= 1;
			if(OpenDoorDelay==0)
			{
				if(DISam_Value[DILOCK] == 1)//门锁--锁状态
				{
					DoorAlarm |= 0x01;
					DoorAlarm_ID = 0x01;
				}
				else
				{
					CtrlDoor(CLOSE);
					CloseDoorDelay = CLOSEDOORDELAY;
				}
			}
		}
		else if(CloseDoorDelay!=0)
		{
			CloseDoorDelay -= 1;
			if(CloseDoorDelay==0 && DISam_Value[DILOCK] == 0)//关门失败--超时未闭合
			{	
				DoorAlarm |= 0x02;
				DoorAlarm_ID=0x02;
			}
		}
		else if(DISam_Value[DILOCK] == 1)//门锁上,权限自动清除
			HaveDoorRight = 0;
	}
}
/************************************************************************
				    串口0接收中断--和智能设备间的通讯
*************************************************************************/
#pragma vector= UART0RX_VECTOR
__interrupt void UART0RX(void)
{
/*
Uint8 Buf;
	Buf = RXBUF0;
	STR0_Rec[STR0_len] = Buf;
	STR0_len += 1;
	if(Buf==0x0D)
	{
		STR0_Re_flag=Busy;
		LastBuf = 0;
	}
*/

Uint8 Buf;
	if(STR0_Re_flag != 0)	return;		//上次数据未处理完不接收数据
	
	Buf = RXBUF0;
	if(Com0_flag==0)	
	{
		if(Buf==SOI)	{Com0_flag = 1; STR0_Rec[0]=Buf; STR0_len=1;LastBuf = 0;}
		else if(Buf==0xBB) LastBuf=Buf;
		else if(Buf==0xFF) 
		{
			if(LastBuf==0xBB)
			{
				LastBuf = 1;
				Com0_flag = 1;
				STR0_Rec[0]=0xBB;
				STR0_Rec[1]=0xFF;
				STR0_Rec[3]=0x10;
				STR0_len = 2;
			}
		}
	}
	else
	{
		STR0_Rec[STR0_len]=Buf;
		STR0_len += 1;
		if(LastBuf==0)
		{
			if(Buf==EOI)	
			{
				Com0_flag = 0;
				STR0_Re_flag=Busy;
			}
		}
		else if(LastBuf==1)//来自于门禁
		{
			if(STR0_len>=(STR0_Rec[3]+5))	{Com0_flag = 0;STR0_Re_flag=Busy;}
		}
	}
}
/****************************************************************************
					串口1接收中断--和计算机之间的通讯
****************************************************************************/
#pragma vector= UART1RX_VECTOR
__interrupt void UART1RX(void)
{
	Uint8 Buf;
	
	if(STR1_Re_flag != 0)  return;		//上次收到的数据还未处理完毕不能再重新接收数据
	
	Buf = RXBUF1;
	if(Com1_flag==0)
 	{
 		if(Buf==SOI)	{Com1_flag=1; STR1_Rec[0]=Buf; STR1_len=1;}
 	}
	else
	{
  		STR1_Rec[STR1_len]=Buf;
  		STR1_len += 1;
  		if(Buf==EOI)	{Com1_flag=0; STR1_Re_flag=Busy;}
	}
}
//////////////////////////////////文件结尾/////////////////////////////////////////

⌨️ 快捷键说明

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