⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 drive.s

📁 LED显示面板
💻 S
📖 第 1 页 / 共 2 页
字号:
	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 + -