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

📄 rs485_pc.s

📁 电梯楼层采集器代码
💻 S
📖 第 1 页 / 共 4 页
字号:
	sbiw R28,1
	.dbline -1
	.dbline 174
;      CommandReply(RESP_INVALID_DATA);
; }
; //------------------------------------------------------------------------------
; //------------------------------------------------------------------------------
; /*
; 用户楼层授权资料(取控制器门禁时间组)
; 命令码:		CMD_GET_USER
; 数据:		NONE
; 
; 正常回应数据:
;     门禁时间组数据结构  
; */
; void GET_USER(void)
; {
	.dbline 178
;   unsigned int point,count;
;   struct StructOfProtocol *p_buf;
;   struct data *communication;
;   p_buf = (struct StructOfProtocol *)Buffer485;
	ldi R22,<_Buffer485
	ldi R23,>_Buffer485
	.dbline 179
;   if(p_buf->Address==Device_Address)
	lds R2,_Device_Address
	movw R30,R22
	ldd R3,z+0
	cp R3,R2
	breq X22
	xjmp L49
X22:
X18:
	.dbline 180
;   {
	.dbline 181
;     if(p_buf->Length==3)
	ldd R24,z+1
	ldd R25,z+2
	cpi R24,3
	ldi R26,0
	cpc R25,R26
	breq X23
	xjmp L51
X23:
X19:
	.dbline 182
;     {
	.dbline 183
;        point = *(unsigned int *)p_buf->Data;
	ldd R10,z+4
	ldd R11,z+5
	.dbline 184
;        if (point < sizeof(struct StructOfUserInformation))
	movw R24,R10
	cpi R24,48
	ldi R26,117
	cpc R25,R26
	brlo X24
	xjmp L53
X24:
X20:
	.dbline 185
;        {
	.dbline 186
; 	     count = sizeof(struct StructOfUserInformation) - point;
	ldi R24,30000
	ldi R25,117
	movw R12,R24
	sub R12,R10
	sbc R13,R11
	.dbline 187
; 	      if (count < 256 - 8)   p_buf->Length = count + 1;
	movw R24,R12
	cpi R24,248
	ldi R26,0
	cpc R25,R26
	brsh L55
X21:
	.dbline 187
	adiw R24,1
	std z+2,R25
	std z+1,R24
	xjmp L56
L55:
	.dbline 188
;           else  p_buf->Length = 256 - 8;
	ldi R24,248
	ldi R25,0
	movw R30,R22
	std z+2,R25
	std z+1,R24
L56:
	.dbline 189
; 		  point += USER_INFORMATION_Address;
	movw R24,R10
	subi R24,115  ; offset = 8077
	sbci R25,224
	movw R10,R24
	.dbline 190
; 		  I2C_Initial();
	xcall _I2C_Initial
	.dbline 191
; 	      AT24_Read((unsigned char *)&p_buf->Data,point,p_buf->Length-1);
	movw R30,R22
	ldd R24,z+1
	ldd R25,z+2
	sbiw R24,1
	std y+0,R24
	movw R18,R10
	movw R16,R30
	subi R16,252  ; offset = 4
	sbci R17,255
	xcall _AT24_Read
	.dbline 192
; 		  I2C_Close();
	xcall _I2C_Close
	.dbline 193
;   		  communication->pc_txd = 1; 
	ldi R24,1
	movw R30,R20
	std z+1,R24
	.dbline 194
; 	   }
	xjmp L52
L53:
	.dbline 195
; 	   else if(TEST) CommandReply(RESP_INVALID_DATA);
	xjmp L52
L51:
	.dbline 197
;   	}
; 	else if(TEST) CommandReply(RESP_INVALID_DATA);
	xjmp L59
L59:
L52:
	.dbline 198
;   }
L49:
	.dbline -2
L48:
	.dbline 0 ; func end
	adiw R28,1
	xjmp pop_xgsetF03C
	.dbsym r communication 20 pS[data]
	.dbsym r count 12 i
	.dbsym r point 10 i
	.dbsym r p_buf 22 pS[StructOfProtocol]
	.dbend
	.dbfunc e SET_USER _SET_USER fV
;          count -> R10,R11
;          point -> R22,R23
;          p_buf -> R20,R21
	.even
_SET_USER::
	xcall push_xgsetF00C
	sbiw R28,1
	.dbline -1
	.dbline 208
; }
; //------------------------------------------------------------------------------
; /*
; 下载门禁时间组(设用户楼层授权资料)
; 命令码:CMD_SET_USER
; 数据:	门禁时间组
; 正常回应:	[OK]
; */
; void SET_USER(void)
; {
	.dbline 211
;  unsigned int point,count;
;  struct StructOfProtocol *p_buf;
;  p_buf = (struct StructOfProtocol *)Buffer485;
	ldi R20,<_Buffer485
	ldi R21,>_Buffer485
	.dbline 212
;  *C51Buffer485 = *Buffer485;
	lds R2,_Buffer485
	sts _C51Buffer485,R2
	.dbline 213
;  point = *(unsigned int *)p_buf->Data;
	movw R30,R20
	ldd R22,z+4
	ldd R23,z+5
	.dbline 214
;  if (point < sizeof(struct StructOfUserInformation))
	cpi R22,48
	ldi R26,117
	cpc R23,R26
	brlo X29
	xjmp L62
X29:
X25:
	.dbline 215
;  {
	.dbline 216
;   	count = sizeof(struct StructOfUserInformation) - point;
	ldi R24,30000
	ldi R25,117
	movw R10,R24
	sub R10,R22
	sbc R11,R23
	.dbline 217
;     p_buf->Length -= 3;
	movw R24,R30
	adiw R24,1
	movw R30,R24
	ldd R24,z+0
	ldd R25,z+1
	sbiw R24,3
	std z+1,R25
	std z+0,R24
	.dbline 218
; 	if(p_buf->Length&&(p_buf->Length<=count))
	movw R30,R20
	ldd R2,z+1
	ldd R3,z+2
	tst R2
	brne X26
	tst R3
	breq L64
X26:
	cp R10,R2
	cpc R11,R3
	brlo L64
X27:
	.dbline 219
; 	{
	.dbline 220
; 	  point += USER_INFORMATION_Address;
	subi R22,115  ; offset = 8077
	sbci R23,224
	.dbline 221
; 	  I2C_Initial();
	xcall _I2C_Initial
	.dbline 222
;       AT24_Write((unsigned char *)&p_buf->Data[2],point,p_buf->Length);	
	movw R30,R20
	ldd R2,z+1
	ldd R3,z+2
	std y+0,R2
	movw R18,R22
	movw R16,R30
	subi R16,250  ; offset = 6
	sbci R17,255
	xcall _AT24_Write
	.dbline 223
; 	  I2C_Close();
	xcall _I2C_Close
	.dbline 224
; 	  if (p_buf->Address  != 0xff) 
	movw R30,R20
	ldd R24,z+0
	cpi R24,255
	breq L63
X28:
	.dbline 225
; 	  {
	.dbline 226
; 	    Cyc_manage |= 0x04;//打开更新51控制板的数据
	lds R24,_Cyc_manage
	ori R24,4
	sts _Cyc_manage,R24
	.dbline 227
;         CommandReply(RESP_CMD_OK);
	ldi R16,129
	xcall _CommandReply
	.dbline 228
; 	  }
	.dbline 229
;    }
	xjmp L63
L64:
	.dbline 230
;     else if(TEST && p_buf->Address != 0xff)
	xjmp L63
L62:
	.dbline 233
;        CommandReply(RESP_INVALID_DATA);
;  }
;  else if(TEST && p_buf->Address != 0xff)
	xjmp L70
L70:
L63:
	.dbline -2
L61:
	.dbline 0 ; func end
	adiw R28,1
	xjmp pop_xgsetF00C
	.dbsym r count 10 i
	.dbsym r point 22 i
	.dbsym r p_buf 20 pS[StructOfProtocol]
	.dbend
	.dbfunc e GET_USER_TIME _GET_USER_TIME fV
;  communication -> R20,R21
;          count -> R12,R13
;          point -> R10,R11
;          p_buf -> R22,R23
	.even
_GET_USER_TIME::
	xcall push_xgsetF03C
	sbiw R28,1
	.dbline -1
	.dbline 246
;      CommandReply(RESP_INVALID_DATA);
; }
; //------------------------------------------------------------------------------
; //------------------------------------------------------------------------------
; /*
; 取用户时间组授权资料
; 命令码:		CMD_GET_USER_TIME
; 数据:		    内存位置  2字节,高字节在前,值域 0 - 7499
; 正常回应数据:	
;       从指定位置开始的资料,不超过255字节
; */
; void GET_USER_TIME(void)
; {
	.dbline 250
;   unsigned int point,count;
;   struct StructOfProtocol *p_buf;
;   struct data *communication;
;   p_buf = (struct StructOfProtocol *)Buffer485;
	ldi R22,<_Buffer485
	ldi R23,>_Buffer485
	.dbline 251
;   if(p_buf->Address==Device_Address)
	lds R2,_Device_Address
	movw R30,R22
	ldd R3,z+0
	cp R3,R2
	breq X34
	xjmp L73
X34:
X30:
	.dbline 252
;   {
	.dbline 253
;     if(p_buf->Length==3)
	ldd R24,z+1
	ldd R25,z+2
	cpi R24,3
	ldi R26,0
	cpc R25,R26
	breq X35
	xjmp L75
X35:
X31:
	.dbline 254
;     {
	.dbline 255
;       point = *(unsigned int *)p_buf->Data;
	ldd R10,z+4
	ldd R11,z+5
	.dbline 256
;       if (point < sizeof(struct StructOfUserTimezone))
	movw R24,R10
	cpi R24,76
	ldi R26,29
	cpc R25,R26
	brlo X36
	xjmp L77
X36:
X32:
	.dbline 257
;       {
	.dbline 258
;         count = sizeof(struct StructOfUserTimezone) - point;
	ldi R24,7500
	ldi R25,29
	movw R12,R24
	sub R12,R10
	sbc R13,R11
	.dbline 259
;         if (count < 256 - 8) p_buf->Length = count + 1;
	movw R24,R12
	cpi R24,248
	ldi R26,0
	cpc R25,R26
	brsh L79
X33:
	.dbline 259
	adiw R24,1
	std z+2,R25
	std z+1,R24
	xjmp L80
L79:
	.dbline 260
;         else    p_buf->Length = 256 - 8;
	ldi R24,248
	ldi R25,0
	movw R30,R22
	std z+2,R25
	std z+1,R24
L80:
	.dbline 261
; 		point += USER_TIMEZONE_Address;
	movw R24,R10
	subi R24,189  ; offset = 579
	sbci R25,253
	movw R10,R24
	.dbline 262
; 		I2C_Initial();
	xcall _I2C_Initial
	.dbline 263
; 		AT24_Read((unsigned char *)&p_buf->Data,point,p_buf->Length-1);
	movw R30,R22
	ldd R24,z+1
	ldd R25,z+2
	sbiw R24,1
	std y+0,R24
	movw R18,R10
	movw R16,R30
	subi R16,252  ; offset = 4
	sbci R17,255
	xcall _AT24_Read
	.dbline 264
; 		I2C_Close();
	xcall _I2C_Close
	.dbline 265
;   		communication->pc_txd = 1;
	ldi R24,1
	movw R30,R20
	std z+1,R24
	.dbline 266
;       }
	xjmp L76
L77:
	.dbline 267
; 	  else if(TEST) CommandReply(RESP_INVALID_DATA);
	xjmp L76
L75:
	.dbline 269
;   	}
; 	else if(TEST) CommandReply(RESP_INVALID_DATA);
	xjmp L83
L83:
L76:
	.dbline 270
;   }
L73:
	.dbline -2
L72:
	.dbline 0 ; func end
	adiw R28,1
	xjmp pop_xgsetF03C
	.dbsym r communication 20 pS[data]
	.dbsym r count 12 i
	.dbsym r point 10 i
	.dbsym r p_buf 22 pS[StructOfProtocol]
	.dbend
	.dbfunc e SET_USER_TIME _SET_USER_TIME fV
;          count -> R10,R11
;          point -> R22,R23
;          p_buf -> R20,R21
	.even
_SET_USER_TIME::
	xcall push_xgsetF00C
	sbiw R28,1
	.dbline -1
	.dbline 281
; }
; //------------------------------------------------------------------------------
; /*
; 设用户时间组授权资料 
; 命令码:CMD_SET_USER_TIME
; 数据:	内存位置  2字节,高字节在前,值域 0 - 7499	
;       从指定位置开始的资料,不超过250字节
; 正常回应:	    [OK]
; */
; void SET_USER_TIME(void)
; {
	.dbline 284
;  unsigned int point,count;
;  struct StructOfProtocol *p_buf;
;  p_buf = (struct StructOfProtocol *)Buffer485;
	ldi R20,<_Buffer485
	ldi R21,>_Buffer485
	.dbline 285
;  *C51Buffer485 = *Buffer485;
	lds R2,_Buffer485
	sts _C51Buffer485,R2
	.dbline 286
;  point = *(unsigned int *)p_buf->Data;
	movw R30,R20
	ldd R22,z+4
	ldd R23,z+5
	.dbline 287
;  if(point < sizeof(struct StructOfUserTimezone))
	cpi R22,76
	ldi R26,29
	cpc R23,R26
	brlo X41
	xjmp L86
X41:
X37:
	.dbline 288
;  {
	.dbline 289
;    count = sizeof(struct StructOfUserTimezone) - point ;
	ldi R24,7500
	ldi R25,29
	movw R10,R24
	sub R10,R22
	sbc R11,R23
	.dbline 290
;    p_buf->Length -= 3;
	movw R24,R30
	adiw R24,1
	movw R30,R24
	ldd R24,z+0
	ldd R25,z+1
	sbiw R24,3
	std z+1,R25
	std z+0,R24
	.dbline 291
;    if(p_buf->Length&&(p_buf->Length<=count))
	movw R30,R20
	ldd R2,z+1
	ldd R3,z+2
	tst R2
	brne X38
	tst R3
	breq L88
X38:
	cp R10,R2
	cpc R11,R3
	brlo L88
X39:
	.dbline 292
;    {
	.dbline 293
;      point += USER_TIMEZONE_Address;
	subi R22,189  ; offset = 579
	sbci R23,253
	.dbline 294
; 	 I2C_Initial();
	xcall _I2C_Initial
	.dbline 295
;      AT24_Write((unsigned char *)&p_buf->Data[2],point,p_buf->Length);	
	movw R30,R20
	ldd R2,z+1
	ldd R3,z+2
	std y+0,R2
	movw R18,R22
	movw R16,R30
	subi R16,250  ; offset = 6
	sbci R17,255
	xcall _AT24_Write
	.dbline 296
; 	 I2C_Close();
	xcall _I2C_Close
	.dbline 297
; 	 if (p_buf->Address  != 0xff) 
	movw R30,R20
	ldd R24,z+0
	cpi R24,255
	breq L87
X40:
	.dbline 298
; 	 {
	.dbline 299
; 	    Cyc_manage |= 0x04;//打开更新51控制板的数据
	lds R24,_Cyc_manage
	ori R24,4
	sts _Cyc_manage,R24
	.dbline 300
;         CommandReply(RESP_CMD_OK);
	ldi R16,129
	xcall _CommandReply
	.dbline 301
; 	 }
	.dbline 302
;    }
	xjmp L87
L88:
	.dbline 303
;     else if(TEST && p_buf->Address != 0xff)
	xjmp L87
L86:
	.dbline 306
;        CommandReply(RESP_INVALID_DATA);
;  }
;  else if(TEST && p_buf->Address != 0xff)
	xjmp L94
L94:
L87:
	.dbline -2
L85:
	.dbline 0 ; func end
	adiw R28,1
	xjmp pop_xgsetF00C
	.dbsym r count 10 i
	.dbsym r point 22 i
	.dbsym r p_buf 20 pS[StructOfProtocol]
	.dbend
	.dbfunc e GET_AUTH_TIME _GET_AUTH_TIME fV
;  communication -> R20,R21
;          count -> R12,R13
;          point -> R10,R11
;          p_buf -> R22,R23
	.even
_GET_AUTH_TIME::
	xcall push_xgsetF03C
	sbiw R28,1
	.dbline -1
	.dbline 319
;      CommandReply(RESP_INVALID_DATA);
; }
; //------------------------------------------------------------------------------
; //------------------------------------------------------------------------------
; /*
; 8.	取电梯授权时间组            
; 命令码:		CMD_GET_AUTH_TIME
; 数据:		    内存位置  2字节,高字节在前,值域 0 - 524
; 正常回应数据:	
;    从指定位置开始的资料,不超过255字节
; */
; void GET_AUTH_TIME(void)
; {
	.dbline 323
;  unsigned int point,count;
;  struct StructOfProtocol *p_buf;
;  struct data *communication;
;  p_buf = (struct StructOfProtocol *)Buffer485;
	ldi R22,<_Buffer485
	ldi R23,>_Buffer485
	.dbline 324
;  if(p_buf->Address==Device_Address)

⌨️ 快捷键说明

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