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

📄 sd8060.lst

📁 电梯楼层采集器代码
💻 LST
📖 第 1 页 / 共 5 页
字号:
     222 8164      LDD	R22,Z+4
     223 8175      LDD	R23,Z+5
(0141)  if (point < sizeof(struct StructOfRegister))
     224 3F6C      CPI	R22,0xFC
     225 E0A5      LDI	R26,5
     226 077A      CPC	R23,R26
     227 F008      BCS	0x0229
     228 C034      RJMP	0x025D
(0142)  {
(0143)    count = sizeof(struct StructOfRegister) - point;
     229 EF8C      LDI	R24,0xFC
     22A E095      LDI	R25,5
     22B 015C      MOVW	R10,R24
     22C 1AA6      SUB	R10,R22
     22D 0AB7      SBC	R11,R23
(0144)    p_buf->Length -= 3;
     22E 01CF      MOVW	R24,R30
     22F 9601      ADIW	R24,1
     230 01FC      MOVW	R30,R24
     231 8180      LDD	R24,Z+0
     232 8191      LDD	R25,Z+1
     233 9703      SBIW	R24,3
     234 8391      STD	Z+1,R25
     235 8380      STD	Z+0,R24
(0145)    if (p_buf->Length && (p_buf->Length <= count))
     236 01FA      MOVW	R30,R20
     237 8021      LDD	R2,Z+1
     238 8032      LDD	R3,Z+2
     239 2022      TST	R2
     23A F411      BNE	0x023D
     23B 2033      TST	R3
     23C F0F9      BEQ	0x025C
     23D 14A2      CP	R10,R2
     23E 04B3      CPC	R11,R3
     23F F0E0      BCS	0x025C
(0146)    {//保存系统卡注册表
(0147)      point += CARDSET_Address;
     240 5461      SUBI	R22,0x41
     241 467B      SBCI	R23,0x6B
(0148) 	 I2C_Initial();
     242 940E 05B1 CALL	_I2C_Initial
(0149)      AT24_Write((unsigned char *)&p_buf->Data[2],point,p_buf->Length);	
     244 01FA      MOVW	R30,R20
     245 8021      LDD	R2,Z+1
     246 8032      LDD	R3,Z+2
     247 8228      STD	Y+0,R2
     248 019B      MOVW	R18,R22
     249 018F      MOVW	R16,R30
     24A 5F0A      SUBI	R16,0xFA
     24B 4F1F      SBCI	R17,0xFF
     24C 940E 0651 CALL	_AT24_Write
(0150) 	 I2C_Close();
     24E 940E 05B6 CALL	_I2C_Close
(0151) 	 if (p_buf->Address  != 0xff) 
     250 01FA      MOVW	R30,R20
     251 8180      LDD	R24,Z+0
     252 3F8F      CPI	R24,0xFF
     253 F051      BEQ	0x025E
(0152) 	 {
(0153) 	  	Cyc_manage |= 0x04;//打开更新51控制板的数据
     254 9180 0078 LDS	R24,Cyc_manage
     256 6084      ORI	R24,4
     257 9380 0078 STS	Cyc_manage,R24
(0154)         CommandReply(RESP_CMD_OK);
     259 E801      LDI	R16,0x81
     25A DEFA      RCALL	_CommandReply
(0155) 	 }
(0156)    }
     25B C002      RJMP	0x025E
(0157)    else if(TEST && p_buf->Address != 0xff)
     25C C001      RJMP	0x025E
(0158)        CommandReply(RESP_INVALID_DATA);
(0159)  }
(0160)  else if(TEST && p_buf->Address != 0xff)
     25D C000      RJMP	0x025E
     25E 9621      ADIW	R28,1
     25F 940C 0DB6 JMP	pop_xgsetF00C
_GET_USER:
  communication        --> R20
  count                --> R12
  point                --> R10
  p_buf                --> R22
     261 940E 0DCB CALL	push_xgsetF03C
     263 9721      SBIW	R28,1
(0161)      CommandReply(RESP_INVALID_DATA);
(0162) }
(0163) //------------------------------------------------------------------------------
(0164) //------------------------------------------------------------------------------
(0165) /*
(0166) 用户楼层授权资料(取控制器门禁时间组)
(0167) 命令码:		CMD_GET_USER
(0168) 数据:		NONE
(0169) 
(0170) 正常回应数据:
(0171)     门禁时间组数据结构  
(0172) */
(0173) void GET_USER(void)
(0174) {
(0175)   unsigned int point,count;
(0176)   struct StructOfProtocol *p_buf;
(0177)   struct data *communication;
(0178)   p_buf = (struct StructOfProtocol *)Buffer485;
     264 E769      LDI	R22,0x79
     265 E071      LDI	R23,1
(0179)   if(p_buf->Address==Device_Address)
     266 9020 0077 LDS	R2,Device_Address
     268 01FB      MOVW	R30,R22
     269 8030      LDD	R3,Z+0
     26A 1432      CP	R3,R2
     26B F009      BEQ	0x026D
     26C C03B      RJMP	0x02A8
(0180)   {
(0181)     if(p_buf->Length==3)
     26D 8181      LDD	R24,Z+1
     26E 8192      LDD	R25,Z+2
     26F 3083      CPI	R24,3
     270 E0A0      LDI	R26,0
     271 079A      CPC	R25,R26
     272 F009      BEQ	0x0274
     273 C033      RJMP	0x02A7
(0182)     {
(0183)        point = *(unsigned int *)p_buf->Data;
     274 80A4      LDD	R10,Z+4
     275 80B5      LDD	R11,Z+5
(0184)        if (point < sizeof(struct StructOfUserInformation))
     276 01C5      MOVW	R24,R10
     277 3380      CPI	R24,0x30
     278 E7A5      LDI	R26,0x75
     279 079A      CPC	R25,R26
     27A F008      BCS	0x027C
     27B C02A      RJMP	0x02A6
(0185)        {
(0186) 	     count = sizeof(struct StructOfUserInformation) - point;
     27C E380      LDI	R24,0x30
     27D E795      LDI	R25,0x75
     27E 016C      MOVW	R12,R24
     27F 18CA      SUB	R12,R10
     280 08DB      SBC	R13,R11
(0187) 	      if (count < 256 - 8)   p_buf->Length = count + 1;
     281 01C6      MOVW	R24,R12
     282 3F88      CPI	R24,0xF8
     283 E0A0      LDI	R26,0
     284 079A      CPC	R25,R26
     285 F420      BCC	0x028A
     286 9601      ADIW	R24,1
     287 8392      STD	Z+2,R25
     288 8381      STD	Z+1,R24
     289 C005      RJMP	0x028F
(0188)           else  p_buf->Length = 256 - 8;
     28A EF88      LDI	R24,0xF8
     28B E090      LDI	R25,0
     28C 01FB      MOVW	R30,R22
     28D 8392      STD	Z+2,R25
     28E 8381      STD	Z+1,R24
(0189) 		  point += USER_INFORMATION_Address;
     28F 01C5      MOVW	R24,R10
     290 5783      SUBI	R24,0x73
     291 4E90      SBCI	R25,0xE0
     292 015C      MOVW	R10,R24
(0190) 		  I2C_Initial();
     293 940E 05B1 CALL	_I2C_Initial
(0191) 	      AT24_Read((unsigned char *)&p_buf->Data,point,p_buf->Length-1);
     295 01FB      MOVW	R30,R22
     296 8181      LDD	R24,Z+1
     297 8192      LDD	R25,Z+2
     298 9701      SBIW	R24,1
     299 8388      STD	Y+0,R24
     29A 0195      MOVW	R18,R10
     29B 018F      MOVW	R16,R30
     29C 5F0C      SUBI	R16,0xFC
     29D 4F1F      SBCI	R17,0xFF
     29E 940E 0615 CALL	_AT24_Read
(0192) 		  I2C_Close();
     2A0 940E 05B6 CALL	_I2C_Close
(0193)   		  communication->pc_txd = 1; 
     2A2 E081      LDI	R24,1
     2A3 01FA      MOVW	R30,R20
     2A4 8381      STD	Z+1,R24
(0194) 	   }
     2A5 C002      RJMP	0x02A8
(0195) 	   else if(TEST) CommandReply(RESP_INVALID_DATA);
     2A6 C001      RJMP	0x02A8
(0196)   	}
(0197) 	else if(TEST) CommandReply(RESP_INVALID_DATA);
     2A7 C000      RJMP	0x02A8
(0198)   }
     2A8 9621      ADIW	R28,1
     2A9 940C 0DD4 JMP	pop_xgsetF03C
_SET_USER:
  count                --> R10
  point                --> R22
  p_buf                --> R20
     2AB 940E 0DAF CALL	push_xgsetF00C
     2AD 9721      SBIW	R28,1
(0199) }
(0200) //------------------------------------------------------------------------------
(0201) /*
(0202) 下载门禁时间组(设用户楼层授权资料)
(0203) 命令码:CMD_SET_USER
(0204) 数据:	门禁时间组
(0205) 正常回应:	[OK]
(0206) */
(0207) void SET_USER(void)
(0208) {
(0209)  unsigned int point,count;
(0210)  struct StructOfProtocol *p_buf;
(0211)  p_buf = (struct StructOfProtocol *)Buffer485;
     2AE E749      LDI	R20,0x79
     2AF E051      LDI	R21,1
(0212)  *C51Buffer485 = *Buffer485;
     2B0 9020 0179 LDS	R2,Buffer485
     2B2 9220 0079 STS	C51Buffer485,R2
(0213)  point = *(unsigned int *)p_buf->Data;
     2B4 01FA      MOVW	R30,R20
     2B5 8164      LDD	R22,Z+4
     2B6 8175      LDD	R23,Z+5
(0214)  if (point < sizeof(struct StructOfUserInformation))
     2B7 3360      CPI	R22,0x30
     2B8 E7A5      LDI	R26,0x75
     2B9 077A      CPC	R23,R26
     2BA F008      BCS	0x02BC
     2BB C034      RJMP	0x02F0
(0215)  {
(0216)   	count = sizeof(struct StructOfUserInformation) - point;
     2BC E380      LDI	R24,0x30
     2BD E795      LDI	R25,0x75
     2BE 015C      MOVW	R10,R24
     2BF 1AA6      SUB	R10,R22
     2C0 0AB7      SBC	R11,R23
(0217)     p_buf->Length -= 3;
     2C1 01CF      MOVW	R24,R30
     2C2 9601      ADIW	R24,1
     2C3 01FC      MOVW	R30,R24
     2C4 8180      LDD	R24,Z+0
     2C5 8191      LDD	R25,Z+1
     2C6 9703      SBIW	R24,3
     2C7 8391      STD	Z+1,R25
     2C8 8380      STD	Z+0,R24
(0218) 	if(p_buf->Length&&(p_buf->Length<=count))
     2C9 01FA      MOVW	R30,R20
     2CA 8021      LDD	R2,Z+1
     2CB 8032      LDD	R3,Z+2
     2CC 2022      TST	R2
     2CD F411      BNE	0x02D0
     2CE 2033      TST	R3
     2CF F0F9      BEQ	0x02EF
     2D0 14A2      CP	R10,R2
     2D1 04B3      CPC	R11,R3
     2D2 F0E0      BCS	0x02EF
(0219) 	{
(0220) 	  point += USER_INFORMATION_Address;
     2D3 5763      SUBI	R22,0x73
     2D4 4E70      SBCI	R23,0xE0
(0221) 	  I2C_Initial();
     2D5 940E 05B1 CALL	_I2C_Initial
(0222)       AT24_Write((unsigned char *)&p_buf->Data[2],point,p_buf->Length);	
     2D7 01FA      MOVW	R30,R20
     2D8 8021      LDD	R2,Z+1
     2D9 8032      LDD	R3,Z+2
     2DA 8228      STD	Y+0,R2
     2DB 019B      MOVW	R18,R22
     2DC 018F      MOVW	R16,R30
     2DD 5F0A      SUBI	R16,0xFA
     2DE 4F1F      SBCI	R17,0xFF
     2DF 940E 0651 CALL	_AT24_Write
(0223) 	  I2C_Close();
     2E1 940E 05B6 CALL	_I2C_Close
(0224) 	  if (p_buf->Address  != 0xff) 
     2E3 01FA      MOVW	R30,R20
     2E4 8180      LDD	R24,Z+0
     2E5 3F8F      CPI	R24,0xFF
     2E6 F051      BEQ	0x02F1
(0225) 	  {
(0226) 	    Cyc_manage |= 0x04;//打开更新51控制板的数据
     2E7 9180 0078 LDS	R24,Cyc_manage
     2E9 6084      ORI	R24,4
     2EA 9380 0078 STS	Cyc_manage,R24
(0227)         CommandReply(RESP_CMD_OK);
     2EC E801      LDI	R16,0x81
     2ED DE67      RCALL	_CommandReply
(0228) 	  }
(0229)    }
     2EE C002      RJMP	0x02F1
(0230)     else if(TEST && p_buf->Address != 0xff)
     2EF C001      RJMP	0x02F1
(0231)        CommandReply(RESP_INVALID_DATA);
(0232)  }
(0233)  else if(TEST && p_buf->Address != 0xff)
     2F0 C000      RJMP	0x02F1
     2F1 9621      ADIW	R28,1
     2F2 940C 0DB6 JMP	pop_xgsetF00C
_GET_USER_TIME:
  communication        --> R20
  count                --> R12
  point                --> R10
  p_buf                --> R22
     2F4 940E 0DCB CALL	push_xgsetF03C
     2F6 9721      SBIW	R28,1
(0234)      CommandReply(RESP_INVALID_DATA);
(0235) }
(0236) //------------------------------------------------------------------------------
(0237) //------------------------------------------------------------------------------
(0238) /*
(0239) 取用户时间组授权资料
(0240) 命令码:		CMD_GET_USER_TIME
(0241) 数据:		    内存位置  2字节,高字节在前,值域 0 - 7499
(0242) 正常回应数据:	
(0243)       从指定位置开始的资料,不超过255字节
(0244) */
(0245) void GET_USER_TIME(void)
(0246) {
(0247)   unsigned int point,count;
(0248)   struct StructOfProtocol *p_buf;
(0249)   struct data *communication;
(0250)   p_buf = (struct StructOfProtocol *)Buffer485;
     2F7 E769      LDI	R22,0x79
     2F8 E071      LDI	R23,1
(0251)   if(p_buf->Address==Device_Address)
     2F9 9020 0077 LDS	R2,Device_Address
     2FB 01FB      MOVW	R30,R22
     2FC 8030      LDD	R3,Z+0
     2FD 1432      CP	R3,R2
     2FE F009      BEQ	0x0300
     2FF C03B      RJMP	0x033B
(0252)   {
(0253)     if(p_buf->Length==3)
     300 8181      LDD	R24,Z+1
     301 8192      LDD	R25,Z+2
     302 3083      CPI	R24,3
     303 E0A0      LDI	R26,0
     304 079A      CPC	R25,R26
     305 F009      BEQ	0x0307
     306 C033      RJMP	0x033A
(0254)     {
(0255)       point = *(unsigned int *)p_buf->Data;
     307 80A4      LDD	R10,Z+4
     308 80B5      LDD	R11,Z+5
(0256)       if (point < sizeof(struct StructOfUserTimezone))
     309 01C5      MOVW	R24,R10
     30A 348C      CPI	R24,0x4C
     30B E1AD      LDI	R26,0x1D
     30C 079A      CPC	R25,R26
     30D F008      BCS	0x030F
     30E C02A      RJMP	0x0339
(0257)       {
(0258)         count = sizeof(struct StructOfUserTimezone) - point;
     30F E48C      LDI	R24,0x4C
     310 E19D      LDI	R25,0x1D
     311 016C      MOVW	R12,R24
     312 18CA      SUB	R12,R10
     313 08DB      SBC	R13,R11
(0259)         if (count < 256 - 8) p_buf->Length = count + 1;
     314 01C6      MOVW	R24,R12
     315 3F88      CPI	R24,0xF8
     316 E0A0      LDI	R26,0
     317 079A      CPC	R25,R26
     318 F420      BCC	0x031D
     319 9601      ADIW	R24,1
     31A 8392      STD	Z+2,R25
     31B 8381      STD	Z+1,R24
     31C C005      RJMP	0x0322
(0260)         else    p_buf->Length = 256 - 8;
     31D EF88      LDI	R24,0xF8
     31E E090      LDI	R25,0
     31F 01FB      MOVW	R30,R22
     320 8392      STD	Z+2,R25
     321 8381      STD	Z+1,R24
(0261) 		point += USER_TIMEZONE_Address;
     322 01C5      MOVW	R24,R10
     323 5B8D      SUBI	R24,0xBD
     324 4F9D      SBCI	R25,0xFD
     325 015C      MOVW	R10,R24
(0262) 		I2C_Initial();
     326 940E 05B1 CALL	_I2C_Initial
(0263) 		AT24_Read((unsigned char *)&p_buf->Data,point,p_buf->Length-1);
     328 01FB      MOVW	R30,R22
     329 8181      LDD	R24,Z+1
     32A 8192      LDD	R25,Z+2

⌨️ 快捷键说明

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