📄 emd.lst
字号:
a --> R22
b --> R20
j --> R10
012C D94A RCALL push_gset3
012D 2EA0 MOV R10,R16
(0178) }
(0179)
(0180) void lookup_led(unsigned char j)
(0181) {
(0182) unsigned char a,b;
(0183) WDR();
012E 95A8 WDR
(0184) j=(j*4)+2;
012F E084 LDI R24,4
0130 9D8A MUL R24,R10
0131 2D80 MOV R24,R0
0132 5F8E SUBI R24,0xFE
0133 2EA8 MOV R10,R24
(0185) a=EEPROM_read(j);
0134 2F08 MOV R16,R24
0135 D5F0 RCALL _EEPROM_read
0136 2F60 MOV R22,R16
(0186) j++;
0137 94A3 INC R10
(0187) b=EEPROM_read(j);
0138 2D0A MOV R16,R10
0139 D5EC RCALL _EEPROM_read
013A 2F40 MOV R20,R16
(0188) j++;
013B 94A3 INC R10
(0189) d3=a;
013C 9360012A STS d3,R22
(0190) d4=(b&0xf0)>>4;
013E 2F84 MOV R24,R20
013F 7F80 ANDI R24,0xF0
0140 9582 SWAP R24
0141 708F ANDI R24,0xF
0142 93800129 STS d4,R24
(0191) d5=(b&0x0f);
0144 2F84 MOV R24,R20
0145 708F ANDI R24,0xF
0146 93800128 STS d5,R24
(0192) if(d3<10) dipdata[3]=diptable[d3];
0148 306A CPI R22,0xA
0149 F450 BCC 0x0154
014A E386 LDI R24,0x36
014B E090 LDI R25,0
014C 2FE6 MOV R30,R22
014D 27FF CLR R31
014E 0FE8 ADD R30,R24
014F 1FF9 ADC R31,R25
0150 91E4 LPM R30,0(Z)
0151 93E00121 STS dipdata+3,R30
0153 C008 RJMP 0x015C
(0193) else
(0194) {dipdata[3]=diptable[0];d3=0;}
0154 E3E6 LDI R30,0x36
0155 E0F0 LDI R31,0
0156 91E4 LPM R30,0(Z)
0157 93E00121 STS dipdata+3,R30
0159 2422 CLR R2
015A 9220012A STS d3,R2
(0195) if(d4<10) dipdata[4]=diptable[d4];
015C 91800129 LDS R24,d4
015E 308A CPI R24,0xA
015F F458 BCC 0x016B
0160 E386 LDI R24,0x36
0161 E090 LDI R25,0
0162 91E00129 LDS R30,d4
0164 27FF CLR R31
0165 0FE8 ADD R30,R24
0166 1FF9 ADC R31,R25
0167 91E4 LPM R30,0(Z)
0168 93E00122 STS 0x122,R30
016A C008 RJMP 0x0173
(0196) else
(0197) {dipdata[4]=diptable[0];d4=0;}
016B E3E6 LDI R30,0x36
016C E0F0 LDI R31,0
016D 91E4 LPM R30,0(Z)
016E 93E00122 STS 0x122,R30
0170 2422 CLR R2
0171 92200129 STS d4,R2
(0198) if(d5<10) dipdata[5]=diptable[d5];
0173 91800128 LDS R24,d5
0175 308A CPI R24,0xA
0176 F458 BCC 0x0182
0177 E386 LDI R24,0x36
0178 E090 LDI R25,0
0179 91E00128 LDS R30,d5
017B 27FF CLR R31
017C 0FE8 ADD R30,R24
017D 1FF9 ADC R31,R25
017E 91E4 LPM R30,0(Z)
017F 93E00123 STS 0x123,R30
0181 C008 RJMP 0x018A
(0199) else
(0200) {dipdata[5]=diptable[0];d5=0;}
0182 E3E6 LDI R30,0x36
0183 E0F0 LDI R31,0
0184 91E4 LPM R30,0(Z)
0185 93E00123 STS 0x123,R30
0187 2422 CLR R2
0188 92200128 STS d5,R2
018A D8E4 RCALL pop_gset3
018B 9508 RET
_set_led:
c --> Y+1
b --> Y+1
a --> Y+1
j --> R20
d --> R22
e --> R10
i --> R12
018C D8E8 RCALL push_gset4
(0201) }
(0202) //设定模式
(0203) void set_led(void)
(0204) {
(0205) unsigned char i,j,a,b,c,d=0,e;
018D 2766 CLR R22
(0206) sec=30;
018E E18E LDI R24,0x1E
018F 93800104 STS sec,R24
(0207) flagh &=~0x01;
0191 91800103 LDS R24,flagh
0193 7F8E ANDI R24,0xFE
0194 93800103 STS flagh,R24
(0208) dipdata[0]=diptable[0]; //在上一行显示记忆体位置
0196 E3E6 LDI R30,0x36
0197 E0F0 LDI R31,0
0198 91E4 LPM R30,0(Z)
0199 93E0011E STS dipdata,R30
(0209) dipdata[1]=diptable[0];
019B E3E6 LDI R30,0x36
019C E0F0 LDI R31,0
019D 91E4 LPM R30,0(Z)
019E 93E0011F STS dipdata+1,R30
(0210) dipdata[2]=diptable[0];
01A0 E3E6 LDI R30,0x36
01A1 E0F0 LDI R31,0
01A2 91E4 LPM R30,0(Z)
01A3 93E00120 STS dipdata+2,R30
(0211) lookup_led(d); //下一行显示门牌号
01A5 2F06 MOV R16,R22
01A6 DF85 RCALL _lookup_led
(0212)
(0213) D1FC=1;
01A7 E081 LDI R24,1
01A8 93800130 STS D1FC,R24
01AA C001 RJMP 0x01AC
(0214) while(!(PIND&0x80))
(0215) {
(0216) WDR();
01AB 95A8 WDR
01AC 9B4F SBIS 0x09,7
01AD CFFD RJMP 0x01AB
01AE C278 RJMP 0x0427
(0217) }
(0218) while(!(flagh&0x01))
(0219) {
(0220) WDR();
01AF 95A8 WDR
(0221) i=key_1();
01B0 D81B RCALL _key_1
01B1 2EC0 MOV R12,R16
(0222) if(i==1) //设置闪烁位
01B2 3001 CPI R16,1
01B3 F009 BEQ 0x01B5
01B4 C04E RJMP 0x0203
(0223) {
(0224) WDR();
01B5 95A8 WDR
(0225) sec=30;
01B6 E18E LDI R24,0x1E
01B7 93800104 STS sec,R24
(0226) if((D3FC!=0)&&(D4FC!=0)&&(D5FC!=0))
01B9 9020012E LDS R2,D3FC
01BB 2022 TST R2
01BC F0A9 BEQ 0x01D2
01BD 9020012D LDS R2,D4FC
01BF 2022 TST R2
01C0 F089 BEQ 0x01D2
01C1 9020012C LDS R2,D5FC
01C3 2022 TST R2
01C4 F069 BEQ 0x01D2
(0227) {
(0228) D3FC=0;
01C5 2422 CLR R2
01C6 9220012E STS D3FC,R2
(0229) D4FC=0;
01C8 9220012D STS D4FC,R2
(0230) D5FC=0;
01CA 9220012C STS D5FC,R2
(0231) flagh |=0x01;
01CC 91800103 LDS R24,flagh
01CE 6081 ORI R24,1
01CF 93800103 STS flagh,R24
(0232) goto exit_1;
01D1 C031 RJMP 0x0203
(0233) }
(0234) if(D1FC!=0)
01D2 90200130 LDS R2,D1FC
01D4 2022 TST R2
01D5 F039 BEQ 0x01DD
(0235) {
(0236) D1FC=0;
01D6 2422 CLR R2
01D7 92200130 STS D1FC,R2
(0237) D3FC=1;
01D9 E081 LDI R24,1
01DA 9380012E STS D3FC,R24
(0238) goto exit_1;
01DC C026 RJMP 0x0203
(0239) }
(0240) if(D3FC!=0)
01DD 9020012E LDS R2,D3FC
01DF 2022 TST R2
01E0 F039 BEQ 0x01E8
(0241) {
(0242) D3FC=0;
01E1 2422 CLR R2
01E2 9220012E STS D3FC,R2
(0243) D4FC=1;
01E4 E081 LDI R24,1
01E5 9380012D STS D4FC,R24
(0244) goto exit_1;
01E7 C01B RJMP 0x0203
(0245) }
(0246) if(D4FC!=0)
01E8 9020012D LDS R2,D4FC
01EA 2022 TST R2
01EB F039 BEQ 0x01F3
(0247) {
(0248) D4FC=0;
01EC 2422 CLR R2
01ED 9220012D STS D4FC,R2
(0249) D5FC=1;
01EF E081 LDI R24,1
01F0 9380012C STS D5FC,R24
(0250) goto exit_1;
01F2 C010 RJMP 0x0203
(0251) }
(0252) if(D5FC!=0)
01F3 9020012C LDS R2,D5FC
01F5 2022 TST R2
01F6 F061 BEQ 0x0203
(0253) {
(0254) D5FC=1;
01F7 E081 LDI R24,1
01F8 9380012C STS D5FC,R24
(0255) D4FC=1;
01FA 9380012D STS D4FC,R24
(0256) D3FC=1;
01FC 9380012E STS D3FC,R24
(0257) DECODER_FLAG_L;
01FE 91800102 LDS R24,flag
0200 7F8B ANDI R24,0xFB
0201 93800102 STS flag,R24
(0258) goto exit_1;
(0259) }
(0260) exit_1:;
(0261) }
(0262) e=(key_2());
0203 D7E3 RCALL _key_2
0204 2EA0 MOV R10,R16
(0263) if(e==1) //闪烁数据加一
0205 3001 CPI R16,1
0206 F009 BEQ 0x0208
0207 C0AB RJMP 0x02B3
(0264) {
(0265) sec=30;
0208 E18E LDI R24,0x1E
0209 93800104 STS sec,R24
(0266) if(D1FC!=0)
020B 90200130 LDS R2,D1FC
020D 2022 TST R2
020E F409 BNE 0x0210
020F C037 RJMP 0x0247
(0267) {
(0268) if(d<99) d++; //转成BCD到显示
0210 3663 CPI R22,0x63
0211 F408 BCC 0x0213
0212 9563 INC R22
(0269) dipdata[1]=diptable[(d/10)];
0213 E02A LDI R18,0xA
0214 E030 LDI R19,0
0215 2F06 MOV R16,R22
0216 2711 CLR R17
0217 D810 RCALL div16s
0218 01F8 MOVW R30,R16
0219 E386 LDI R24,0x36
021A E090 LDI R25,0
021B 0FE8 ADD R30,R24
021C 1FF9 ADC R31,R25
021D 91E4 LPM R30,0(Z)
021E 93E0011F STS dipdata+1,R30
(0270) dipdata[2]=diptable[d%10];
0220 E02A LDI R18,0xA
0221 E030 LDI R19,0
0222 2F06 MOV R16,R22
0223 2711 CLR R17
0224 D7FF RCALL mod16s
0225 01F8 MOVW R30,R16
0226 E386 LDI R24,0x36
0227 E090 LDI R25,0
0228 0FE8 ADD R30,R24
0229 1FF9 ADC R31,R25
022A 91E4 LPM R30,0(Z)
022B 93E00120 STS dipdata+2,R30
(0271) lookup_led(d);
022D 2F06 MOV R16,R22
022E DEFD RCALL _lookup_led
(0272) if((d3==0)&&(d4==0)&&(d5==0)) //未用过的EEPROM
022F 9020012A LDS R2,d3
0231 2022 TST R2
0232 F4A1 BNE 0x0247
0233 90200129 LDS R2,d4
0235 2022 TST R2
0236 F481 BNE 0x0247
0237 90200128 LDS R2,d5
0239 2022 TST R2
023A F461 BNE 0x0247
(0273) {
(0274) EEPROM_write((d*4)+2,0);
023B 2722 CLR R18
023C E084 LDI R24,4
023D 9F86 MUL R24,R22
023E 2D00 MOV R16,R0
023F 5F0E SUBI R16,0xFE
0240 D4DA RCALL _EEPROM_write
(0275) EEPROM_write((d*4)+3,0);
0241 2722 CLR R18
0242 E084 LDI R24,4
0243 9F86 MUL R24,R22
0244 2D00 MOV R16,R0
0245 5F0D SUBI R16,0xFD
0246 D4D4 RCALL _EEPROM_write
(0276) }
(0277) }
(0278) if((D3FC!=0)&&(D4FC==0))
0247 9020012E LDS R2,D3FC
0249 2022 TST R2
024A F0E1 BEQ 0x0267
024B 9020012D LDS R2,D4FC
024D 2022 TST R2
024E F4C1 BNE 0x0267
(0279) {
(0280) if(d3<9) d3++;
024F 9180012A LDS R24,d3
0251 3089 CPI R24,0x9
0252 F418 BCC 0x0256
0253 5F8F SUBI R24,0xFF
0254 9380012A STS d3,R24
(0281) dipdata[3]=diptable[d3];
0256 E386 LDI R24,0x36
0257 E090 LDI R25,0
0258 91E0012A LDS R30,d3
025A 27FF CLR R31
025B 0FE8 ADD R30,R24
025C 1FF9 ADC R31,R25
025D 91E4 LPM R30,0(Z)
025E 93E00121 STS dipdata+3,R30
(0282) EEPROM_write((d*4)+2,d3);
0260 9120012A LDS R18,d3
0262 E084 LDI R24,4
0263 9F86 MUL R24,R22
0264 2D00 MOV R16,R0
0265 5F0E SUBI R16,0xFE
0266 D4B4 RCALL _EEPROM_write
(0283) }
(0284) if((D4FC!=0)&&(D5FC==0))
0267 9020012D LDS R2,D4FC
0269 2022 TST R2
026A F111 BEQ 0x028D
026B 9020012C LDS R2,D5FC
026D 2022 TST R2
026E F4F1 BNE 0x028D
(0285) {
(0286) if(d4<9) d4++;
026F 91800129 LDS R24,d4
0271 3089 CPI R24,0x9
0272 F418 BCC 0x0276
0273 5F8F SUBI R24,0xFF
0274 93800129 STS d4,R24
(0287) dipdata[4]=diptable[d4];
0276 E386 LDI R24,0x36
0277 E090 LDI R25,0
0278 91E00129 LDS R30,d4
027A 27FF CLR R31
027B 0FE8 ADD R30,R24
027C 1FF9 ADC R31,R25
027D 91E4 LPM R30,0(Z)
027E 93E00122 STS 0x122,R30
(0288) j=((d4<<4)+d5);
0280 90200128 LDS R2,d5
0282 91400129 LDS R20,d4
0284 704F ANDI R20,0xF
0285 9542 SWAP R20
0286 0D42 ADD R20,R2
(0289) EEPROM_write((d*4)+3,j);
0287 2F24 MOV R18,R20
0288 E084 LDI R24,4
0289 9F86 MUL R24,R22
028A 2D00 MOV R16,R0
028B 5F0D SUBI R16,0xFD
028C D48E RCALL _EEPROM_write
(0290) }
(0291) if((D5FC!=0)&&(D4FC==0))
028D 9020012C LDS R2,D5FC
028F 2022 TST R2
0290 F111 BEQ 0x02B3
0291 9020012D LDS R2,D4FC
0293 2022 TST R2
0294 F4F1 BNE 0x02B3
(0292) {
(0293) if(d5<9) d5++;
0295 91800128 LDS R24,d5
0297 3089 CPI R24,0x9
0298 F418 BCC 0x029C
0299 5F8F SUBI R24,0xFF
029A 93800128 STS d5,R24
(0294) dipdata[5]=diptable[d5];
029C E386 LDI R24,0x36
029D E090 LDI R25,0
029E 91E00128 LDS R30,d5
02A0 27FF CLR R31
02A1 0FE8 ADD R30,R24
02A2 1FF9 ADC R31,R25
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -