📄 main.s
字号:
.dbline 185
; a=EEPROM_read(j);
mov R16,R24
rcall _EEPROM_read
mov R22,R16
.dbline 186
; j++;
inc R10
.dbline 187
; b=EEPROM_read(j);
mov R16,R10
rcall _EEPROM_read
mov R20,R16
.dbline 188
; j++;
inc R10
.dbline 189
; d3=a;
sts _d3,R22
.dbline 190
; d4=(b&0xf0)>>4;
mov R24,R20
andi R24,240
swap R24
andi R24,#0x0F
sts _d4,R24
.dbline 191
; d5=(b&0x0f);
mov R24,R20
andi R24,15
sts _d5,R24
.dbline 192
; if(d3<10) dipdata[3]=diptable[d3];
cpi R22,10
brsh L41
.dbline 192
ldi R24,<_diptable
ldi R25,>_diptable
mov R30,R22
clr R31
add R30,R24
adc R31,R25
lpm R30,Z
sts _dipdata+3,R30
rjmp L42
L41:
.dbline 194
; else
; {dipdata[3]=diptable[0];d3=0;}
.dbline 194
ldi R30,<_diptable
ldi R31,>_diptable
lpm R30,Z
sts _dipdata+3,R30
.dbline 194
clr R2
sts _d3,R2
.dbline 194
L42:
.dbline 195
; if(d4<10) dipdata[4]=diptable[d4];
lds R24,_d4
cpi R24,10
brsh L45
.dbline 195
ldi R24,<_diptable
ldi R25,>_diptable
lds R30,_d4
clr R31
add R30,R24
adc R31,R25
lpm R30,Z
sts _dipdata+4,R30
rjmp L46
L45:
.dbline 197
; else
; {dipdata[4]=diptable[0];d4=0;}
.dbline 197
ldi R30,<_diptable
ldi R31,>_diptable
lpm R30,Z
sts _dipdata+4,R30
.dbline 197
clr R2
sts _d4,R2
.dbline 197
L46:
.dbline 198
; if(d5<10) dipdata[5]=diptable[d5];
lds R24,_d5
cpi R24,10
brsh L49
.dbline 198
ldi R24,<_diptable
ldi R25,>_diptable
lds R30,_d5
clr R31
add R30,R24
adc R31,R25
lpm R30,Z
sts _dipdata+5,R30
rjmp L50
L49:
.dbline 200
.dbline 200
ldi R30,<_diptable
ldi R31,>_diptable
lpm R30,Z
sts _dipdata+5,R30
.dbline 200
clr R2
sts _d5,R2
.dbline 200
L50:
.dbline -2
L40:
rcall pop_gset3
.dbline 0 ; func end
ret
.dbsym r a 22 c
.dbsym r b 20 c
.dbsym r j 10 c
.dbend
.dbfunc e set_led _set_led fV
; c -> <dead>
; b -> <dead>
; a -> <dead>
; j -> R20
; d -> R22
; e -> R10
; i -> R12
.even
_set_led::
rcall push_gset4
.dbline -1
.dbline 204
; else
; {dipdata[5]=diptable[0];d5=0;}
; }
; //设定模式
; void set_led(void)
; {
.dbline 205
; unsigned char i,j,a,b,c,d=0,e;
clr R22
.dbline 206
; sec=30;
ldi R24,30
sts _sec,R24
.dbline 207
; flagh &=~0x01;
lds R24,_flagh
andi R24,254
sts _flagh,R24
.dbline 208
; dipdata[0]=diptable[0]; //在上一行显示记忆体位置
ldi R30,<_diptable
ldi R31,>_diptable
lpm R30,Z
sts _dipdata,R30
.dbline 209
; dipdata[1]=diptable[0];
ldi R30,<_diptable
ldi R31,>_diptable
lpm R30,Z
sts _dipdata+1,R30
.dbline 210
; dipdata[2]=diptable[0];
ldi R30,<_diptable
ldi R31,>_diptable
lpm R30,Z
sts _dipdata+2,R30
.dbline 211
; lookup_led(d); //下一行显示门牌号
mov R16,R22
rcall _lookup_led
.dbline 213
;
; D1FC=1;
ldi R24,1
sts _D1FC,R24
rjmp L57
L56:
.dbline 215
.dbline 216
wdr
.dbline 217
L57:
.dbline 214
; while(!(PIND&0x80))
sbis 0x9,7
rjmp L56
rjmp L60
L59:
.dbline 219
; {
; WDR();
; }
; while(!(flagh&0x01))
; {
.dbline 220
; WDR();
wdr
.dbline 221
; i=key_1();
rcall _key_1
mov R12,R16
.dbline 222
; if(i==1) //设置闪烁位
cpi R16,1
breq X0
rjmp L62
X0:
.dbline 223
; {
.dbline 224
; WDR();
wdr
.dbline 225
; sec=30;
ldi R24,30
sts _sec,R24
.dbline 226
; if((D3FC!=0)&&(D4FC!=0)&&(D5FC!=0))
lds R2,_D3FC
tst R2
breq L64
lds R2,_D4FC
tst R2
breq L64
lds R2,_D5FC
tst R2
breq L64
.dbline 227
; {
.dbline 228
; D3FC=0;
clr R2
sts _D3FC,R2
.dbline 229
; D4FC=0;
sts _D4FC,R2
.dbline 230
; D5FC=0;
sts _D5FC,R2
.dbline 231
; flagh |=0x01;
lds R24,_flagh
ori R24,1
sts _flagh,R24
.dbline 232
; goto exit_1;
rjmp L66
L64:
.dbline 234
; }
; if(D1FC!=0)
lds R2,_D1FC
tst R2
breq L67
.dbline 235
; {
.dbline 236
; D1FC=0;
clr R2
sts _D1FC,R2
.dbline 237
; D3FC=1;
ldi R24,1
sts _D3FC,R24
.dbline 238
; goto exit_1;
rjmp L66
L67:
.dbline 240
; }
; if(D3FC!=0)
lds R2,_D3FC
tst R2
breq L69
.dbline 241
; {
.dbline 242
; D3FC=0;
clr R2
sts _D3FC,R2
.dbline 243
; D4FC=1;
ldi R24,1
sts _D4FC,R24
.dbline 244
; goto exit_1;
rjmp L66
L69:
.dbline 246
; }
; if(D4FC!=0)
lds R2,_D4FC
tst R2
breq L71
.dbline 247
; {
.dbline 248
; D4FC=0;
clr R2
sts _D4FC,R2
.dbline 249
; D5FC=1;
ldi R24,1
sts _D5FC,R24
.dbline 250
; goto exit_1;
rjmp L66
L71:
.dbline 252
; }
; if(D5FC!=0)
lds R2,_D5FC
tst R2
breq L73
.dbline 253
; {
.dbline 254
; D5FC=1;
ldi R24,1
sts _D5FC,R24
.dbline 255
; D4FC=1;
sts _D4FC,R24
.dbline 256
; D3FC=1;
sts _D3FC,R24
.dbline 257
; DECODER_FLAG_L;
lds R24,_flag
andi R24,251
sts _flag,R24
.dbline 258
; goto exit_1;
L73:
L66:
.dbline 260
; }
; exit_1:;
.dbline 261
; }
L62:
.dbline 262
; e=(key_2());
rcall _key_2
mov R10,R16
.dbline 263
; if(e==1) //闪烁数据加一
cpi R16,1
breq X1
rjmp L75
X1:
.dbline 264
; {
.dbline 265
; sec=30;
ldi R24,30
sts _sec,R24
.dbline 266
; if(D1FC!=0)
lds R2,_D1FC
tst R2
brne X2
rjmp L77
X2:
.dbline 267
; {
.dbline 268
; if(d<99) d++; //转成BCD到显示
cpi R22,99
brsh L79
.dbline 268
inc R22
L79:
.dbline 269
; dipdata[1]=diptable[(d/10)];
ldi R18,10
ldi R19,0
mov R16,R22
clr R17
rcall div16s
movw R30,R16
ldi R24,<_diptable
ldi R25,>_diptable
add R30,R24
adc R31,R25
lpm R30,Z
sts _dipdata+1,R30
.dbline 270
; dipdata[2]=diptable[d%10];
ldi R18,10
ldi R19,0
mov R16,R22
clr R17
rcall mod16s
movw R30,R16
ldi R24,<_diptable
ldi R25,>_diptable
add R30,R24
adc R31,R25
lpm R30,Z
sts _dipdata+2,R30
.dbline 271
; lookup_led(d);
mov R16,R22
rcall _lookup_led
.dbline 272
; if((d3==0)&&(d4==0)&&(d5==0)) //未用过的EEPROM
lds R2,_d3
tst R2
brne L83
lds R2,_d4
tst R2
brne L83
lds R2,_d5
tst R2
brne L83
.dbline 273
; {
.dbline 274
; EEPROM_write((d*4)+2,0);
clr R18
ldi R24,4
mul R24,R22
mov R16,R0
subi R16,254 ; addi 2
rcall _EEPROM_write
.dbline 275
; EEPROM_write((d*4)+3,0);
clr R18
ldi R24,4
mul R24,R22
mov R16,R0
subi R16,253 ; addi 3
rcall _EEPROM_write
.dbline 276
; }
L83:
.dbline 277
; }
L77:
.dbline 278
; if((D3FC!=0)&&(D4FC==0))
lds R2,_D3FC
tst R2
breq L85
lds R2,_D4FC
tst R2
brne L85
.dbline 279
; {
.dbline 280
; if(d3<9) d3++;
lds R24,_d3
cpi R24,9
brsh L87
.dbline 280
subi R24,255 ; addi 1
sts _d3,R24
L87:
.dbline 281
; dipdata[3]=diptable[d3];
ldi R24,<_diptable
ldi R25,>_diptable
lds R30,_d3
clr R31
add R30,R24
adc R31,R25
lpm R30,Z
sts _dipdata+3,R30
.dbline 282
; EEPROM_write((d*4)+2,d3);
lds R18,_d3
ldi R24,4
mul R24,R22
mov R16,R0
subi R16,254 ; addi 2
rcall _EEPROM_write
.dbline 283
; }
L85:
.dbline 284
; if((D4FC!=0)&&(D5FC==0))
lds R2,_D4FC
tst R2
breq L90
lds R2,_D5FC
tst R2
brne L90
.dbline 285
; {
.dbline 286
; if(d4<9) d4++;
lds R24,_d4
cpi R24,9
brsh L92
.dbline 286
subi R24,255 ; addi 1
sts _d4,R24
L92:
.dbline 287
; dipdata[4]=diptable[d4];
ldi R24,<_diptable
ldi R25,>_diptable
lds R30,_d4
clr R31
add R30,R24
adc R31,R25
lpm R30,Z
sts _dipdata+4,R30
.dbline 288
; j=((d4<<4)+d5);
lds R2,_d5
lds R20,_d4
andi R20,#0x0F
swap R20
add R20,R2
.dbline 289
; EEPROM_write((d*4)+3,j);
mov R18,R20
ldi R24,4
mul R24,R22
mov R16,R0
subi R16,253 ; addi 3
rcall _EEPROM_write
.dbline 290
; }
L90:
.dbline 291
; if((D5FC!=0)&&(D4FC==0))
lds R2,_D5FC
tst R2
breq L95
lds R2,_D4FC
tst R2
brne L95
.dbline 292
; {
.dbline 293
; if(d5<9) d5++;
lds R24,_d5
cpi R24,9
brsh L97
.dbline 293
subi R24,255 ; addi 1
sts _d5,R24
L97:
.dbline 294
; dipdata[5]=diptable[d5];
ldi R24,<_diptable
ldi R25,>_diptable
lds R30,_d5
clr R31
add R30,R24
adc R31,R25
lpm R30,Z
sts _dipdata+5,R30
.dbline 295
; j=((d4<<4)+d5);
lds R2,_d5
lds R20,_d4
andi R20,#0x0F
swap R20
add R20,R2
.dbline 296
; EEPROM_write((d*4)+3,j);
mov R18,R20
ldi R24,4
mul R24,R22
mov R16,R0
subi R16,253 ; addi 3
rcall _EEPROM_write
.dbline 297
; }
L95:
.dbline 298
; }
L75:
.dbline 299
; if(e==2)
mov R24,R10
cpi R24,2
brne L100
.dbline 300
; {
.dbline 301
; if((PIND&0x20)==0)
sbic 0x9,5
rjmp L102
.dbline 302
; {
.dbline 303
; for(i=0;i<255;i++)
clr R12
rjmp L107
L104:
.dbline 304
.dbline 305
ldi R18,255
mov R16,R12
rcall _EEPROM_write
.dbline 306
L105:
.dbline 303
inc R12
L107:
.dbline 303
mov R24,R12
cpi R24,255
brlo L104
.dbline 307
; {
; EEPROM_write(i,0xff);
; }
; flagh |=0x01;
lds R24,_flagh
ori R24,1
sts _flagh,R24
.dbline 308
; SPFC=1;
ldi R24,1
sts _SPFC,R24
.dbline 309
; }
L102:
.dbline 310
; }
L100:
.dbline 311
; e=(key_3());
rcall _key_3
mov R10,R16
.dbline 312
; if(e==1) //闪烁数据减一
cpi R16,1
breq X3
rjmp L108
X3:
.dbline 313
; {
.dbline 314
; sec=30;
ldi R24,30
sts _sec,R24
.dbline 315
; if(D1FC!=0)
lds R2,_D1FC
tst R2
breq L110
.dbline 316
; {
.dbline 317
; if(d!=0) d--; //转成BCD到显示
tst R22
breq L112
.dbline 317
dec R22
L112:
.dbline 318
; dipdata[1]=diptable[(d/10)];
ldi R18,10
ldi R19,0
mov R16,R22
clr R17
rcall div16s
movw R30,R16
ldi R24,<_diptable
ldi R25,>_diptable
add R30,R24
adc R31,R25
lpm R30,Z
sts _dipdata+1,R30
.dbline 319
; dipdata[2]=diptable[d%10];
ldi R18,10
ldi R19,0
mov R16,R22
clr R17
rcall mod16s
movw R30,R16
ldi R24,<_diptable
ldi R25,>_diptable
add R30,R24
adc R31,R25
lpm R30,Z
sts _dipdata+2,R30
.dbline 320
; lookup_led(d);
mov R16,R22
rcall _lookup_led
.dbline 321
; }
L110:
.dbline 322
; if((D3FC!=0)&&(D4FC==0))
lds R2,_D3FC
tst R2
breq L116
lds R2,_D4FC
tst R2
brne L116
.dbline 323
; {
.dbline 324
; if(d3!=0) d3--;
lds R2,_d3
tst R2
breq L118
.dbline 324
mov R24,R2
subi R24,1
sts _d3,R24
L118:
.dbline 325
; dipdata[3]=diptable[d3];
ldi R24,<_diptable
ldi R25,>_diptable
lds R30,_d3
clr R31
add R30,R24
adc R31,R25
lpm R30,Z
sts _dipdata+3,R30
.dbline 326
; EEPROM_write((d*4)+2,d3);
lds R18,_d3
ldi R24,4
mul R24,R22
mov R16,R0
subi R16,254 ; addi 2
rcall _EEPROM_write
.dbline 327
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -