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

📄 rs485_pc.s

📁 电梯楼层采集器代码
💻 S
📖 第 1 页 / 共 4 页
字号:
	.dbline -2
L141:
	.dbline 0 ; func end
	adiw R28,1
	ld R21,y+
	ld R20,y+
	ret
	.dbsym r p_buf 20 pS[StructOfProtocol]
	.dbend
	.dbfunc e GET_UNIT_STATUS _GET_UNIT_STATUS fV
;  communication -> R16,R17
;          p_buf -> R18,R19
	.even
_GET_UNIT_STATUS::
	.dbline -1
	.dbline 472
;  	  CommandReply(RESP_INVALID_DATA);
; }
; //------------------------------------------------------------------------------
; //------------------------------------------------------------------------------
;  /*取控制器状态*/
; void GET_UNIT_STATUS(void)
; {
	.dbline 475
;  struct StructOfProtocol *p_buf;
;  struct data *communication;
;  p_buf = (struct StructOfProtocol *)Buffer485;
	ldi R18,<_Buffer485
	ldi R19,>_Buffer485
	.dbline 476
;  if (p_buf->Address == Device_Address)  /*本机地址响应*/
	lds R2,_Device_Address
	movw R30,R18
	ldd R3,z+0
	cp R3,R2
	brne L149
X62:
	.dbline 477
;  {
	.dbline 478
;   if (p_buf->Length == 1)   /*接收数据包长度确认*/
	ldd R24,z+1
	ldd R25,z+2
	cpi R24,1
	ldi R26,0
	cpc R25,R26
	brne L151
X63:
	.dbline 479
;   {
	.dbline 480
;     p_buf->Length = 4;
	ldi R24,4
	ldi R25,0
	std z+2,R25
	std z+1,R24
	.dbline 481
;     p_buf->Data[0] = WorkingMode;        /*工作模式状态*/
	lds R2,_WorkingMode
	std z+4,R2
	.dbline 482
;     p_buf->Data[1] = StopSwitchStatus;   /*停止开关状态*/
	lds R2,_StopSwitchStatus
	std z+5,R2
	.dbline 483
;     p_buf->Data[2] = FireSwitchStatus;   /*火警开关状态*/
	lds R2,_FireSwitchStatus
	std z+6,R2
	.dbline 484
;   	communication->pc_txd = 1;
	ldi R24,1
	movw R30,R16
	std z+1,R24
	.dbline 485
;   }
L151:
	.dbline 486
;  }
L149:
	.dbline -2
L148:
	.dbline 0 ; func end
	ret
	.dbsym r communication 16 pS[data]
	.dbsym r p_buf 18 pS[StructOfProtocol]
	.dbend
	.dbfunc e SET_UNIT_STATUS _SET_UNIT_STATUS fV
	.even
_SET_UNIT_STATUS::
	.dbline -1
	.dbline 491
; }
; //------------------------------------------------------------------------------
;  /*设置控制器状态*/
; void SET_UNIT_STATUS(void)
; {
	.dbline -2
L153:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e GET_EVENT _GET_EVENT fV
	.even
_GET_EVENT::
	.dbline -1
	.dbline 550
; /*
;  struct StructOfProtocol *p_buf;
;  struct Device51_StructOfProtocol *C51_buf;
;  struct ControlStream *p_stream;
;  p_buf = (struct StructOfProtocol *)Buffer485;
;  C51_buf = (struct Device51_StructOfProtocol *)Buffer485;
;  if (p_buf->Length == 3)                      //接收数据包长度确认
;  {
;    p_stream = (struct ControlStream *)p_buf->Data;
;    if (!p_stream->Device_Address)             //复位控制器
;    {
;       if (!p_stream->Status)
;       {
;         b_reset = 1;
;         EventRecord(MSG_WARM_RESET);
;         if (p_buf->Address != 0xff)   
; 		   CommandReply(RESP_CMD_OK);
;       }
;       else if (p_stream->Status == 1)
;       {
;         CleanDatabase();
;         EventRecord(MSG_COLD_RESET);
;         b_reset = 1;
;       }
;    }
;    else if (p_stream->Address == 1)         //设置工作模式
;    {
;      if (p_stream->Status == SLEEP_MODE ||
;       p_stream->Status == UNLOCK_MODE || p_stream->Status == SAFETY_MODE)
;      {
;         tmp = WorkingMode & ~MANUAL;
;         WorkingMode = p_stream->Status | MANUAL;
;         if (!(tmp & MANUAL) || p_stream->Status != (tmp & 0x0f))
;         {
;           EventRecord(MSG_WORKING_MODE_CHANGED);
;           if (p_stream->Status == UNLOCK_MODE)
;           {
;             if (SystemConfig.FirstKeyUnlock)    b_unlock = 0;
;             else        b_unlock = 1;
;           }
;         }
;       }
;       else    WorkingMode = MANUAL;
;       b_minute = 1;
;       if (p_buf->Address != 0xff)    
; 	  	  CommandReply(RESP_CMD_OK);
;    }
;    else if (TEST && p_buf->Address != 0xff) 
;    		CommandReply(RESP_INVALID_DATA);
;   }
;   else if (TEST && p_buf->Address != 0xff)    
;   	CommandReply(RESP_INVALID_DATA);
; 	*/
; }
; //------------------------------------------------------------------------------
; //------------------------------------------------------------------------------
; /*取控制器历史事件*/ 
; void GET_EVENT(void)
; {
	.dbline -2
L154:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e communication_with_pc _communication_with_pc fV
;          p_buf -> R20,R21
;  communication -> R22,R23
	.even
_communication_with_pc::
	xcall push_xgsetF000
	.dbline -1
	.dbline 606
; 
; /*
; 
;   	 		if (p_buf->Address == Address)
;             {
;             if (p_buf->Length == 3)                                     //接收数据包长度确认
;               {
;               tmp = p_buf->Data[0];                                     //取删除记录数
;               if (tmp == 0xff)                                          //删除所有记录
;                 {
;                 Record.TopPoint = Record.BottomPoint = Record.Overflow = 0;
;                 SequentialWrite((unsigned char *)&Record,OFFSET_RECORD_POINT,sizeof(Record));
;                 }
;               else if (p_buf->Data[1] == (unsigned char)Record.BottomPoint)//数据包标志比较
;                 {
;                 count = GetRecordNumber();                              //计算现有记录数
;                 if (tmp)                                                //删除部分记录
;                   {
;                   if (tmp <= count && tmp <= ((sizeof(Buffer485) - 10) / sizeof(struct StructOfRecord)))
;                     {
;                     count = tmp + Record.BottomPoint;
;                     if (count < MAX_RECORD_NUMBER)    Record.BottomPoint = count;
;                     else    Record.BottomPoint = count - MAX_RECORD_NUMBER;
;                     Record.Overflow = 0;
;                     SequentialWrite((unsigned char *)&Record,OFFSET_RECORD_POINT,sizeof(Record));
;                     }
;                   else if (TEST)                                        //删除记录数据异常
;                     {
;                     CommandReply(RESP_INVALID_DATA);
;                     break;
;                     }
;                   }
;                 }
;                 count = GetRecordNumber();                                //计算删除后的记录数
;                 if (count)
;                 {
;                 if (count > ((sizeof(Buffer485) - 10) / sizeof(struct StructOfRecord)))
;                   count = (sizeof(Buffer485) - 10) / sizeof(struct StructOfRecord);
;                 count *= sizeof(struct StructOfRecord);
;                 p_buf->Length = count + 2;
;                 p_buf->Data[0] = (unsigned char)Record.BottomPoint;     //回应包号
;                 point = OFFSET_EVENT_RECORD + Record.BottomPoint * sizeof(struct StructOfRecord);
;                 MemoryRead((unsigned char *)&p_buf->Data[1],point,count);
;                 b_rts = 1;                                              //置发送请求标志
;                 }
;               else          CommandReply(RESP_NULL);                    //无记录数据
;               }
;             else if(TEST)     CommandReply(RESP_INVALID_DATA);          //包长度异常
;             }
; 
; 			*/
; }
; //------------------------------------------------------------------------------
; //------------------------------------------------------------------------------
; void communication_with_pc(void)
; { 
	.dbline 609
;   struct StructOfProtocol *p_buf;
;   struct data *communication;
;   p_buf = (struct StructOfProtocol *)Buffer485;
	ldi R20,<_Buffer485
	ldi R21,>_Buffer485
	.dbline 610
;   if(communication->pc_txd)
	movw R30,R22
	ldd R2,z+1
	tst R2
	breq L156
X64:
	.dbline 611
;   {//发送数据给PC
	.dbline 612
;  	communication->pc_txd = 0; 
	clr R2
	std z+1,R2
	.dbline 613
; 	p_buf->Address = Device_Address;
	lds R2,_Device_Address
	movw R30,R20
	std z+0,R2
	.dbline 614
;     UDR = BOOT_CODE;
	ldi R24,254
	out 0xc,R24
	.dbline 615
;   }
L156:
	.dbline 616
;   if(communication->pc_rxd)
	movw R30,R22
	ldd R2,z+0
	tst R2
	brne X89
	xjmp L158
X89:
X65:
	.dbline 617
;   {//pc发送给采集板的数据
	.dbline 618
;     communication->pc_rxd = 0; 
	clr R2
	std z+0,R2
	.dbline 619
; 	if((p_buf->Address==Device_Address)||(p_buf->Address == 0xff))
	movw R30,R20
	ldd R2,z+0
	clr R3
	movw R4,R2
	lds R2,_Device_Address
	cp R4,R2
	breq L162
X66:
	mov R24,R4
	cpi R24,255
	breq X90
	xjmp L160
X90:
X67:
L162:
	.dbline 620
; 	{
	.dbline 621
;  	  switch(p_buf->Command)
	movw R30,R20
	ldd R20,z+3
	clr R21
	cpi R20,31
	ldi R30,0
	cpc R21,R30
	brne X91
	xjmp L179
X91:
X68:
	cpi R20,34
	ldi R30,0
	cpc R21,R30
	brne X92
	xjmp L168
X92:
X69:
	cpi R20,35
	ldi R30,0
	cpc R21,R30
	brne X93
	xjmp L178
X93:
X70:
	cpi R20,36
	ldi R30,0
	cpc R21,R30
	brne X94
	xjmp L170
X94:
X71:
	cpi R20,37
	ldi R30,0
	cpc R21,R30
	brne X95
	xjmp L172
X95:
X72:
	cpi R20,38
	ldi R30,0
	cpc R21,R30
	brne X96
	xjmp L174
X96:
X73:
	ldi R24,38
	ldi R25,0
	cp R24,R20
	cpc R25,R21
	brge X97
	xjmp L187
X97:
X74:
L186:
	cpi R20,1
	ldi R30,0
	cpc R21,R30
	brne X98
	xjmp L166
X98:
X75:
	cpi R20,2
	ldi R30,0
	cpc R21,R30
	brne X99
	xjmp L167
X99:
X76:
	cpi R20,3
	ldi R30,0
	cpc R21,R30
	brne X100
	xjmp L177
X100:
X77:
	cpi R20,4
	ldi R30,0
	cpc R21,R30
	brne X101
	xjmp L169
X101:
X78:
	cpi R20,5
	ldi R30,0
	cpc R21,R30
	brne X102
	xjmp L171
X102:
X79:
	cpi R20,6
	ldi R30,0
	cpc R21,R30
	brne X103
	xjmp L173
X103:
X80:
	cpi R20,13
	ldi R30,0
	cpc R21,R30
	brne X104
	xjmp L175
X104:
X81:
	cpi R20,1
	ldi R30,0
	cpc R21,R30
	brge X105
	xjmp L163
X105:
X82:
L188:
	cpi R20,17
	ldi R30,0
	cpc R21,R30
	brne X106
	xjmp L183
X106:
X83:
	xjmp L163
L187:
	cpi R20,63
	ldi R30,0
	cpc R21,R30
	brne X107
	xjmp L180
X107:
X84:
	cpi R20,64
	ldi R30,0
	cpc R21,R30
	brne X108
	xjmp L181
X108:
X85:
	ldi R24,64
	ldi R25,0
	cp R24,R20
	cpc R25,R21
	brlt L190
X86:
L189:
	cpi R20,45
	ldi R30,0
	cpc R21,R30
	breq L176
X87:
	xjmp L163
L190:
	cpi R20,96
	ldi R30,0
	cpc R21,R30
	brne X109
	xjmp L182
X109:
X88:
	xjmp L163
L166:
	.dbline 624
; 	  {
; 	    case CMD_GET_DCUID://取控制器名称和版本号
; 		 	 GET_NAME();
	xcall _GET_NAME
	.dbline 625
; 		 	 break;
	xjmp L164
L167:
	.dbline 627
; 	   	case CMD_GET_TIME://取系统时间
; 		 	 GET_TIME();
	xcall _GET_TIME
	.dbline 628
; 			 break;
	xjmp L164
L168:
	.dbline 630
; 	 	case CMD_SET_TIME://下载系统时间
; 			 SET_TIME();
	xcall _SET_TIME
	.dbline 631
; 			 break;
	xjmp L164
L169:
	.dbline 633
; 	    case CMD_GET_CARDSET://取系统卡注册表
; 		     GET_CARDSET();
	xcall _GET_CARDSET
	.dbline 634
; 			 break;
	xjmp L164
L170:
	.dbline 636
; 	    case CMD_SET_CARDSET://下载系统卡注册表
; 			 SET_CARDSET();
	xcall _SET_CARDSET
	.dbline 637
; 			 break;
	xjmp L164
L171:
	.dbline 639
; 	    case CMD_GET_USER://取用户楼层授权资料
; 			 GET_USER();
	xcall _GET_USER
	.dbline 640
; 			 break;
	xjmp L164
L172:
	.dbline 642
; 		case CMD_SET_USER://下载门禁时间组(设用户楼层授权资料)
; 		 	 SET_USER();
	xcall _SET_USER
	.dbline 643
; 			 break;
	xjmp L164
L173:
	.dbline 645
; 	    case CMD_GET_USER_TIME://取用户时间组授权资料  
; 			 GET_USER_TIME();
	xcall _GET_USER_TIME
	.dbline 646
; 			 break;
	xjmp L164
L174:
	.dbline 648
; 		case CMD_SET_USER_TIME://设用户时间组授权资料 
; 		 	 SET_USER_TIME();
	xcall _SET_USER_TIME
	.dbline 649
; 			 break;	 
	xjmp L164
L175:
	.dbline 651
; 		case CMD_GET_AUTH_TIME://取电梯授权时间组 
; 		 	 GET_AUTH_TIME();
	xcall _GET_AUTH_TIME
	.dbline 652
; 			 break;
	xjmp L164
L176:
	.dbline 654
; 	    case CMD_SET_AUTH_TIME://设电梯授权时间组
; 		 	 SET_AUTH_TIME();
	xcall _SET_AUTH_TIME
	.dbline 655
; 			 break;
	xjmp L164
L177:
	.dbline 657
; 	    case CMD_GET_CONFIG://取系统配置参数
; 			 GET_CONFIG();
	xcall _GET_CONFIG
	.dbline 658
; 			 break;
	xjmp L164
L178:
	.dbline 660
; 	    case CMD_SET_CONFIG: //设置系统配置参数
; 			 SET_CONFIG();
	xcall _SET_CONFIG
	.dbline 661
; 	  		 break;
	xjmp L164
L179:
	.dbline 663
; 		case CMD_GET_PRODUCT_CODE://取产品标签代码
; 		     GET_PRODUCT_CODE();
	xcall _GET_PRODUCT_CODE
	.dbline 664
; 			 break;	 
	xjmp L164
L180:
	.dbline 666
; 		case CMD_SET_PRODUCT_CODE://设置产品标签代码
; 			 SET_PRODUCT_CODE();
	xcall _SET_PRODUCT_CODE
	.dbline 667
; 			 break;
	xjmp L164
L181:
	.dbline 669
; 		case CTL_GET_UNIT_STATUS: /*取控制器状态*/
; 			 GET_UNIT_STATUS();
	xcall _GET_UNIT_STATUS
	.dbline 670
; 			 break;
	xjmp L164
L182:
	.dbline 672
; 		case CTL_SET_UNIT_STATUS: /*设置控制器状态*/	 
; 			 SET_UNIT_STATUS();
	xcall _SET_UNIT_STATUS
	.dbline 673
; 			 break;
	xjmp L164
L183:
	.dbline 675
; 		case CMD_GET_EVENT://取控制器历史事件
; 			 GET_EVENT();
	xcall _GET_EVENT
	.dbline 676
; 			 break;	 
	xjmp L164
L163:
	.dbline 678
; 		default:
; 		 	if (TEST && p_buf->Address != 0xff)   
	xjmp L164
L164:
	.dbline 682
; 			   CommandReply(RESP_INVALID_INSTRUCT);
; 	 	    break;	 
; 	  }
; 	}
L160:
	.dbline 683
;   }
L158:
	.dbline -2
L155:
	.dbline 0 ; func end
	xjmp pop_xgsetF000
	.dbsym r p_buf 20 pS[StructOfProtocol]
	.dbsym r communication 22 pS[data]
	.dbend
; }

⌨️ 快捷键说明

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