📄 light.lst
字号:
01F0 718F ANDI R24,0x1F
01F1 9380008B STS charIndex,R24
(0136) cDataBuff[charIndex--]=0x0a;//间隔空格符
01F3 2E28 MOV R2,R24
01F4 2433 CLR R3
01F5 5081 SUBI R24,1
01F6 9380008B STS charIndex,R24
01F8 E681 LDI R24,0x61
01F9 E090 LDI R25,0
01FA 2DE2 MOV R30,R2
01FB 27FF CLR R31
01FC 0FE8 ADD R30,R24
01FD 1FF9 ADC R31,R25
01FE E08A LDI R24,0xA
01FF 8380 STD Z+0,R24
(0137) charTemp=charData%10;
0200 E01A LDI R17,0xA
0201 9100008E LDS R16,charData
0203 D0C6 RCALL mod8u
0204 2F40 MOV R20,R16
(0138) charIndex&=0b00011111;//检查charIndex,防止数据超出0~31范围
0205 9180008B LDS R24,charIndex
0207 718F ANDI R24,0x1F
0208 9380008B STS charIndex,R24
(0139) cDataBuff[charIndex--]=charTemp;
020A 2E28 MOV R2,R24
020B 2433 CLR R3
020C 5081 SUBI R24,1
020D 9380008B STS charIndex,R24
020F E681 LDI R24,0x61
0210 E090 LDI R25,0
0211 2DE2 MOV R30,R2
0212 27FF CLR R31
0213 0FE8 ADD R30,R24
0214 1FF9 ADC R31,R25
0215 8340 STD Z+0,R20
(0140) charData/=10;
0216 E01A LDI R17,0xA
0217 9100008E LDS R16,charData
0219 D0B2 RCALL div8u
021A 9300008E STS charData,R16
(0141) charTemp=charData%10;
021C E01A LDI R17,0xA
021D D0AC RCALL mod8u
021E 2F40 MOV R20,R16
(0142) charIndex&=0b00011111;//检查charIndex,防止数据超出0~31范围
021F 9180008B LDS R24,charIndex
0221 718F ANDI R24,0x1F
0222 9380008B STS charIndex,R24
(0143) cDataBuff[charIndex--]=charTemp;
0224 2E28 MOV R2,R24
0225 2433 CLR R3
0226 5081 SUBI R24,1
0227 9380008B STS charIndex,R24
0229 E681 LDI R24,0x61
022A E090 LDI R25,0
022B 2DE2 MOV R30,R2
022C 27FF CLR R31
022D 0FE8 ADD R30,R24
022E 1FF9 ADC R31,R25
022F 8340 STD Z+0,R20
(0144) charData/=10;
0230 E01A LDI R17,0xA
0231 9100008E LDS R16,charData
0233 D098 RCALL div8u
0234 9300008E STS charData,R16
(0145) cDataBuff[charIndex]=charData;
0236 E681 LDI R24,0x61
0237 E090 LDI R25,0
0238 91E0008B LDS R30,charIndex
023A 27FF CLR R31
023B 0FE8 ADD R30,R24
023C 1FF9 ADC R31,R25
023D 2E20 MOV R2,R16
023E 8220 STD Z+0,R2
(0146) charIndex+=4;//指向末尾空位
023F 9180008B LDS R24,charIndex
0241 5F8C SUBI R24,0xFC
0242 9380008B STS charIndex,R24
(0147) }
(0148) break;
(0149) }
(0150) }
(0151) break;
0244 C079 RJMP 0x02BE
(0152) case SR_STOP_RESTART://收到STOP信号或者RESTART
(0153) {
(0154) MT_ACK;
0245 EC85 LDI R24,0xC5
0246 BF86 OUT 0x36,R24
(0155) }
(0156) break;
0247 C076 RJMP 0x02BE
(0157) case ST_SLA_ACK://收到读信号,将(最后一个-NT_NACK、普通数据-MT_ACK)数据发送出去
(0158) {
(0159) /*charTemp=rom_read((unsigned int)charAddr);
(0160) TWDR=charTemp;*/
(0161) TWDR=0xdd;//测试用,发送测试数据。MEGA8的EEPROM的读速度跟不上TWI
0248 ED8D LDI R24,0xDD
0249 B983 OUT 0x03,R24
(0162) MT_ACK;
024A EC85 LDI R24,0xC5
024B BF86 OUT 0x36,R24
(0163) }
(0164) break;
024C C071 RJMP 0x02BE
(0165) case ST_DATA_ACK://主机要求继续发送数据
(0166) {
(0167) TWDR=cDataBuff[++charAddr];
024D 9180008D LDS R24,charAddr
024F 5F8F SUBI R24,0xFF
0250 2E28 MOV R2,R24
0251 9220008D STS charAddr,R2
0253 E681 LDI R24,0x61
0254 E090 LDI R25,0
0255 2DE2 MOV R30,R2
0256 27FF CLR R31
0257 0FE8 ADD R30,R24
0258 1FF9 ADC R31,R25
0259 8020 LDD R2,Z+0
025A B823 OUT 0x03,R2
(0168) MT_ACK;
025B EC85 LDI R24,0xC5
025C BF86 OUT 0x36,R24
(0169) }
(0170) break;
025D C060 RJMP 0x02BE
(0171) case ST_DATA_NOACK://数据发送完毕
(0172) {
(0173) MT_ACK;
025E EC85 LDI R24,0xC5
025F BF86 OUT 0x36,R24
(0174) }
(0175) break;
0260 C05D RJMP 0x02BE
(0176) default://出现异常中断时,通过MEGA8 2#显示
(0177) {
(0178) charData=TWI_STATE;
0261 9360008E STS charData,R22
(0179) charIndex+=3;
0263 9180008B LDS R24,charIndex
0265 5F8D SUBI R24,0xFD
0266 9380008B STS charIndex,R24
(0180) charIndex&=0b00011111;//检查charIndex,防止数据超出0~31范围
0268 718F ANDI R24,0x1F
0269 9380008B STS charIndex,R24
(0181) cDataBuff[charIndex--]=0x0b;//间隔空格符
026B 2E28 MOV R2,R24
026C 2433 CLR R3
026D 5081 SUBI R24,1
026E 9380008B STS charIndex,R24
0270 E681 LDI R24,0x61
0271 E090 LDI R25,0
0272 2DE2 MOV R30,R2
0273 27FF CLR R31
0274 0FE8 ADD R30,R24
0275 1FF9 ADC R31,R25
0276 E08B LDI R24,0xB
0277 8380 STD Z+0,R24
(0182) charTemp=charData%10;
0278 E01A LDI R17,0xA
0279 9100008E LDS R16,charData
027B D04E RCALL mod8u
027C 2F40 MOV R20,R16
(0183) charIndex&=0b00011111;//检查charIndex,防止数据超出0~31范围
027D 9180008B LDS R24,charIndex
027F 718F ANDI R24,0x1F
0280 9380008B STS charIndex,R24
(0184) cDataBuff[charIndex--]=charTemp;
0282 2E28 MOV R2,R24
0283 2433 CLR R3
0284 5081 SUBI R24,1
0285 9380008B STS charIndex,R24
0287 E681 LDI R24,0x61
0288 E090 LDI R25,0
0289 2DE2 MOV R30,R2
028A 27FF CLR R31
028B 0FE8 ADD R30,R24
028C 1FF9 ADC R31,R25
028D 8340 STD Z+0,R20
(0185) charData/=10;
028E E01A LDI R17,0xA
028F 9100008E LDS R16,charData
0291 D03A RCALL div8u
0292 9300008E STS charData,R16
(0186) charTemp=charData%10;
0294 E01A LDI R17,0xA
0295 D034 RCALL mod8u
0296 2F40 MOV R20,R16
(0187) charIndex&=0b00011111;//检查charIndex,防止数据超出0~31范围
0297 9180008B LDS R24,charIndex
0299 718F ANDI R24,0x1F
029A 9380008B STS charIndex,R24
(0188) cDataBuff[charIndex--]=charTemp;
029C 2E28 MOV R2,R24
029D 2433 CLR R3
029E 5081 SUBI R24,1
029F 9380008B STS charIndex,R24
02A1 E681 LDI R24,0x61
02A2 E090 LDI R25,0
02A3 2DE2 MOV R30,R2
02A4 27FF CLR R31
02A5 0FE8 ADD R30,R24
02A6 1FF9 ADC R31,R25
02A7 8340 STD Z+0,R20
(0189) charData/=10;
02A8 E01A LDI R17,0xA
02A9 9100008E LDS R16,charData
02AB D020 RCALL div8u
02AC 9300008E STS charData,R16
(0190) cDataBuff[charIndex]=charData;
02AE E681 LDI R24,0x61
02AF E090 LDI R25,0
02B0 91E0008B LDS R30,charIndex
02B2 27FF CLR R31
02B3 0FE8 ADD R30,R24
02B4 1FF9 ADC R31,R25
02B5 2E20 MOV R2,R16
02B6 8220 STD Z+0,R2
(0191) charIndex+=4;//指向末尾空位
02B7 9180008B LDS R24,charIndex
02B9 5F8C SUBI R24,0xFC
02BA 9380008B STS charIndex,R24
(0192) MT_ACK;
02BC EC85 LDI R24,0xC5
02BD BF86 OUT 0x36,R24
(0193) }
(0194) }
FILE: <library>
02BE D023 RCALL pop_gset2
02BF 9029 LD R2,Y+
02C0 BE2F OUT 0x3F,R2
02C1 91F9 LD R31,Y+
02C2 91E9 LD R30,Y+
02C3 9199 LD R25,Y+
02C4 9189 LD R24,Y+
02C5 9119 LD R17,Y+
02C6 9109 LD R16,Y+
02C7 9039 LD R3,Y+
02C8 9029 LD R2,Y+
02C9 9518 RETI
mod8u:
02CA 9468 BSET 6
02CB C001 RJMP xdiv8u
div8u:
02CC 94E8 BCLR 6
xdiv8u:
02CD 932A ST R18,-Y
02CE 92FA ST R15,-Y
02CF 92EA ST R14,-Y
02D0 24FF CLR R15
02D1 24EE CLR R14
02D2 E120 LDI R18,0x10
02D3 0F00 LSL R16
02D4 1CFF ROL R15
02D5 1CEE ROL R14
02D6 16E1 CP R14,R17
02D7 F010 BCS 0x02DA
02D8 1AE1 SUB R14,R17
02D9 9503 INC R16
02DA 952A DEC R18
02DB F7B9 BNE 0x02D3
02DC F40E BRTC 0x02DE
02DD 2D0E MOV R16,R14
02DE 90E9 LD R14,Y+
02DF 90F9 LD R15,Y+
02E0 9129 LD R18,Y+
02E1 9508 RET
pop_gset2:
02E2 E0E2 LDI R30,2
02E3 C004 RJMP pop
push_gset1:
02E4 935A ST R21,-Y
02E5 934A ST R20,-Y
02E6 9508 RET
pop_gset1:
02E7 E0E1 LDI R30,1
pop:
02E8 9149 LD R20,Y+
02E9 9159 LD R21,Y+
02EA FDE0 SBRC R30,0
02EB 9508 RET
02EC 9169 LD R22,Y+
02ED 9179 LD R23,Y+
02EE FDE1 SBRC R30,1
02EF 9508 RET
02F0 90A9 LD R10,Y+
02F1 90B9 LD R11,Y+
02F2 FDE2 SBRC R30,2
02F3 9508 RET
02F4 90C9 LD R12,Y+
02F5 90D9 LD R13,Y+
02F6 FDE3 SBRC R30,3
02F7 9508 RET
02F8 90E9 LD R14,Y+
02F9 90F9 LD R15,Y+
02FA 9508 RET
push_gset2:
02FB 937A ST R23,-Y
02FC 936A ST R22,-Y
02FD CFE6 RJMP push_gset1
push_lset:
02FE 93FA ST R31,-Y
02FF 93EA ST R30,-Y
0300 93BA ST R27,-Y
0301 93AA ST R26,-Y
0302 939A ST R25,-Y
0303 938A ST R24,-Y
0304 933A ST R19,-Y
0305 932A ST R18,-Y
0306 931A ST R17,-Y
0307 930A ST R16,-Y
0308 929A ST R9,-Y
0309 928A ST R8,-Y
030A 927A ST R7,-Y
030B 926A ST R6,-Y
030C 925A ST R5,-Y
030D 924A ST R4,-Y
030E 923A ST R3,-Y
030F 922A ST R2,-Y
0310 921A ST R1,-Y
0311 920A ST R0,-Y
0312 B60F IN R0,0x3F
0313 920A ST R0,-Y
0314 9508 RET
pop_lset:
0315 9009 LD R0,Y+
0316 BE0F OUT 0x3F,R0
0317 9009 LD R0,Y+
0318 9019 LD R1,Y+
0319 9029 LD R2,Y+
031A 9039 LD R3,Y+
031B 9049 LD R4,Y+
031C 9059 LD R5,Y+
031D 9069 LD R6,Y+
031E 9079 LD R7,Y+
031F 9089 LD R8,Y+
0320 9099 LD R9,Y+
0321 9109 LD R16,Y+
0322 9119 LD R17,Y+
0323 9129 LD R18,Y+
0324 9139 LD R19,Y+
0325 9189 LD R24,Y+
0326 9199 LD R25,Y+
0327 91A9 LD R26,Y+
0328 91B9 LD R27,Y+
0329 91E9 LD R30,Y+
032A 91F9 LD R31,Y+
032B 9508 RET
lsl8:
032C 2311 TST R17
032D F019 BEQ 0x0331
032E 0F00 LSL R16
032F 951A DEC R17
0330 CFFB RJMP lsl8
0331 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -