📄 sd8060.lst
字号:
__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 + -