📄 pwm v30.c
字号:
KSNET_NAK(SlaveADR,RxBuffer[RXB_CMD]); break; case 0x20: if(RxBuffer[RXB_COUNT] == 0) GetDuressPIN(); else KSNET_NAK(SlaveADR,RxBuffer[RXB_CMD]); break; case 0x21: if(RxBuffer[RXB_COUNT] == 0) ResetDuressPIN(); else KSNET_NAK(SlaveADR,RxBuffer[RXB_CMD]); break; case 0x22: if(RxBuffer[RXB_COUNT] == 5) SetForgive(); else KSNET_NAK(SlaveADR,RxBuffer[RXB_CMD]); break; case 0x23: if(RxBuffer[RXB_COUNT] == 5) ClearForgive(); else KSNET_NAK(SlaveADR,RxBuffer[RXB_CMD]); break; case 0x24: if(RxBuffer[RXB_COUNT] == 5) SetEntry(); else KSNET_NAK(SlaveADR,RxBuffer[RXB_CMD]); break; case 0x25: if(RxBuffer[RXB_COUNT] == 5) SetExit(); else KSNET_NAK(SlaveADR,RxBuffer[RXB_CMD]); break; case 0x26: if(RxBuffer[RXB_COUNT] == 1) SetAnitPassback(); else KSNET_NAK(SlaveADR,RxBuffer[RXB_CMD]); break; case 0x27: if(RxBuffer[RXB_COUNT] == 1) ClearAnitPassback(); else KSNET_NAK(SlaveADR,RxBuffer[RXB_CMD]); break; case 0x28: if(RxBuffer[RXB_COUNT] == 2) SetOpenTime(); else KSNET_NAK(SlaveADR,RxBuffer[RXB_CMD]); break; case 0x29: if(RxBuffer[RXB_COUNT] == 0) GetOpenTime(); else KSNET_NAK(SlaveADR,RxBuffer[RXB_CMD]); break; case 0x2a: if(RxBuffer[RXB_COUNT] == 2) SetShuntTime(); else KSNET_NAK(SlaveADR,RxBuffer[RXB_CMD]); break; case 0x2b: if(RxBuffer[RXB_COUNT] == 0) GetShuntTime(); else KSNET_NAK(SlaveADR,RxBuffer[RXB_CMD]); break; case 0x2c: if(RxBuffer[RXB_COUNT] == 1) OpenDoor(); else KSNET_NAK(SlaveADR,RxBuffer[RXB_CMD]); break; case 0x2d: if(RxBuffer[RXB_COUNT] == 1) { #if STCTest IAPFunction(); #endif //测试 IAP功能 OpenDoorForever(); } else KSNET_NAK(SlaveADR,RxBuffer[RXB_CMD]); break; case 0x2e: if(RxBuffer[RXB_COUNT] == 1) CloseDoor(); else KSNET_NAK(SlaveADR,RxBuffer[RXB_CMD]); break; case 0x2f: GetCardEventCount(); break; case 0x30: if(RxBuffer[RXB_COUNT] == 0) GetFirstCardEvent(); else KSNET_NAK(SlaveADR,RxBuffer[RXB_CMD]); break; case 0x31: if(RxBuffer[RXB_COUNT] == 0) GetNextCardEvent(); else KSNET_NAK(SlaveADR,RxBuffer[RXB_CMD]); break; case 0x32: if(RxBuffer[RXB_COUNT] == 0) GetPrevCardEvent(); else KSNET_NAK(SlaveADR,RxBuffer[RXB_CMD]); break; case 0x33: if(RxBuffer[RXB_COUNT] == 0) GetCurCardEvent(); else KSNET_NAK(SlaveADR,RxBuffer[RXB_CMD]); break; case 0x34: if(RxBuffer[RXB_COUNT] == 0) GetLastCardEvent(); else KSNET_NAK(SlaveADR,RxBuffer[RXB_CMD]); break; case 0x35: if(RxBuffer[RXB_COUNT] == 0) ClearCardEvent(); else KSNET_NAK(SlaveADR,RxBuffer[RXB_CMD]); break; case 0x36: if(RxBuffer[RXB_COUNT] == 1) StartGetCardID(); else KSNET_NAK(SlaveADR,RxBuffer[RXB_CMD]); break; /*case 0x37: GetCardID(); break; */ case 0x38: if(RxBuffer[RXB_COUNT] == 1) EndGetCardID(); else KSNET_NAK(SlaveADR,RxBuffer[RXB_CMD]); break; case 0x39: GetActivityCount(); break; case 0x3a: if(RxBuffer[RXB_COUNT] == 0) GetFirstActivity(); else KSNET_NAK(SlaveADR,RxBuffer[RXB_CMD]); break; case 0x3b: if(RxBuffer[RXB_COUNT] == 0) GetNextActivity(); else KSNET_NAK(SlaveADR,RxBuffer[RXB_CMD]); break; case 0x3c: if(RxBuffer[RXB_COUNT] == 0) GetPrevActivity(); else KSNET_NAK(SlaveADR,RxBuffer[RXB_CMD]); break; case 0x3d: if(RxBuffer[RXB_COUNT] == 0) GetCurActivity(); else KSNET_NAK(SlaveADR,RxBuffer[RXB_CMD]); break; case 0x3e: if(RxBuffer[RXB_COUNT] == 0) GetLastActivity(); else KSNET_NAK(SlaveADR,RxBuffer[RXB_CMD]); break; case 0x3f: if(RxBuffer[RXB_COUNT] == 0) ClearActivity(); else KSNET_NAK(SlaveADR,RxBuffer[RXB_CMD]); break; case 0x40: if(RxBuffer[RXB_COUNT] == 0) GetStatus(); else KSNET_NAK(SlaveADR,RxBuffer[RXB_CMD]); break; case 0x51: if(RxBuffer[RXB_COUNT] == 0) ResetAllAlarm(); else KSNET_NAK(SlaveADR,RxBuffer[RXB_CMD]); break; case 0x52: if(RxBuffer[RXB_COUNT] == 1) ResetDoorAlarm(); else KSNET_NAK(SlaveADR,RxBuffer[RXB_CMD]); break; case 0x53: if(RxBuffer[RXB_COUNT] == 2) ResetAlarm(); else KSNET_NAK(SlaveADR,RxBuffer[RXB_CMD]); break; case 0x59: if(RxBuffer[RXB_COUNT]==2) LongToAlarm(); else KSNET_NAK(SlaveADR,RxBuffer[RXB_CMD]); break; case 0x60: if(RxBuffer[RXB_COUNT] == 1) { #ifdef STCIAP IAPFunction();//测试 IAP功能 #endif _nop_(); } else KSNET_NAK(SlaveADR,RxBuffer[RXB_CMD]); break; case 0x61: if(RxBuffer[RXB_COUNT] == 1) { #ifdef STCIAP ToReset(); #endif _nop_(); } else KSNET_NAK(SlaveADR,RxBuffer[RXB_CMD]); break; } //end of "SWITCH" } ES=1; DecodeFlag=0; } if(RTC_Err) /*如实时时钟无错误,设秒-分-时-星期-日-月-年为默认值0*/ { Time[0]=0; Time[1]=0; Time[2]=0; Time[3]=0; Time[4]=0; Time[5]=0; Time[6]=0; } }}void Initial(void){ #ifdef STCMCU WDTCR = 0x34; #endif #ifdef W78E54B WDTC &= 0x0F8; WDTC |= W_2S; /* Set prescaler timer for arround 2 seconds. */ WD_Reset(); /* Reset Watchdog. */ WDTC |= ENW; /* Enable watchdog timer. */ #endif #ifdef STCMCU AUXR=0x02; /* bit 1: =1 禁止内部扩展Extra RAM,防止与外部SRAM地址冲突*/ /* bit 0: =1 ALE脚仅在MOVX or MOVC 指令时才输出信号,降低外界的EMI干扰*/ #endif IE=0x37; PX1=1; PX0=1; TH0=0x3c; TL0=0x60; TH2=0XFF; P3=0xDF; /*11011111*/ IT0=1; IT1=1; TR0 =1; /*开启T0*/ LEDSecCNT=5; /* 5 sec */ MinuteCNT=10; /* 10 sec */ MinuteUnitCNT=60; SecCNT=28; HourUnitCNT=60; DayUnitCNT=24; RxTx_CNT=10; SlaveADR=SlaveAddress; ROS_Flag=KeyFlag; Door1_CloseFlag=1; Door2_CloseFlag=1; Door1_LongToAlarm=LongToAlarm1; Door2_LongToAlarm=LongToAlarm2; if(CBYTE[SerialNo] != XBYTE[OFFSET_Serial]) InitialSystems(); /*校验外部存储器的序列号与控制器序列号是否相等*/ else if(CBYTE[SerialNo+1] != XBYTE[OFFSET_Serial+1]) InitialSystems(); /*校验外部存储器的序列号与控制器序列号是否相等*/ else if(CBYTE[SerialNo+2] != XBYTE[OFFSET_Serial+2]) InitialSystems(); else if(CBYTE[SerialNo+3] != XBYTE[OFFSET_Serial+3]) InitialSystems(); else if(CBYTE[SerialNo+4] != XBYTE[OFFSET_Serial+4]) InitialSystems(); else if(CBYTE[SerialNo+5] != XBYTE[OFFSET_Serial+5]) InitialSystems(); else if(CBYTE[SerialNo+6] != XBYTE[OFFSET_Serial+6]) InitialSystems(); /*校验外部存储器的序列号与控制器序列号是否相等*/ else if(SlaveAddress != SlaveCheckSum) InitialSystems(); Status = BackupStatus; EA = 1; /*中断开启*/ }void InitialSystems(void){ byte i; word j; SlaveAddress=0; SlaveCheckSum=0; SlaveADR=0; KeyFlag=0; ROS_Flag=0; ADR_LED=0; /*地址错误灯"亮" */ for(j=0x00;j<=0x012B;j++) /*控制器参数与假日初始化*/ { XBYTE[j]=0; if(XBYTE[j]) Hardware_Err=1; } i=0; for(;i<=0x06;i++) { XBYTE[OFFSET_Serial+i]=CBYTE[SerialNo+i]; } i=0; for(;i<=192;i++) { XBYTE[OFFSET_TimeZone+i]=0; if(XBYTE[i]) Hardware_Err=1; } DuressPIN0_MSB=0xFF; /*胁持密码*/ DuressPIN0_LSB=0xFF; DuressPIN1_MSB=0xFF; /*胁持密码(保留)*/ DuressPIN1_LSB=0xFF; ShuntTime1=10; /*门开超时时间默认值为10秒*/ ShuntTime2=10; TrigerTime1=5; /*开门时间默认值为5秒*/ TrigerTime2=5; SecCNT=28; MinuteUnitCNT=60; HourUnitCNT=60; DayUnitCNT=24; Status = BackupStatus = 0;}/*-----------------------------------功能描述:清除内存数据,恢复原始状态硬件连接:P4.3 (INT2) 低脉冲触发函数组成:全局变量:输入:返回:-----------------------------------*/void ClearMem(void){ word i; for(i=0;i<0xFFFF;i++) { XBYTE[i]=0x55; if(XBYTE[i]!=0x55) { ADR_LED =0; while(1) { RxLED=0; delay(100); RxLED=~RxLED; delay(100); } } } for(i=0;i<0xFFFF;i++) { XBYTE[i]=0xAA; if(XBYTE[i]!=0xAA) { RxLED=0; while(1) { ADR_LED=0; delay(250); ADR_LED=~ADR_LED; delay(50); } } } for(i=0;i<0xFFFF;i++) { XBYTE[i]=0; if(XBYTE[i]) { while(1) { ADR_LED=0; RxLED=0; delay(150); ADR_LED=~ADR_LED; RxLED=~RxLED; delay(50); } } } TestFlag=1;}/*-------------------------------------------功能描述:T0中断扫描函数函数组成:extern bit CheckParity(byte SelectRD,byte BitCNT) 奇偶校验(SelectRD门位数,BitCNT 所在Reader数据位数)全局变量:RD0_Flag Reader0 / RD1_Flag Reader0/Reader1数据读取标志 Rd0Select / Rd1Select 门1/门2 开门方式选择变量 RD0_CNT / RD1_CNT Reader0/Reader1读取数据位数 RD0_Delay / RD1_Delay输入:返回:说明:T1进行15ms 中断扫描. ---------------------------------------------*/void Timer0(void) reentrant interrupt 1 using 1 { TH0=0x94; /* TH0= x94 TL0=00 1秒66.6次中断,平均一次15ms*/ KSNET_RXTIMEOUT(); BackupStatus=Status; /* 事件状态备份,与当前状态作比较*/ FunctionStatus |=0x00; /*门1 读卡器*/ if(RD0_Flag) /*读卡器读取数据标志*/ { RD0_Delay--; if(RD0_Delay == 0) { EX0=0; /*外部中断INT0 禁止*/ switch(Rd0Select) { case 0: /*单卡识别*/ if(RD0_CNT==4) { HID_OPEN(); /*HID 数据格式使用四位二进制*/ } else if(RD0_CNT==6) { if(ROS_Flag) HID_Six(); else { if(!CheckParity((byte)RD0,RD0_CNT)) UPINOPEN();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -