📄 pwm v30.c
字号:
/**************************************************************文件 名 : KS-2002功能描述 : 两门控制器创建 人 : John修改 人 : Mavinger日 期 :Apr-2004版 本 :V1.0硬件说明 :一.硬件描述 1. MCU采用W78E52B/54B,分别有8K/16KFlash EPROM程序存储器。内置WatchDog 计时器。 2. 采用22.1184MHZ 时钟. 3. 采用RS485通讯接口, 波特率9600,8位数据位,1位停止位,无校验位. 4. 实时时钟为 DS1307. 5. 外部存储器 SRAM 采用两片62256,共64K. 6. 实现两门独立单向检测控制,各有独立出门开关,门磁检测,消防报警功能. 另加防拆报警,防盗报警 7. 实现单门双向检测控制,有出门开关,门磁检测,消防报警,防拆报警,防盗报警功能,其余输入点作为扩充功能使用.(V1.0未能实现)二.驱动描述 1. 电锁和报警继电器 =1 开 =0 关 2. 地址错误/通讯指示灯 =1 灭 =0 亮 3. 蜂鸣器/读卡器指示灯 =1 启动 =0 关闭 4. 功能输入 =0 开启 =1 闭合三.指示说明 1.地址错误指示灯: "亮"表示控制器请求初始化,设置相关参数.或者内部受破坏,需要检测 2.通讯指示灯: "灭"表示与电脑间通讯未连接,"闪烁"表示与电脑间通讯成功,但不能判断是否正常通讯. 四.通讯说明 1. RxTx端加一个反相器 RxTx=1 接收 RxTx=0 发送五.连接说明 1.两门控制器实现单个门的单向检测 2.每门各有一出门按钮开关,门磁检测,火警输入二组三类开关点输入 3.防拆报警与防盗报警开关点输入 4.每门各有一韦根数据连接端口,正常电压由跳线选择+12v/+5V六。修改说明1.2004-09-22 <Mavinger> 修改通讯协议2.2004-09-24 <Mavinger> 修改/调试单门/双门工作模式选择功能3.2004-09-29 <Mavinger> 增加通过键盘读卡器发卡功能(设计中) SRAM定义:================================= 0x005E Limit Type 限制类型 0x005F Software protect 软件保护 0x0060 TrigerTime1 门1开门触发时间 Ox0061 TrigerTime2 门2开门触发时间 Ox0062 ShuntTime1 门1 门开超时时间 Ox0063 ShuntTime2 门2门开超时时间 0x0064-0x0065 MaxCount 最大登录数计数 0x0066-0x0067 Entry1Count 门1登录计数 0x0068-0x0069 Entry2Count 门2登录计数 0x006A-0x006B DuressPIN0 胁持密码1(4位BCD) 0x006C-0x006D DuressPIN1 胁持密码1(4位BCD)(备用) 0x006E-0x006F RecordCP 卡记录计数 0x0070-0x0071 RecordLP 卡记录当前指针 0x0072-0x0073 CardEventFP 卡事件首指针 0x0074-0x0075 CardEventCP 卡事件指针计数 0x0076-0x0077 CardEventLP 卡事件尾指针 0x0078-0x0079 AlarmEventFP 报警事件首指针 0x007A-0x007B AlarmEventCP 报警事件当前指针 0x007C-0x007D AlarmEventLP 报警事件尾指针 0x007E DelayTimer 等待密码输入延时 0x007F SlaveAddress 从机地址 0x0080 SlaveCheckSum 从机地址校验 0x0081 DoorAntiStatus 非法进出(双向检测) 0x0082 Door2AntiStatus 非法进出 (不用) 0x0083-0x0088 OFFset_BackupRD0ID 门1读卡器卡号与密码 返回 0x0089-0x008E OFFset_BackupRD1ID 门2读卡器卡号与密码 返回 0x008F BackupStatus 门状态返回控制标志 0x0090-0x00BF OFFSET_Holiday 假 日 0x00C0-0x012B BackUP 保留备用区 0x012C-0x0133 OFFSET_Serial 控制器序列号与版本号 0x0134-0x01F3 OFFSET_TimeZone 时区 Door1: 0x0134 - 0x0193 Door2: 0x0194 - 0x01F3-------------------------------------------------------------------- 0x01F4-0x09C3 OFFSET_AlarmEvent 报警事件记录,9 bytes,250条 0x733C-0x7357 保留区 (未用) ---------------持卡人:3500 卡事件:2040------------------------------ 0x09C4-0xA027 OFFSET_CardEvent 卡片数据库, 11 bytes,3500条 0xA028-0xFFF7 OFFSET_CardEvent 卡事件记录,12 bytes,2040条 修改记录 : 2004-10-11 <Mavinger> 增加 ROSSLARE_AY_DR19W 密码键盘读卡器 2004-10-14 <Mavinger> 200102V1.11 修改持卡人: 3500 卡事件: 2040 2004-11-27 <Mavinger> 200102V1.12 修改假日错误。 现象:能被8整除的天数单天设置后无效,修改CheckHoliday() 2004-2-23 <Mavinger> 原Winbond W78E54E 转型为STC89C54RD+.修改的部分为: 1.看门狗功能 2.P4附加I/O口地址 3.焊去连接MCU第15脚(PLCC封装)晶振电容CB 4.由于扩展RAM与外部RAM地址相同,需禁止扩展RAM功能 2005-02-25 <Mavinger> 增加ISP/IAP功能函数IAPFunction(),可通过 www.mcu-memory.com提供的ISP软件在线下载. 硬件电路需作相应的改动. 2005-02-27 <Mavinger> 修改密码功能,同时支持HID-5355K(四位数字密码)和ROSSLARE(格式1,格式2)三种格式 的密码键盘读卡器. 默认情况下,支持HID及ROSSLARE(格式1,Rosslare自有格式) 两种 可通过上电时触发P4.1=0 (RxLED指示灯负端)激活 ROSSLARE (格式2),同时关闭支持格式1 HID格式支持保留。 激活后,将记录标志(KeyFlag)保存在外部存储器中,如果被内存清除,需重新设置。 2005-02-28 <Mavinger> 增加GetActivityCount(),GetCardEventCount(),ReadTimeTranPC()函数.原功能函数屏蔽. 2005-03-01 <Mavinger> 修改卡加密码方式操作错误时误事件记录,即卡加密码时,如果先按"#",再刷卡加密码输入,最后#结束,这样 会误判断为"密码开门",原因是按"#"开始,密码开门标志位 UPINOPEN_PINFLAG=1,后面的操作会误判定为 密码开门. 修改位置: 在刷卡输入对卡号进行校验通过后,将标志位设为 UPINOPEN_PINFLAG=0 2005-03-02 <Mavinger> 增加两条指令:IAPFunction() ---ISP/IAP功能函数,ToReset() ---在线冷复位函数 ========================= Function Code: 0x60 CMD:IAPFunction Format: Function Code: 0x61 CMD:ToReset Format: ========================= 2005-03-20 <Mavinger> 修改持卡人双向检测重复登录状态,包括的函数:ID_CompareDoor1(),ID_CompareDoor2(),SetCardStatus() 2005-03-20 <Mavinger> 增加 "门开时间长报警"函数LongToAlarm();,代码0x59 **********************************************************************/#define STC 1#define STCTest 1 #if STC#define STCMCU //STC89C54RD+#define STCIAP #include <reg54STC.h> sfr WDTCR=0xe1; // 看门狗#else #define W78E54B //Winbond78E54B #include <reg54.h> #define ENW 0x80 #define CLRW 0x40 #define W_2S 0x07 #endif#include <absacc.h>#include <INTRINS.h>#include "klas_comii.h"#include "iic.h"/*---------------I/0端口连接----------------*/sbit ADR_LED=P4^0; /*错误指示灯 =0亮 =1灭*/sbit RxLED=P4^1; /*通讯指示灯 =0亮 =1灭*/sbit DoorSel = P4^2; /*选择单门或两门工作*/sbit MemClear = P4^3; /*清除数据存储器数据*//* IAP 功能寄存器定义 */#ifdef STCIAP sfr ISP_DATA = 0x0E2; /* ISP/IAP Flash区数据操作时的数据寄存器*/ sfr ISP_ADDRH = 0x0E3; /* ISP/IAP Flash区读出/写入数据的高8位地址*/ sfr ISP_ADDRL = 0x0E4; /* ISP/IAP Flash区读出/写入数据的低8位地址*/ sfr ISP_CMD = 0x0E5; /* ISP/IAP 操作时的命令模式寄存器,须命令触发寄存器触发方可生效*/ sfr ISP_TRIGE = 0x0E6; /* ISP/IAP 操作时的命令触发寄存器*/ sfr ISP_CONTR = 0x0E7; /* ISP/IAP 控制寄存器*//* ISP功能操作 *//*------ ISP_CMD -------*/#define Standby 0x00#define ReadData 0x01 #define WriteData 0x02#define EraseData 0x03/*------ISP_TRIGE-------*/#define Triger1 0x46#define Triger2 0x0B9 /* 在 ISP_CONTR.7=1时,输入Triger1和Triger2,ISP/IAP生效*/ /*---B7-----B6----B5----B4---B3---B2---B1---B0--------ISPEN--SWBS--SWRST- - - - ----WT2--WT1--WT0-----ISPEN: ISP/IAP功能允许位, =1 允许编程改变Flash,=0,禁止SWBS: =0,从用户主程序区启动 =1,从ISP程序区启动SWRST: =0,不操作 =1,产生软件系统复位,硬件自动清零*//*------ISP_CONTR WaitTime--------*/#define Time5M 0x03 /* ISP_CONTR.2/.1/.0 -->WT2/WT1/WT0 */#define Time10M 0x02 /* 根据不同时钟频率设置CPU的操作等待时间*/#define Time20M 0x01 /* 涉及的操作包括Read/Program/Sector Erase */#define Time40M 0x00/*------ISP_CONTR -----------*/#define ResetToISP 0x60 /* MCU 软复位至ISP程序区*/#define AllowFlash 0x80 /*允许ISP/IAP操作*/#define StartAtISP 0x40 #define OnReset 0x20#endif/*-------------单门/两门模式定义-------*/#define Doorselect 1 // =0 单门模式 =1 单/两门选择模式/*--------------通讯控制代码定义-----------------*/#define STX 0x02 /*开始*/#define ETX 0x03 /*结束*/#define ACK 0x06 /*应答*/#define DLE 0x10 /*下一字符不是通讯字符*/#define NAK 0x15 /*无应答*/#define SYN 0x16 /*同步*//*--------------外部存储器地址定义-----------------*/#define KlasCommandByte XBYTE[0x005F]#define KlasCommandLimit XBYTE[0x005E]#define TrigerTime1 XBYTE[0x0060] /*门1开门时间*/#define TrigerTime2 XBYTE[0x0061] /*门2开门时间*/#define ShuntTime1 XBYTE[0x0062] /*门1开门超时时间*/#define ShuntTime2 XBYTE[0x0063] /*门2开门超时时间*/#define Entry1Count XWORD[0x0033] /*门1进门登录计数*/#define Entry1MSB XBYTE[0x0066]#define Entry1LSB XBYTE[0x0067]#define Entry2Count XWORD[0x0034]#define Entry2MSB XBYTE[0x0068] /*门2进门登录计数*/#define Entry2LSB XBYTE[0x0069]#define DuressPIN0_MSB XBYTE[0x006A] /*四位胁持密码,共2个字节*/#define DuressPIN0_LSB XBYTE[0x006B]#define DuressPIN1_MSB XBYTE[0x006C] /*胁持密码,保留*/#define DuressPIN1_LSB XBYTE[0x006D]#define BackPIN0_MSB XBYTE[0x0087] /*READER0所读卡片的卡密码*/#define BackPIN0_LSB XBYTE[0x0088] #define BackPIN1_MSB XBYTE[0x008D] /*READER1所读卡片的卡密码*/#define BackPIN1_LSB XBYTE[0x008E]#define KeyFlag XBYTE[0x00F0] /*ROSSLARE键盘类型标志位,=0格式1,=1格式2*/#define LongToAlarm1 XBYTE[0x00F1] #define LongToAlarm2 XBYTE[0x00F2] /**************持卡人记录指针**************/#define RecordCP XWORD[0x0037] /*0x006E 卡记录当前指针*/#define RecordLP XWORD[0x0038] /*0x0070 尾指针*/#define RecordLP_MSB XBYTE[0x0070] /*0x0070 尾指针高位*/#define RecordLP_LSB XBYTE[0x0071] /*0x0071 尾指针低位*//**************卡事件指针**************/#define CardEventFP XWORD[0x0039] /*0x0072 首指针*/#define CardEventCP XWORD[0x003A] /*0x0074 当前指针*/#define CardEventLP XWORD[0x003B] /*0x0076 尾指针*//*用于内存存储方式修改*/#define CardEventLP_MSB XBYTE[0x0076] /*尾指针高位*/#define CardEventLP_LSB XBYTE[0x0077] /*尾指针低位*/#define AlarmEventLP_MSB XBYTE[0x007C]#define AlarmEventLP_LSB XBYTE[0x007D] /**************报警事件指针**************/#define AlarmEventFP XWORD[0x003C] /*0x0078-0x0079 报警事件首指针*/#define AlarmEventMSB XBYTE[0x0078] /*报警事件首记录高位*/#define AlarmEventLSB XBYTE[0x0079]#define AlarmEventCP XWORD[0x003D] /*0x007A-0x007B 报警事件当前指针*/#define AlarmEventLP XWORD[0x003E] /*0x007C-0x007D 报警事件尾指针*/#define DelayTimer XBYTE[0x007E]#define SlaveAddress XBYTE[0x007F] /*控制器地址*/#define SlaveCheckSum XBYTE[0x0080] /*地址校验*/#define AntiStatus XBYTE[0x0081] /*非法进出状态*/#define BackupStatus XBYTE[0x008F]/****************控制器序列号与版本号地址定义//Code//**************/#define SerialNo 0x0208 /*控制器序列号与版本号,存于CODE中*/ #define VersionNo 0x020E /****************存储空间地址定义**************/#define OFFSET_Holiday 0x0090 /*假期表首地址*/#define OFFSET_RecordMSB 0x09 /*卡片数据库高位地址*/#define OFFSET_RecordLSB 0x0C4#define OFFSET_Record 0x09C4//#define OFFSET_CardEventMSB 0x73 /*卡事件数据库高位地址*///#define OFFSET_CardEventLSB 0x58 //#define OFFSET_CardEvent 0x7358 #define OFFSET_CardEventMSB 0x0A0 /*卡事件数据库高位地址*/#define OFFSET_CardEventLSB 0x28 #define OFFSET_CardEvent 0x0A028 #define OFFSET_ALARMEvent 0x01F4 /*报警事件数据库首地址*/#define OFFSET_AlarmEventMSB 0x01 #define OFFSET_AlarmEventLSB 0x0F4#define OFFSET_AlarmEvent 0x01F4#define OFFset_BackupRD0ID 0x0083 /*READER0(Door1) 返回信息*/#define OFFset_RD0ID_MSB 0x083#define OFFset_BackupRD1ID 0x0089 /*READER1(Door2) 返回信息*/#define OFFset_RD1ID_MSB 0x089#define OFFSET_TimeZone 0x0134 /*时区表首地址*/ #define OFFSET_TimeZoneMSB 0x01 /*时区表地址高位*/#define OFFSET_TimeZoneLSB 0x34 /*时区表地址低位*/#define OFFSET_Serial 0x012C /*---------------控制器参数----------------*/#define MaxDoor 2 /*最大门数为2门*/#define MaxCard 3500 /*最大存储持卡人数*/#define MaxCardEvent 2040 /*最大卡事件数2040*/#define MaxAlarmEvent 250 /*最大报警事件数*/#define SizeCardEvent 12#define SizeAlarmEvent 8#define RecordSize 11/*--------------控制事件信息代码-----------------*/#define mgCardOnly 0x00#define mgInvalidCard 0x01#define mgNotTimeZoneValid 0x02#define mgInvalidTimeZone 0x03#define mgPIN_Err 0x04#define mgDualCardErr 0x05#define mgEntryErr 0x06#define mgExitErr 0x07#define mgCardExit 0x0A#define mgCardEntry 0x0B#define mgCard_PIN 0x0C#define mgDualCard 0x0D#define mgPIN_Only 0x0E#define mgFreeAccess 0x0F#define mgTamperAlarm 0x30#define mgDuressAlarm 0x31#define mgBatteryFlat 0x32#define mgPowerFail 0x33#define mgRTC_Fail 0x34#define mgHard_Err 0x35#define mgLostConnect 0x36#define mgDoor_Alarm 0x38#define mgDoor_tLong 0x39#define mgDoor_unlock 0x3A#define mgDoor_Release 0x3B#define mgReadCard 0x47#define mgFireAlarm 0x48#define mgStealAlarm 0x50 #define mgDisableDoor 0x60 /*当某持卡人允许登录及禁止登录未设有效,为此门禁开*//*---------------内部函数-----------------*/#ifdef STCMCUvoid WD_Reset(void);#endif#ifdef W78E54Bvoid WD_Reset(void);#endifvoid Initial(void); /*系统初始化*/void ReadTime(void); byte WriteTime(void);void ReadTimeTranPC(void);void ResetSystems(void);bit ClearCardholderTZ(void);//bit GetCardholderValidTZ(void);bit SetCardholderValidTZ(void);bit AddCardholder(void);bit DelCardholder(void);void SortCardholder(void);void ResetCardholder(void);void SetPIN(void);//void GetPIN(void);void ResetPIN(void);void SetDuressPIN(void);void ResetDuressPIN(void);void GetDuressPIN(void);void SetForgive(void);void ClearForgive(void);void reader(void);void Voice(void);void Output(void);void SetEntry(void);void SetExit(void);void GetOpenTime(void);void GetShuntTime(void);void GetRecordSize(void);void GetSerialNo(void);void Timer2(void);void SetSlaveAddress(void);void GetAddress(void);byte CompareSerialNum(void);void AddHoliday(void);void DelHoliday(void);void SetHoliday(void);void ResetHoliday(void);bit SearchCardFunc(void);/*return =0 the card present; 1= not this card*/void SetTimezone(void);void ClearTimezone(void);void ResetTimezone(void);void CheckCardEventCNT(byte message); /*message is messageID */void CheckEventCNT(byte message,byte Door);void CheckAlarmEventCNT(byte door,byte message); /* parameter is message ID *///void CheckAlarmEventCNT(byte message);void ErrorEventVoice(void); /*when message error call this buzer will on */void TriggerOpenDoor1(void); /*When open door call this to open door */void TriggerOpenDoor2(void);void OK_Voice(void);bit SetCardholderTZ(void);//void GetFristCardholder(void);//void GetNextCardholder(void);//void GetLastCardholder(void);void SetAnitPassback(void);void ClearAnitPassback(void);void SetOpenTime(void);void SetShuntTime(void);void OpenDoor(void);void OpenDoorForever(void);void CloseDoor(void);void GetFirstCardEvent(void);void GetNextCardEvent(void);void GetPrevCardEvent(void);void GetCurCardEvent(void);void GetLastCardEvent(void);void ClearCardEvent(void);void StartGetCardID(void);//void GetCardID(void);void EndGetCardID(void);void GetActivityCount(void);void GetCardEventCount(void);void GetFirstActivity(void);void GetNextActivity(void);void GetPrevActivity(void);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -