📄 drive.s
字号:
cpi R24,1
ldi R30,0
cpc R25,R30
breq L21
cpi R24,2
ldi R30,0
cpc R25,R30
breq L22
cpi R24,3
ldi R30,0
cpc R25,R30
breq L23
cpi R24,4
ldi R30,0
cpc R25,R30
breq L24
cpi R24,5
ldi R30,0
cpc R25,R30
breq L25
xjmp L17
X1:
.dbline 199
; {
L20:
.dbline 200
; case 0: PORTC=0x10; break;
ldi R24,16
out 0x8,R24
.dbline 200
xjmp L18
L21:
.dbline 201
; case 1: PORTC=0x90; break;
ldi R24,144
out 0x8,R24
.dbline 201
xjmp L18
L22:
.dbline 202
; case 2: PORTC=0x50; break;
ldi R24,80
out 0x8,R24
.dbline 202
xjmp L18
L23:
.dbline 203
; case 3: PORTC=0xd0; break;
ldi R24,208
out 0x8,R24
.dbline 203
xjmp L18
L24:
.dbline 204
; case 4: PORTC=0x30; break;
ldi R24,48
out 0x8,R24
.dbline 204
xjmp L18
L25:
.dbline 205
; case 5: PORTC=0xb0; break;
ldi R24,176
out 0x8,R24
.dbline 205
xjmp L18
L17:
.dbline 206
; default:RESET;
jmp 0x000
.dbline 207
; }
L18:
.dbline 208
; asm("nop");
nop
.dbline 209
; asm("nop");
nop
.dbline 210
; temp = i%8;
ldi R17,8
mov R16,R20
xcall mod8u
mov R22,R16
.dbline 211
; if(temp<6)
cpi R16,6
brsh L26
.dbline 212
; {
.dbline 213
; tempdata = 1<<(temp+2);
mov R17,R22
subi R17,254 ; addi 2
ldi R16,1
xcall lsl8
mov R20,R16
.dbline 214
; PORTE |= tempdata;
in R2,0xe
or R2,R16
out 0xe,R2
.dbline 215
; }
xjmp L27
L26:
.dbline 217
; else
; {
.dbline 218
; tempdata = 1<< (temp-3);
mov R17,R22
subi R17,3
ldi R16,1
xcall lsl8
mov R20,R16
.dbline 219
; PORTG |= tempdata;
in R2,0x14
or R2,R16
out 0x14,R2
.dbline 220
; }
L27:
.dbline 222
;
; PORTC&=0xef;
in R24,0x8
andi R24,239
out 0x8,R24
.dbline -2
L16:
xcall pop_gset3
.dbline 0 ; func end
ret
.dbsym r tempdata 20 c
.dbsym r temp 22 c
.dbsym r i 20 c
.dbend
.dbfunc e led_on _led_on fV
; temp2 -> R20,R21
; temp1 -> R22,R23
; pas_flag -> R10,R11
; tt -> y+10
; dd -> R12
; d -> R18
; i -> R16
.even
_led_on::
xcall push_gset4
ldd R12,y+8
.dbline -1
.dbline 228
;
; }
;
;
; void led_on(unsigned char i,unsigned char d,unsigned char dd,unsigned char tt) //LED亮函数
; {
.dbline 230
; unsigned temp1,temp2,pas_flag;
; temp1= 0xfc;
ldi R22,252
ldi R23,0
.dbline 231
; temp2= 0x18;
ldi R20,24
ldi R21,0
.dbline 232
; PORTD&=0x7f;
in R24,0xb
andi R24,127
out 0xb,R24
.dbline 233
; WDR();
wdr
.dbline 234
; if(!tt)
ldd R0,y+10
tst R0
breq X4
xjmp L29
X4:
.dbline 235
; {
.dbline 236
; WDR();
wdr
.dbline 237
; pas_flag=1;
ldi R24,1
ldi R25,0
movw R10,R24
.dbline 238
; if(d&0x01)
sbrs R18,0
rjmp L31
.dbline 239
; temp1 &= 0xf8;
andi R22,248
andi R23,0
L31:
.dbline 240
; pas_flag=pas_flag<<1;
lsl R10
rol R11
.dbline 241
; if(d&0x02)
sbrs R18,1
rjmp L33
.dbline 242
; temp1 &= 0xf4;
andi R22,244
andi R23,0
L33:
.dbline 243
; pas_flag=pas_flag<<1;
lsl R10
rol R11
.dbline 244
; if(d&0x04)
sbrs R18,2
rjmp L35
.dbline 245
; temp1 &= 0xec;
andi R22,236
andi R23,0
L35:
.dbline 246
; pas_flag=pas_flag<<1;
lsl R10
rol R11
.dbline 247
; if(d&0x08)
sbrs R18,3
rjmp L37
.dbline 248
; temp1 &= 0xdc;
andi R22,220
andi R23,0
L37:
.dbline 249
; pas_flag=pas_flag<<1;
lsl R10
rol R11
.dbline 250
; if(d&0x10)
sbrs R18,4
rjmp L39
.dbline 251
; temp1 &= 0xbc;
andi R22,188
andi R23,0
L39:
.dbline 252
; if(d&0x20)
sbrs R18,5
rjmp L41
.dbline 253
; temp1 &= 0x7c;
andi R22,124
andi R23,0
L41:
.dbline 254
; pas_flag=pas_flag<<1;
lsl R10
rol R11
.dbline 255
; WDR();
wdr
.dbline 256
; if(d&0x40)
sbrs R18,6
rjmp L43
.dbline 257
; temp2 &= 0x10;
andi R20,16
andi R21,0
L43:
.dbline 258
; pas_flag=pas_flag<<1;
lsl R10
rol R11
.dbline 259
; if(d&0x80)
sbrs R18,7
rjmp L45
.dbline 260
; temp2 &= 0x08;
andi R20,8
andi R21,0
L45:
.dbline 261
; asm("nop");
nop
.dbline 262
; asm("nop");
nop
.dbline 263
; if(pas_flag!=0x40)
movw R24,R10
cpi R24,64
ldi R30,0
cpc R25,R30
breq L47
.dbline 264
; RESET;
jmp 0x000
L47:
.dbline 265
; WDR();
wdr
.dbline 266
; }
xjmp L30
L29:
.dbline 268
; else
; {
.dbline 269
; WDR();
wdr
.dbline 270
; PORTD&=0x7f;
in R24,0xb
andi R24,127
out 0xb,R24
.dbline 271
; pas_flag=1;
ldi R24,1
ldi R25,0
movw R10,R24
.dbline 272
; if(dd&0x01)
sbrs R12,0
rjmp L49
.dbline 273
; temp1 &= 0xf8;
andi R22,248
andi R23,0
L49:
.dbline 274
; pas_flag=pas_flag<<1;
lsl R10
rol R11
.dbline 275
; if(dd&0x02)
sbrs R12,1
rjmp L51
.dbline 276
; temp1 &= 0xf4;
andi R22,244
andi R23,0
L51:
.dbline 277
; pas_flag=pas_flag<<1;
lsl R10
rol R11
.dbline 278
; if(dd&0x04)
sbrs R12,2
rjmp L53
.dbline 279
; temp1 &= 0xec;
andi R22,236
andi R23,0
L53:
.dbline 280
; if(dd&0x08)
sbrs R12,3
rjmp L55
.dbline 281
; temp1 &= 0xdc;
andi R22,220
andi R23,0
L55:
.dbline 282
; pas_flag=pas_flag<<1;
lsl R10
rol R11
.dbline 283
; if(dd&0x10)
sbrs R12,4
rjmp L57
.dbline 284
; temp1 &= 0xbc;
andi R22,188
andi R23,0
L57:
.dbline 285
; pas_flag=pas_flag<<1;
lsl R10
rol R11
.dbline 286
; if(dd&0x20)
sbrs R12,5
rjmp L59
.dbline 287
; temp1 &= 0x7c;
andi R22,124
andi R23,0
L59:
.dbline 288
; pas_flag=pas_flag<<1;
lsl R10
rol R11
.dbline 289
; WDR();
wdr
.dbline 290
; if(dd&0x40)
sbrs R12,6
rjmp L61
.dbline 291
; temp2 &= 0x10;
andi R20,16
andi R21,0
L61:
.dbline 292
; pas_flag=pas_flag<<1;
lsl R10
rol R11
.dbline 293
; if(dd&0x80)
sbrs R12,7
rjmp L63
.dbline 294
; temp2 &= 0x08;
andi R20,8
andi R21,0
L63:
.dbline 295
; asm("nop");
nop
.dbline 296
; asm("nop");
nop
.dbline 297
; if(pas_flag!=0x40)
movw R24,R10
cpi R24,64
ldi R30,0
cpc R25,R30
breq L65
.dbline 298
; RESET;
jmp 0x000
L65:
.dbline 299
; WDR();
wdr
.dbline 300
; }
L30:
.dbline 301
; WDR();
wdr
.dbline 302
; switch(i)
mov R10,R16
clr R11
tst R10
brne X2
tst R11
breq L70
X2:
movw R24,R10
cpi R24,1
ldi R30,0
cpc R25,R30
breq L71
cpi R24,2
ldi R30,0
cpc R25,R30
breq L72
cpi R24,3
ldi R30,0
cpc R25,R30
breq L73
cpi R24,4
ldi R30,0
cpc R25,R30
breq L74
cpi R24,5
ldi R30,0
cpc R25,R30
breq L75
xjmp L67
X3:
.dbline 303
; {
L70:
.dbline 304
; case 0: PORTC=0x10; break;
ldi R24,16
out 0x8,R24
.dbline 304
xjmp L68
L71:
.dbline 305
; case 1: PORTC=0x90; break;
ldi R24,144
out 0x8,R24
.dbline 305
xjmp L68
L72:
.dbline 306
; case 2: PORTC=0x50; break;
ldi R24,80
out 0x8,R24
.dbline 306
xjmp L68
L73:
.dbline 307
; case 3: PORTC=0xd0; break;
ldi R24,208
out 0x8,R24
.dbline 307
xjmp L68
L74:
.dbline 308
; case 4: PORTC=0x30; break;
ldi R24,48
out 0x8,R24
.dbline 308
xjmp L68
L75:
.dbline 309
; case 5: PORTC=0xb0; break;
ldi R24,176
out 0x8,R24
.dbline 309
xjmp L68
L67:
.dbline 310
; default:RESET;
jmp 0x000
.dbline 311
; }
L68:
.dbline 312
; asm("nop");
nop
.dbline 313
; asm("nop");
nop
.dbline 314
; PORTE =temp1;
out 0xe,R22
.dbline 315
; PORTG =temp2;
out 0x14,R20
.dbline 317
;
; PORTC&=0xef;
in R24,0x8
andi R24,239
out 0x8,R24
.dbline 318
; WDR();
wdr
.dbline -2
L28:
xcall pop_gset4
.dbline 0 ; func end
ret
.dbsym r temp2 20 i
.dbsym r temp1 22 i
.dbsym r pas_flag 10 i
.dbsym l tt 10 c
.dbsym r dd 12 c
.dbsym r d 18 c
.dbsym r i 16 c
.dbend
.dbfunc e led_clear _led_clear fV
; i -> R20
.even
_led_clear::
xcall push_gset1
.dbline -1
.dbline 323
; }
;
;
; void led_clear(void) //LED复位函数
; {
.dbline 325
; unsigned char i;
; for(i=0;i<48;i++)
clr R20
xjmp L80
L77:
.dbline 326
.dbline 327
mov R16,R20
xcall _led_off
.dbline 328
L78:
.dbline 325
inc R20
L80:
.dbline 325
cpi R20,48
brlo L77
.dbline -2
L76:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbend
.dbfunc e led7_clear _led7_clear fV
; p6 -> R16,R17
; p5 -> R18,R19
; p4 -> R20,R21
; p3 -> R22,R23
; p2 -> R10,R11
; p1 -> R12,R13
.even
_led7_clear::
xcall push_gset4
.dbline -1
.dbline 334
; {
; led_off(i);
; }
; }
;
;
;
; void led7_clear(void) //七段码复位
; {
.dbline 335
; unsigned char *p1 = (unsigned char *) (addr_led7[0]);
lds R12,_addr_led7
lds R13,_addr_led7+1
.dbline 336
; unsigned char *p2 = (unsigned char *) (addr_led7[1]);
lds R10,_addr_led7+2
lds R11,_addr_led7+2+1
.dbline 337
; unsigned char *p3 = (unsigned char *) (addr_led7[2]);
lds R22,_addr_led7+4
lds R23,_addr_led7+4+1
.dbline 338
; unsigned char *p4 = (unsigned char *) (addr_led7[3]);
lds R20,_addr_led7+6
lds R21,_addr_led7+6+1
.dbline 339
; unsigned char *p5 = (unsigned char *) (addr_led7[4]);
lds R18,_addr_led7+8
lds R19,_addr_led7+8+1
.dbline 340
; unsigned char *p6 = (unsigned char *) (addr_led7[5]);
lds R16,_addr_led7+10
lds R17,_addr_led7+10+1
.dbline 341
; WDR();
wdr
.dbline 342
; *p1= led7_data[0];
lds R2,_led7_data
movw R30,R12
std z+0,R2
.dbline 343
; *p2= led7_data[0];
lds R2,_led7_data
movw R30,R10
std z+0,R2
.dbline 344
; *p3= led7_data[0];
lds R2,_led7_data
movw R30,R22
std z+0,R2
.dbline 345
; *p4= led7_data[0];
lds R2,_led7_data
movw R30,R20
std z+0,R2
.dbline 346
; *p5= led7_data[0];
lds R2,_led7_data
movw R30,R18
std z+0,R2
.dbline 347
; *p6= led7_data[0];
lds R2,_led7_data
movw R30,R16
std z+0,R2
.dbline -2
L81:
xcall pop_gset4
.dbline 0 ; func end
ret
.dbsym r p6 16 pc
.dbsym r p5 18 pc
.dbsym r p4 20 pc
.dbsym r p3 22 pc
.dbsym r p2 10 pc
.dbsym r p1 12 pc
.dbend
.dbfunc e RUN_led _RUN_led fV
.even
_RUN_led::
.dbline -1
.dbline 351
; }
;
; void RUN_led(void) //运行指示灯
; {
.dbline 352
; if(PINF&0x04)
sbis 0xf,2
rjmp L88
.dbline 353
; PORTF &= ~(0x04);
cbi 0x11,2
xjmp L89
L88:
.dbline 355
sbi 0x11,2
L89:
.dbline -2
L87:
.dbline 0 ; func end
ret
.dbend
.dbfunc e get_key _get_key fc
; temp -> R16,R17
.even
_get_key::
.dbline -1
.dbline 360
; else
; PORTF |= 0x04;
; }
;
;
; unsigned char get_key(void) //键值读取函数
; {
.dbline 363
; unsigned temp;
;
; PORTC = addr_key;
ldi R24,112
out 0x8,R24
.dbline 364
; WDR();
wdr
.dbline 365
; asm("nop");
nop
.dbline 366
; asm("nop");
nop
.dbline 367
; asm("nop");
nop
.dbline 368
; asm("nop");
nop
.dbline 369
; temp = PINB;
in R16,0x3
clr R17
.dbline 371
;
; return temp;
.dbline -2
L90:
.dbline 0 ; func end
ret
.dbsym r temp 16 i
.dbend
.dbfunc e hardware_reset _hardware_reset fV
.even
_hardware_reset::
.dbline -1
.dbline 376
;
; }
;
; void hardware_reset(void) //硬件层复位函数
; {
.dbline 377
; led7_clear();
xcall _led7_clear
.dbline 378
; led_clear();
xcall _led_clear
.dbline 379
; relay_out_reset();
xcall _relay_out_reset
.dbline -2
L91:
.dbline 0 ; func end
ret
.dbend
.area bss(ram, con, rel)
.dbfile D:\报警系统设计资料\报警系统软件\测量模块基于CAN的系统网程序\CAN网可配置型报警灯板程序\drive.c
_out_state::
.blkb 1
.dbsym e out_state _out_state c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -