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

📄 pwm v30.c

📁 用STC单片机开发的简单脉冲发生器,用来测试步进驱动器.
💻 C
📖 第 1 页 / 共 5 页
字号:
	        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 + -