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

📄 sd8060.lst

📁 电梯楼层采集器代码
💻 LST
📖 第 1 页 / 共 5 页
字号:
__start:
__text_start:
     132 E5CF      LDI	R28,0x5F
     133 E0D4      LDI	R29,4
     134 BFCD      OUT	0x3D,R28
     135 BFDE      OUT	0x3E,R29
     136 52C0      SUBI	R28,0x20
     137 40D0      SBCI	R29,0
     138 EA0A      LDI	R16,0xAA
     139 8308      STD	Y+0,R16
     13A 2400      CLR	R0
     13B E6E0      LDI	R30,0x60
     13C E0F0      LDI	R31,0
     13D E012      LDI	R17,2
     13E 38E7      CPI	R30,0x87
     13F 07F1      CPC	R31,R17
     140 F011      BEQ	0x0143
     141 9201      ST	R0,Z+
     142 CFFB      RJMP	0x013E
     143 8300      STD	Z+0,R16
     144 E6E4      LDI	R30,0x64
     145 E0F2      LDI	R31,2
     146 E6A0      LDI	R26,0x60
     147 E0B0      LDI	R27,0
     148 E012      LDI	R17,2
     149 E000      LDI	R16,0
     14A BF0B      OUT	0x3B,R16
     14B 36E4      CPI	R30,0x64
     14C 07F1      CPC	R31,R17
     14D F021      BEQ	0x0152
     14E 95C8      LPM
     14F 9631      ADIW	R30,1
     150 920D      ST	R0,X+
     151 CFF9      RJMP	0x014B
     152 940E 0921 CALL	_main
_exit:
     154 CFFF      RJMP	_exit
_CommandReply:
  communication        --> R20
  p_buf                --> R22
  command              --> R16
     155 940E 0DA5 CALL	push_xgsetF000
FILE: C:\DOCUME~1\Administrator\桌面\LCU904~1\固件程序\RS485_PC.C
(0001) 
(0002) #include"include.h"
(0003) 
(0004) void CommandReply(unsigned char command)
(0005) {//发送返回值给PC
(0006)   struct StructOfProtocol *p_buf;
(0007)   struct data *communication;
(0008)   p_buf = (struct StructOfProtocol *)Buffer485;
     157 E769      LDI	R22,0x79
     158 E071      LDI	R23,1
(0009)   p_buf->Length = 1;
     159 E081      LDI	R24,1
     15A E090      LDI	R25,0
     15B 01FB      MOVW	R30,R22
     15C 8392      STD	Z+2,R25
     15D 8381      STD	Z+1,R24
(0010)   p_buf->Command = command;
     15E 8303      STD	Z+3,R16
(0011)   communication->pc_txd = 1; 
     15F 01FA      MOVW	R30,R20
     160 8381      STD	Z+1,R24
     161 940C 0DAA JMP	pop_xgsetF000
_GET_NAME:
  communication        --> R20
  p_buf                --> R22
     163 940E 0DA5 CALL	push_xgsetF000
     165 9722      SBIW	R28,2
(0012) }
(0013) //------------------------------------------------------------------------------
(0014) //------------------------------------------------------------------------------
(0015) /*
(0016) 取控制器名称和版本号
(0017) 命令码:	CMD_GET_DCUID
(0018) 数据:		NONE
(0019) 回应数据:
(0020) 	[设备名称]	  10 byte(字符串形式)
(0021) 	[软件版本号]  6 byte(字符串形式)
(0022) */	
(0023) flash unsigned char UnitID[16] = { "LCU9040/1 V3.0  " }; /*设备标示代码*/
(0024) void GET_NAME(void)
(0025) {
(0026)  struct StructOfProtocol *p_buf;
(0027)  struct data *communication;
(0028)  p_buf = (struct StructOfProtocol *)Buffer485;
     166 E769      LDI	R22,0x79
     167 E071      LDI	R23,1
(0029)  if(p_buf->Address==Device_Address)
     168 9020 0077 LDS	R2,Device_Address
     16A 01FB      MOVW	R30,R22
     16B 8030      LDD	R3,Z+0
     16C 1432      CP	R3,R2
     16D F4C9      BNE	0x0187
(0030)  {
(0031)    if(p_buf->Length==1)
     16E 8181      LDD	R24,Z+1
     16F 8192      LDD	R25,Z+2
     170 3081      CPI	R24,1
     171 E0A0      LDI	R26,0
     172 079A      CPC	R25,R26
     173 F491      BNE	0x0186
(0032)    {
(0033)      p_buf->Length = sizeof(UnitID) + 1;
     174 E181      LDI	R24,0x11
     175 E090      LDI	R25,0
     176 8392      STD	Z+2,R25
     177 8381      STD	Z+1,R24
(0034) 	 memcpy(p_buf->Data,UnitID,sizeof(UnitID));
     178 E180      LDI	R24,0x10
     179 8399      STD	Y+1,R25
     17A 8388      STD	Y+0,R24
     17B E524      LDI	R18,0x54
     17C E030      LDI	R19,0
     17D 018F      MOVW	R16,R30
     17E 5F0C      SUBI	R16,0xFC
     17F 4F1F      SBCI	R17,0xFF
     180 940E 0D72 CALL	_memcpy
(0035)   	 communication->pc_txd = 1;
     182 E081      LDI	R24,1
     183 01FA      MOVW	R30,R20
     184 8381      STD	Z+1,R24
(0036)    }
     185 C001      RJMP	0x0187
(0037)    else if(TEST) CommandReply(RESP_INVALID_DATA);
     186 C000      RJMP	0x0187
(0038)  }
     187 9622      ADIW	R28,2
     188 940C 0DAA JMP	pop_xgsetF000
(0039) }
(0040) //------------------------------------------------------------------------------
(0041) //------------------------------------------------------------------------------
(0042) /*
(0043) 取系统时间
(0044) 命令码:CMD_GET_TIME
(0045) 数据:		NONE		
(0046) 正常回应数据:	
(0047)     日期表示: 2 bytes              
(0048)      时间表示:  2 bytes
(0049) */
(0050) void GET_TIME(void)
(0051) {
(0052)  struct StructOfProtocol *p_buf;
(0053)  struct data *communication;
(0054)  p_buf = (struct StructOfProtocol *)Buffer485;
_GET_TIME:
  communication        --> R16
  p_buf                --> R18
     18A E729      LDI	R18,0x79
     18B E031      LDI	R19,1
(0055)  *C51Buffer485 = *Buffer485;
     18C 9020 0179 LDS	R2,Buffer485
     18E 9220 0079 STS	C51Buffer485,R2
(0056)  if(p_buf->Address == Device_Address) 
     190 9020 0077 LDS	R2,Device_Address
     192 01F9      MOVW	R30,R18
     193 8030      LDD	R3,Z+0
     194 1432      CP	R3,R2
     195 F459      BNE	0x01A1
(0057)  {
(0058) 
(0059)    if(p_buf->Length==1)
     196 8181      LDD	R24,Z+1
     197 8192      LDD	R25,Z+2
     198 3081      CPI	R24,1
     199 E0E0      LDI	R30,0
     19A 079E      CPC	R25,R30
     19B F421      BNE	0x01A0
(0060)    {//发送获取时间给51控制板
(0061)   	 communication->c51_txd = 1; 
     19C E081      LDI	R24,1
     19D 01F8      MOVW	R30,R16
     19E 8383      STD	Z+3,R24
(0062)    }
     19F C001      RJMP	0x01A1
(0063)    else if(TEST) CommandReply(RESP_INVALID_DATA);   
     1A0 C000      RJMP	0x01A1
(0064)  }
     1A1 9508      RET
_SET_TIME:
  p_buf                --> R20
     1A2 934A      ST	R20,-Y
     1A3 935A      ST	R21,-Y
(0065) }
(0066) //------------------------------------------------------------------------------
(0067) /*
(0068) 下载系统时间
(0069) 命令码:CMD_SET_TIME
(0070) 数据:	日期2字节,时间2字节
(0071) 正常回应:[OK]
(0072) */
(0073) void SET_TIME(void)
(0074) {
(0075)  struct StructOfProtocol *p_buf;
(0076)  p_buf = (struct StructOfProtocol *)Buffer485;
     1A4 E749      LDI	R20,0x79
     1A5 E051      LDI	R21,1
(0077)  *C51Buffer485 = *Buffer485;
     1A6 9020 0179 LDS	R2,Buffer485
     1A8 9220 0079 STS	C51Buffer485,R2
(0078)  if(p_buf->Length ==5)
     1AA 01FA      MOVW	R30,R20
     1AB 8181      LDD	R24,Z+1
     1AC 8192      LDD	R25,Z+2
     1AD 3085      CPI	R24,5
     1AE E0A0      LDI	R26,0
     1AF 079A      CPC	R25,R26
     1B0 F4C9      BNE	0x01CA
(0079)  {//发送设置时间给51控制板
(0080)   	DayOfTime = ((unsigned int)p_buf->Data[0] << 8) | p_buf->Data[1];
     1B1 8025      LDD	R2,Z+5
     1B2 8034      LDD	R3,Z+4
     1B3 2444      CLR	R4
     1B4 9230 0076 STS	DayOfTime+1,R3
     1B6 9220 0075 STS	DayOfTime,R2
(0081)  	SecondOfTime = ((unsigned int)p_buf->Data[2] << 8) | p_buf->Data[3];
     1B8 8027      LDD	R2,Z+7
     1B9 8036      LDD	R3,Z+6
     1BA 2444      CLR	R4
     1BB 9230 0074 STS	SecondOfTime+1,R3
     1BD 9220 0073 STS	SecondOfTime,R2
(0082)  	if (p_buf->Address  != 0xff) 
     1BF 8180      LDD	R24,Z+0
     1C0 3F8F      CPI	R24,0xFF
     1C1 F049      BEQ	0x01CB
(0083) 	{
(0084) 	  	Cyc_manage |= 0x04;//打开更新51控制板的数据
     1C2 9180 0078 LDS	R24,Cyc_manage
     1C4 6084      ORI	R24,4
     1C5 9380 0078 STS	Cyc_manage,R24
(0085)         CommandReply(RESP_CMD_OK);
     1C7 E801      LDI	R16,0x81
     1C8 DF8C      RCALL	_CommandReply
(0086) 	}
(0087)  }
     1C9 C001      RJMP	0x01CB
(0088)  else if(TEST && p_buf->Address != 0xff)
     1CA C000      RJMP	0x01CB
     1CB 9159      LD	R21,Y+
     1CC 9149      LD	R20,Y+
     1CD 9508      RET
_GET_CARDSET:
  communication        --> R20
  count                --> R12
  point                --> R10
  p_buf                --> R22
     1CE 940E 0DCB CALL	push_xgsetF03C
     1D0 9721      SBIW	R28,1
(0089)        CommandReply(RESP_INVALID_DATA);
(0090) }
(0091) //------------------------------------------------------------------------------
(0092) //------------------------------------------------------------------------------
(0093) /*
(0094) 取系统卡注册表
(0095) 命令码:	CMD_GET_CARDSET 
(0096) 数据:		NONE
(0097) 正常回应数据:	
(0098) 	卡注册表数据结构
(0099) */
(0100) void GET_CARDSET(void)
(0101) {
(0102)   unsigned int point,count;
(0103)   struct StructOfProtocol *p_buf;
(0104)   struct data *communication;
(0105)   p_buf = (struct StructOfProtocol *)Buffer485;
     1D1 E769      LDI	R22,0x79
     1D2 E071      LDI	R23,1
(0106)   if(p_buf->Address==Device_Address)
     1D3 9020 0077 LDS	R2,Device_Address
     1D5 01FB      MOVW	R30,R22
     1D6 8030      LDD	R3,Z+0
     1D7 1432      CP	R3,R2
     1D8 F009      BEQ	0x01DA
     1D9 C03B      RJMP	0x0215
(0107)   {
(0108)     if(p_buf->Length==3)
     1DA 8181      LDD	R24,Z+1
     1DB 8192      LDD	R25,Z+2
     1DC 3083      CPI	R24,3
     1DD E0A0      LDI	R26,0
     1DE 079A      CPC	R25,R26
     1DF F009      BEQ	0x01E1
     1E0 C033      RJMP	0x0214
(0109)     {
(0110) 	   point = *(unsigned int *)p_buf->Data;
     1E1 80A4      LDD	R10,Z+4
     1E2 80B5      LDD	R11,Z+5
(0111) 	   if (point < sizeof(struct StructOfRegister))
     1E3 01C5      MOVW	R24,R10
     1E4 3F8C      CPI	R24,0xFC
     1E5 E0A5      LDI	R26,5
     1E6 079A      CPC	R25,R26
     1E7 F008      BCS	0x01E9
     1E8 C02A      RJMP	0x0213
(0112)        {//发送系统卡注册表给PC
(0113) 	     count = sizeof(struct StructOfRegister) - point;
     1E9 EF8C      LDI	R24,0xFC
     1EA E095      LDI	R25,5
     1EB 016C      MOVW	R12,R24
     1EC 18CA      SUB	R12,R10
     1ED 08DB      SBC	R13,R11
(0114)          if (count < 256 - 8) p_buf->Length = count + 1;
     1EE 01C6      MOVW	R24,R12
     1EF 3F88      CPI	R24,0xF8
     1F0 E0A0      LDI	R26,0
     1F1 079A      CPC	R25,R26
     1F2 F420      BCC	0x01F7
     1F3 9601      ADIW	R24,1
     1F4 8392      STD	Z+2,R25
     1F5 8381      STD	Z+1,R24
     1F6 C005      RJMP	0x01FC
(0115)          else  p_buf->Length = 256 - 8;
     1F7 EF88      LDI	R24,0xF8
     1F8 E090      LDI	R25,0
     1F9 01FB      MOVW	R30,R22
     1FA 8392      STD	Z+2,R25
     1FB 8381      STD	Z+1,R24
(0116)          point += CARDSET_Address;
     1FC 01C5      MOVW	R24,R10
     1FD 5481      SUBI	R24,0x41
     1FE 469B      SBCI	R25,0x6B
     1FF 015C      MOVW	R10,R24
(0117) 		 I2C_Initial();
     200 940E 05B1 CALL	_I2C_Initial
(0118) 	     AT24_Read((unsigned char *)&p_buf->Data,point,p_buf->Length-1);
     202 01FB      MOVW	R30,R22
     203 8181      LDD	R24,Z+1
     204 8192      LDD	R25,Z+2
     205 9701      SBIW	R24,1
     206 8388      STD	Y+0,R24
     207 0195      MOVW	R18,R10
     208 018F      MOVW	R16,R30
     209 5F0C      SUBI	R16,0xFC
     20A 4F1F      SBCI	R17,0xFF
     20B 940E 0615 CALL	_AT24_Read
(0119) 		 I2C_Close();
     20D 940E 05B6 CALL	_I2C_Close
(0120)   		 communication->pc_txd = 1; 
     20F E081      LDI	R24,1
     210 01FA      MOVW	R30,R20
     211 8381      STD	Z+1,R24
(0121) 	   }
     212 C002      RJMP	0x0215
(0122) 	   else if(TEST) CommandReply(RESP_INVALID_DATA);  
     213 C001      RJMP	0x0215
(0123) 	}
(0124) 	else if(TEST) CommandReply(RESP_INVALID_DATA);
     214 C000      RJMP	0x0215
(0125)   }
     215 9621      ADIW	R28,1
     216 940C 0DD4 JMP	pop_xgsetF03C
_SET_CARDSET:
  count                --> R10
  point                --> R22
  p_buf                --> R20
     218 940E 0DAF CALL	push_xgsetF00C
     21A 9721      SBIW	R28,1
(0126) }
(0127) //------------------------------------------------------------------------------
(0128) /*
(0129) 下载系统卡注册表
(0130) 命令码:	CMD_SET_CARDSET
(0131) 数据:  	卡注册表
(0132) 正常回应:	[OK]
(0133) */
(0134) void SET_CARDSET(void)
(0135) {
(0136)  unsigned int point,count;
(0137)  struct StructOfProtocol *p_buf;
(0138)  p_buf = (struct StructOfProtocol *)Buffer485;
     21B E749      LDI	R20,0x79
     21C E051      LDI	R21,1
(0139)  *C51Buffer485 = *Buffer485;
     21D 9020 0179 LDS	R2,Buffer485
     21F 9220 0079 STS	C51Buffer485,R2
(0140)  point = *(unsigned int *)p_buf->Data;
     221 01FA      MOVW	R30,R20

⌨️ 快捷键说明

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