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