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

📄 main.s

📁 该程序是医院用的CPCR记录仪的终端控制程序
💻 S
📖 第 1 页 / 共 5 页
字号:
	xcall _EEPROMread
	sts _TX_BUF0+58,R16
	.dbline 379
; 	TX_BUF0[59]=EEPROMread(9*16+1);
	ldi R16,145
	ldi R17,0
	xcall _EEPROMread
	sts _TX_BUF0+59,R16
	.dbline 380
; 	TX_BUF0[60]=EEPROMread(9*16+2);
	ldi R16,146
	ldi R17,0
	xcall _EEPROMread
	sts _TX_BUF0+60,R16
	.dbline 381
; 	TX_BUF0[61]=EEPROMread(9*16+3);
	ldi R16,147
	ldi R17,0
	xcall _EEPROMread
	sts _TX_BUF0+61,R16
	.dbline 382
; 	TX_BUF0[62]=EEPROMread(9*16+4);
	ldi R16,148
	ldi R17,0
	xcall _EEPROMread
	sts _TX_BUF0+62,R16
	.dbline 383
; 	TX_BUF0[63]=EEPROMread(9*16+5);
	ldi R16,149
	ldi R17,0
	xcall _EEPROMread
	sts _TX_BUF0+63,R16
	.dbline 384
; 	TX_BUF0[64]=EEPROMread(9*16+6);
	ldi R16,150
	ldi R17,0
	xcall _EEPROMread
	sts _TX_BUF0+64,R16
	.dbline 386
; 	
; 	TX_BUF0[65]=EEPROMread(10*16+0);
	ldi R16,160
	ldi R17,0
	xcall _EEPROMread
	sts _TX_BUF0+65,R16
	.dbline 387
; 	TX_BUF0[66]=EEPROMread(10*16+1);
	ldi R16,161
	ldi R17,0
	xcall _EEPROMread
	sts _TX_BUF0+66,R16
	.dbline 388
; 	TX_BUF0[67]=EEPROMread(10*16+2);
	ldi R16,162
	ldi R17,0
	xcall _EEPROMread
	sts _TX_BUF0+67,R16
	.dbline 389
; 	TX_BUF0[68]=EEPROMread(10*16+3);
	ldi R16,163
	ldi R17,0
	xcall _EEPROMread
	sts _TX_BUF0+68,R16
	.dbline 390
; 	TX_BUF0[69]=EEPROMread(10*16+4);
	ldi R16,164
	ldi R17,0
	xcall _EEPROMread
	sts _TX_BUF0+69,R16
	.dbline 391
; 	TX_BUF0[70]=EEPROMread(10*16+5);
	ldi R16,165
	ldi R17,0
	xcall _EEPROMread
	sts _TX_BUF0+70,R16
	.dbline 392
; 	TX_BUF0[71]=EEPROMread(10*16+6);
	ldi R16,166
	ldi R17,0
	xcall _EEPROMread
	sts _TX_BUF0+71,R16
	.dbline 393
; 	SET_LIGHT(); 	
	cbi 0x17,6
	.dbline 394
; 	TX_BUF0[72]=EEPROMread(11*16+0);
	ldi R16,176
	ldi R17,0
	xcall _EEPROMread
	sts _TX_BUF0+72,R16
	.dbline 395
; 	TX_BUF0[73]=EEPROMread(11*16+1);
	ldi R16,177
	ldi R17,0
	xcall _EEPROMread
	sts _TX_BUF0+73,R16
	.dbline 396
; 	TX_BUF0[74]=EEPROMread(11*16+2);
	ldi R16,178
	ldi R17,0
	xcall _EEPROMread
	sts _TX_BUF0+74,R16
	.dbline 397
; 	TX_BUF0[75]=EEPROMread(11*16+3);
	ldi R16,179
	ldi R17,0
	xcall _EEPROMread
	sts _TX_BUF0+75,R16
	.dbline 398
; 	TX_BUF0[76]=EEPROMread(11*16+4);
	ldi R16,180
	ldi R17,0
	xcall _EEPROMread
	sts _TX_BUF0+76,R16
	.dbline 399
; 	TX_BUF0[77]=EEPROMread(11*16+5);
	ldi R16,181
	ldi R17,0
	xcall _EEPROMread
	sts _TX_BUF0+77,R16
	.dbline 400
; 	TX_BUF0[78]=EEPROMread(11*16+6);
	ldi R16,182
	ldi R17,0
	xcall _EEPROMread
	sts _TX_BUF0+78,R16
	.dbline 402
; 	
; 	TX_BUF0[79]=EEPROMread(12*16+0);
	ldi R16,192
	ldi R17,0
	xcall _EEPROMread
	sts _TX_BUF0+79,R16
	.dbline 403
; 	TX_BUF0[80]=EEPROMread(12*16+1);
	ldi R16,193
	ldi R17,0
	xcall _EEPROMread
	sts _TX_BUF0+80,R16
	.dbline 404
; 	TX_BUF0[81]=EEPROMread(12*16+2);
	ldi R16,194
	ldi R17,0
	xcall _EEPROMread
	sts _TX_BUF0+81,R16
	.dbline 405
; 	TX_BUF0[82]=EEPROMread(12*16+3);
	ldi R16,195
	ldi R17,0
	xcall _EEPROMread
	sts _TX_BUF0+82,R16
	.dbline 406
; 	TX_BUF0[83]=EEPROMread(12*16+4);
	ldi R16,196
	ldi R17,0
	xcall _EEPROMread
	sts _TX_BUF0+83,R16
	.dbline 407
; 	TX_BUF0[84]=EEPROMread(12*16+5);
	ldi R16,197
	ldi R17,0
	xcall _EEPROMread
	sts _TX_BUF0+84,R16
	.dbline 408
; 	TX_BUF0[85]=EEPROMread(12*16+6);
	ldi R16,198
	ldi R17,0
	xcall _EEPROMread
	sts _TX_BUF0+85,R16
	.dbline 410
; 	
; 	TX_BUF0[86]=0x03;
	ldi R24,3
	sts _TX_BUF0+86,R24
	.dbline 411
; 	TransmitByte0(TX_BUF0,87);
	ldi R18,87
	ldi R16,<_TX_BUF0
	ldi R17,>_TX_BUF0
	xcall _TransmitByte0
	.dbline 412
	clr R20
	clr R21
	xjmp L190
L187:
	.dbline 412
L188:
	.dbline 412
	subi R20,255  ; offset = 1
	sbci R21,255
L190:
	.dbline 412
; 	for(i=0;i<3800;i++);
	cpi R20,216
	ldi R30,14
	cpc R21,R30
	brlo L187
	.dbline 413
; 	CLEAR_LIGHT();
	sbi 0x17,6
	.dbline -2
L100:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r i 20 i
	.dbend
	.dbfunc e setup_curtime _setup_curtime fV
;              i -> R20
	.even
_setup_curtime::
	xcall push_gset1
	.dbline -1
	.dbline 416
; }
; void setup_curtime(void)
; {
	.dbline 418
;  	 		unsigned char i;
; 			for(i=0;i<7;i++)
	clr R20
	xjmp L195
L192:
	.dbline 419
	mov R2,R20
	clr R3
	ldi R30,6
	ldi R31,0
	sub R30,R2
	sbc R31,R3
	ldi R24,<_time_data
	ldi R25,>_time_data
	add R30,R24
	adc R31,R25
	ldi R24,<_RX_BUF0+2
	ldi R25,>_RX_BUF0+2
	mov R26,R2
	clr R27
	add R26,R24
	adc R27,R25
	ld R2,x
	std z+0,R2
L193:
	.dbline 418
	inc R20
L195:
	.dbline 418
	cpi R20,7
	brlo L192
	.dbline 420
; 			time_data[6-i]=RX_BUF0[2+i];
; 			Set_1302(time_data);
	ldi R16,<_time_data
	ldi R17,>_time_data
	xcall _Set_1302
	.dbline 421
; 			senddata(0);
	clr R16
	xcall _senddata
	.dbline -2
L191:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbend
	.dbfunc e senddata _senddata fV
;              i -> R20,R21
;           flag -> R20
	.even
_senddata::
	xcall push_gset1
	mov R20,R16
	.dbline -1
	.dbline 425
; }
; 
; void senddata(unsigned char flag)
; {
	.dbline 428
;  	 	unsigned int i;
; 		
;  	 	SET_LIGHT();
	cbi 0x17,6
	.dbline 429
; 		TX_BUF0[0]=0x11;
	ldi R24,17
	sts _TX_BUF0,R24
	.dbline 430
; 		TX_BUF0[1]=4;
	ldi R24,4
	sts _TX_BUF0+1,R24
	.dbline 431
; 		TX_BUF0[2]=3;
	ldi R24,3
	sts _TX_BUF0+2,R24
	.dbline 432
; 		TransmitByte0(TX_BUF0,3);
	ldi R18,3
	ldi R16,<_TX_BUF0
	ldi R17,>_TX_BUF0
	xcall _TransmitByte0
	.dbline 433
	clr R20
	clr R21
	xjmp L203
L200:
	.dbline 433
L201:
	.dbline 433
	subi R20,255  ; offset = 1
	sbci R21,255
L203:
	.dbline 433
; 		for(i=0;i<3800;i++);
	cpi R20,216
	ldi R30,14
	cpc R21,R30
	brlo L200
	.dbline 434
; 		CLEAR_LIGHT();
	sbi 0x17,6
	.dbline -2
L197:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r i 20 i
	.dbsym r flag 20 c
	.dbend
	.area vector(rom, abs)
	.org 56
	jmp _timer1_ovf_isr
	.area text(rom, con, rel)
	.dbfile F:\yyjapp\yymk\software\main.c
	.dbfunc e timer1_ovf_isr _timer1_ovf_isr fV
	.even
_timer1_ovf_isr::
	st -y,R2
	st -y,R3
	st -y,R24
	st -y,R25
	in R2,0x3f
	st -y,R2
	.dbline -1
	.dbline 438
; }
; #pragma interrupt_handler timer1_ovf_isr:15
; void timer1_ovf_isr(void)
; {
	.dbline 440
;  	 //TIMER1 has overflowed
;  	 TCNT1H = 0xFD;   //reload counter high value  50ms
	ldi R24,253
	out 0x2d,R24
	.dbline 441
;  	 TCNT1L = 0xE5;   //reload counter low value    50ms
	ldi R24,229
	out 0x2c,R24
	.dbline 442
; 	 displaycount++;
	lds R24,_displaycount
	subi R24,255    ; addi 1
	sts _displaycount,R24
	.dbline 443
; 	 timecounter++;
	lds R24,_timecounter
	lds R25,_timecounter+1
	adiw R24,1
	sts _timecounter+1,R25
	sts _timecounter,R24
	.dbline 444
; 	 timer++;
	lds R24,_timer
	lds R25,_timer+1
	adiw R24,1
	sts _timer+1,R25
	sts _timer,R24
	.dbline 445
; 	 if(displaycount>34)
	ldi R24,34
	lds R2,_displaycount
	cp R24,R2
	brsh L205
	.dbline 446
; 	 	{
	.dbline 447
; 		displaycount=0;
	clr R2
	sts _displaycount,R2
	.dbline 449
; //		WDR();
; 		}
L205:
	.dbline 452
; 
; 		
; 	 checktime++;                //报警检查时间
	lds R24,_checktime
	subi R24,255    ; addi 1
	sts _checktime,R24
	.dbline 453
; 	 if(checktime>2)
	ldi R24,2
	lds R2,_checktime
	cp R24,R2
	brsh L207
	.dbline 454
; 	 {
	.dbline 455
; 	  	checktime=0;
	clr R2
	sts _checktime,R2
	.dbline 456
; 		alarm_time++;
	lds R24,_alarm_time
	lds R25,_alarm_time+1
	adiw R24,1
	sts _alarm_time+1,R25
	sts _alarm_time,R24
	.dbline 457
; 		if(alarm_time>300)
	ldi R24,300
	ldi R25,1
	lds R2,_alarm_time
	lds R3,_alarm_time+1
	cp R24,R2
	cpc R25,R3
	brsh L209
	.dbline 458
; 		{
	.dbline 459
; 		 	alarm_flag=0;
	clr R2
	sts _alarm_flag,R2
	.dbline 460
; 			SET_SDA();              //高电平清除报警
	cbi 0x11,1
	.dbline 461
; 		}
L209:
	.dbline 462
; 		if(zone_flag==1)
	lds R24,_zone_flag
	cpi R24,1
	brne L211
	.dbline 463
; 		{
	.dbline 464
; 		 	if((PIND&0x01)==0x00)
	sbic 0x10,0
	rjmp L212
	.dbline 465
; 			{
	.dbline 466
; 			 	alarm_flag=1;
	ldi R24,1
	sts _alarm_flag,R24
	.dbline 467
; 				CLEAR_SDA();       //报警输出低电平有效。
	sbi 0x11,1
	.dbline 468
; 				alarm_time=0;
	clr R2
	clr R3
	sts _alarm_time+1,R3
	sts _alarm_time,R2
	.dbline 469
; 			}
	.dbline 471
; 			else
; 			;
	.dbline 472
; 		}
	xjmp L212
L211:
	.dbline 474
; 		else
; 		{
	.dbline 475
; 		 	alarm_flag=0;
	clr R2
	sts _alarm_flag,R2
	.dbline 476
; 			SET_SDA();
	cbi 0x11,1
	.dbline 477
; 		}
L212:
	.dbline 479
; 		
; 	 }		
L207:
	.dbline 480
; 	 if(timer>2)
	ldi R24,2
	ldi R25,0
	lds R2,_timer
	lds R3,_timer+1
	cp R24,R2
	cpc R25,R3
	brsh L215
	.dbline 481
;  	 {
	.dbline 482
; 	  	if(beep_second==0)
	lds R2,_beep_second
	tst R2
	brne L217
	.dbline 483
; 	   	{
	.dbline 484
; 	     	SET_BELL();
	cbi 0x17,5
	.dbline 485
; 			SET_LED0();
	cbi 0x11,7
	.dbline 486
;          	timer=0;
	clr R2
	clr R3
	sts _timer+1,R3
	sts _timer,R2
	.dbline 487
; 		}
	xjmp L218
L217:
	.dbline 489
; 		else
; 		{
	.dbline 490
; 		 	if(beep_flag==1)
	lds R24,_beep_flag
	cpi R24,1
	brne L219
	.dbline 491
; 		 	{
	.dbline 492
; 		 	 	SET_BELL();
	cbi 0x17,5
	.dbline 493
; 				SET_LED0();
	cbi 0x11,7
	.dbline 494
; 		 		beep_flag=0;
	clr R2
	sts _beep_flag,R2
	.dbline 495
; 		 	}
	xjmp L220
L219:
	.dbline 497
; 		 	else
; 		 	{
	.dbline 498
;      	 	 	CLEAR_BELL();
	sbi 0x17,5
	.dbline 499
; 				CLEAR_LED0();
	sbi 0x11,7
	.dbline 500
; 		 		beep_flag=1;
	ldi R24,1
	sts _beep_flag,R24
	.dbline 501
; 		 	}
L220:
	.dbline 502
; 		  timer=0;
	clr R2
	clr R3
	sts _timer+1,R3
	sts _timer,R2
	.dbline 503
; 		  beep_second--;
	lds R24,_beep_second
	subi R24,1
	sts _beep_second,R24
	.dbline 504
; 	 }
L218:
	.dbline 505
L215:
	.dbline -2
L204:
	ld R2,y+
	out 0x3f,R2
	ld R25,y+
	ld R24,y+
	ld R3,y+
	ld R2,y+
	.dbline 0 ; func end
	reti
	.dbend
	.dbfunc e beep11 _beep11 fV
;              i -> R16,R17
	.even
_beep11::
	.dbline -1
	.dbline 508
;   } 
; }
; void beep11(void)
; {
	.dbline 510
;  	 unsigned int i;
; 	 CLEAR_BELL();
	sbi 0x17,5
	.dbline 511
	clr R16
	clr R17
	xjmp L225
L222:
	.dbline 511
L223:
	.dbline 511
	subi R16,255  ; offset = 1
	sbci R17,255
L225:
	.dbline 511
; 	 for(i=0;i<65000;i++);
	cpi R16,232
	ldi R30,253
	cpc R17,R30
	brlo L222
	.dbline 512
; 	 SET_BELL();
	cbi 0x17,5
	.dbline -2
L221:
	.dbline 0 ; func end
	ret
	.dbsym r i 16 i
	.dbend
	.dbfunc e delay _delay fV
;              j -> R20
;              i -> R22,R23
;          count -> R16
	.even
_delay::
	xcall push_gset2
	.dbline -1
	.dbline 515
; }
; void delay(unsigned char count)
; {
	.dbline 518
;  	 unsigned int i;
; 	 unsigned char j;
; 	 for(j=0;j<count;j++)
	clr R20
	xjmp L230
L227:
	.dbline 519
; 	 {
	.dbline 520
	clr R22
	clr R23
	xjmp L234
L231:
	.dbline 520
L232:
	.dbline 520
	subi R22,255  ; offset = 1
	sbci R23,255
L234:
	.dbline 520
	cpi R22,232
	ldi R30,253
	cpc R23,R30
	brlo L231
	.dbline 521
L228:
	.dbline 518
	inc R20
L230:
	.dbline 518
	cp R20,R16
	brlo L227
	.dbline -2
L226:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r j 20 c
	.dbsym r i 22 i
	.dbsym r count 16 c
	.dbend
	.dbfunc e value_time _value_time fi
;      timedata1 -> R20,R21
;       timedata -> R22,R23
;           data -> R20,R21
;        minutes -> R20
;           hour -> R22
	.even
_value_time::
	xcall push_gset2
	mov R20,R18
	mov R22,R16
	.dbline -1
	.dbline 525
; 	  	for(i=0;i<65000;i++);
; 	 }
; }
; 
; unsigned int value_time(unsigned char hour,unsigned char minutes)
; {
	.dbline 528
;  	 unsigned int data;
; 	 unsigned int timedata,timedata1;
; 	 timedata=(hour/16)*10+hour%16;
	ldi R18,16
	ldi R19,0
	mov R16,R22
	clr R17
	xcall mod16s
	mov R24,R22
	swap R24
	andi R24,#0x0F
	ldi R25,10
	mul R25,R24
	movw R22,R0
	add R22,R16
	adc R23,R17
	.dbline 529
; 	 timedata1=(minutes/16)*10+minutes%16;
	ldi R18,16
	ldi R19,0
	mov R16,R20
	clr R17
	xcall mod16s
	mov R24,R20
	swap R24
	andi R24,#0x0F
	ldi R25,10
	mul R25,R24
	movw R20,R0
	add R20,R16
	adc R21,R17
	.dbline 530
; 	 data=timedata*60+timedata1;
	ldi R16,60
	ldi R17,0
	movw R18,R22
	xcall empy16s
	movw R2,R16
	add R2,R20
	adc R3,R21
	movw R20,R2
	.dbline 531
; 	 return data;
	movw R16,R2
	.dbline -2
L235:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r timedata1 20 i
	.dbsym r timedata 22 i
	.dbsym r data 20 i
	.dbsym r minutes 20 c
	.dbsym r hour 22 c
	.dbend
	.dbfunc e setup_time _setup_time fV
	.even
_setup_time::
	.dbline -1
	.dbline 535
; }
; 
; void setup_time(void)
; {
	.dbline 536
;  	 display_setuptime();
	xcall _display_setuptime
	.dbline 537
; 	 delay(20);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -