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

📄 main.s

📁 该程序是医院用的CPCR记录仪的终端控制程序
💻 S
📖 第 1 页 / 共 5 页
字号:
	ldi R16,20
	xcall _delay
	.dbline 538
; 	 update_time();
	xcall _update_time
	xjmp L238
L237:
	.dbline 541
; //	 timecounter=0;
; 	 while(1)
; 	 {
	.dbline 542
; 	  	if(u_year()==1)return;
	xcall _u_year
	cpi R16,1
	brne L240
	.dbline 542
	xjmp L236
L240:
	.dbline 543
; 	 	if(u_month()==1)return;
	xcall _u_month
	cpi R16,1
	brne L242
	.dbline 543
	xjmp L236
L242:
	.dbline 544
; 	 	if(u_day()==1)return;
	xcall _u_day
	cpi R16,1
	brne L244
	.dbline 544
	xjmp L236
L244:
	.dbline 545
; 	 	if(u_week()==1)return;
	xcall _u_week
	cpi R16,1
	brne L246
	.dbline 545
	xjmp L236
L246:
	.dbline 546
; 	 	if(u_hour()==1)return;
	xcall _u_hour
	cpi R16,1
	brne L248
	.dbline 546
	xjmp L236
L248:
	.dbline 547
; 	 	if(u_minute()==1)return;
	xcall _u_minute
	cpi R16,1
	brne L250
	.dbline 547
	xjmp L236
L250:
	.dbline 548
	xcall _u_second
	.dbline 549
	ldi R16,12
	xcall _delay
	.dbline 550
	xjmp L236
L238:
	.dbline 540
	xjmp L237
X4:
	.dbline -2
L236:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e readxinghaokey _readxinghaokey fc
;        status4 -> R20
;        status3 -> R22
;           ttt3 -> R10
;              i -> R20,R21
	.even
_readxinghaokey::
	xcall push_gset3
	.dbline -1
	.dbline 555
; 	 	u_second();
; 		delay(12);
; 		return;
; 	 }
; }
; 
; unsigned char readxinghaokey(void)
; {
	.dbline 558
;  	 unsigned char status4,ttt3,status3;
; 	 unsigned int i;
; 	 status4=scankey();
	xcall _scankey
	mov R20,R16
	.dbline 559
; 	 if(status4==0)
	tst R16
	brne L253
	.dbline 560
; 	 {
	.dbline 561
	clr R20
	clr R21
	xjmp L258
L255:
	.dbline 561
L256:
	.dbline 561
	subi R20,255  ; offset = 1
	sbci R21,255
L258:
	.dbline 561
; 		 for(i=0;i<10000;i++);
	cpi R20,16
	ldi R30,39
	cpc R21,R30
	brlo L255
	.dbline 562
; 	  		status3=keyvalue();
	xcall _keyvalue
	mov R22,R16
	.dbline 563
; 			if(status3==0x0a)
	cpi R16,10
	brne L259
	.dbline 564
;   			{
	xjmp L262
L261:
	.dbline 566
; 				while(1)
; 				{
	.dbline 567
; 				  	ttt3=keyvalue();
	xcall _keyvalue
	mov R10,R16
	.dbline 568
; 					if(status3!=ttt3)break;
	cp R22,R16
	breq L264
	.dbline 568
	xjmp L263
L264:
	.dbline 569
L262:
	.dbline 565
	xjmp L261
L263:
	.dbline 570
; 				}	
; 				return 0;
	clr R16
	xjmp L252
L259:
	.dbline 573
	.dbline 574
	ldi R16,1
L253:
	.dbline -2
L252:
	xcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r status4 20 c
	.dbsym r status3 22 c
	.dbsym r ttt3 10 c
	.dbsym r i 20 i
	.dbend
	.dbfunc e readnumberkey _readnumberkey fc
;        status4 -> R22
;        status3 -> R20
;           ttt3 -> R22
;              i -> R10,R11
	.even
_readnumberkey::
	xcall push_gset3
	.dbline -1
	.dbline 579
; 			}
; 			else
; 			{
; 			 	return 1;
; 			}
; 	}
; }
; unsigned char readnumberkey(void)
; {
	.dbline 582
;  	 unsigned char status4,ttt3,status3;
; 	 unsigned int i;
; 	 status4=scankey();
	xcall _scankey
	mov R22,R16
	.dbline 583
; 	 if(status4==0)
	tst R16
	brne L267
	.dbline 584
; 	 {
	.dbline 585
	clr R10
	clr R11
	xjmp L272
L269:
	.dbline 585
L270:
	.dbline 585
	movw R24,R10
	adiw R24,1
	movw R10,R24
L272:
	.dbline 585
; 		 for(i=0;i<10000;i++);
	movw R24,R10
	cpi R24,16
	ldi R30,39
	cpc R25,R30
	brlo L269
	.dbline 586
; 	  		status3=keyvalue();
	xcall _keyvalue
	mov R20,R16
	.dbline 587
; 			if(status3==0x0a);
	cpi R16,10
	brne L276
	.dbline 587
	xjmp L268
X5:
	.dbline 589
; 			else
;   			{
L275:
	.dbline 591
; 				while(1)
; 				{
	.dbline 592
; 				  	ttt3=keyvalue();
	xcall _keyvalue
	mov R22,R16
	.dbline 593
; 					if(status3!=ttt3)break;
	cp R20,R16
	breq L278
	.dbline 593
	xjmp L277
L278:
	.dbline 594
L276:
	.dbline 590
	xjmp L275
L277:
	.dbline 595
; 				}	
; 				return status3;
	mov R16,R20
	xjmp L266
X6:
	.dbline 597
; 			}
; 	}
L267:
	.dbline 599
	ldi R16,40
L268:
	.dbline -2
L266:
	xcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r status4 22 c
	.dbsym r status3 20 c
	.dbsym r ttt3 22 c
	.dbsym r i 10 i
	.dbend
	.dbfunc e read0key _read0key fc
;        status4 -> R20
;        status3 -> R20
;           ttt3 -> R22
;              i -> R22,R23
	.even
_read0key::
	xcall push_gset2
	.dbline -1
	.dbline 602
; 	else
; 		return 40;
; }
; unsigned char read0key(void)
; {
	.dbline 605
;  	 unsigned char status4,ttt3,status3;
; 	 unsigned int i;
; 	 status4=scankey();
	xcall _scankey
	mov R20,R16
	.dbline 606
; 	 if(status4==0)
	tst R16
	brne L281
	.dbline 607
; 	 {
	.dbline 608
	clr R22
	clr R23
	xjmp L286
L283:
	.dbline 608
L284:
	.dbline 608
	subi R22,255  ; offset = 1
	sbci R23,255
L286:
	.dbline 608
; 		 for(i=0;i<10000;i++);
	cpi R22,16
	ldi R30,39
	cpc R23,R30
	brlo L283
	.dbline 609
; 	  	 status3=keyvalue();
	xcall _keyvalue
	mov R20,R16
	.dbline 610
; 		 if(status3==0)
	tst R16
	brne L282
	.dbline 611
;   		 {
	.dbline 612
; 			if(timenum>13)timenum=0;
	ldi R24,13
	lds R2,_timenum
	cp R24,R2
	brsh L289
	.dbline 612
	clr R2
	sts _timenum,R2
L289:
	.dbline 613
; 			timenum++;
	lds R24,_timenum
	subi R24,255    ; addi 1
	sts _timenum,R24
	xjmp L292
L291:
	.dbline 615
; 			while(1)
; 			{
	.dbline 616
; 			  	ttt3=keyvalue();
	xcall _keyvalue
	mov R22,R16
	.dbline 617
; 				if(status3!=ttt3)break;
	cp R20,R16
	breq L294
	.dbline 617
	xjmp L293
L294:
	.dbline 618
L292:
	.dbline 614
	xjmp L291
L293:
	.dbline 619
; 			}	
; 			return 0;
	clr R16
	xjmp L280
X7:
	.dbline 621
; 		}
; 	}
L281:
	.dbline 623
	ldi R16,99
L282:
	.dbline -2
L280:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r status4 20 c
	.dbsym r status3 20 c
	.dbsym r ttt3 22 c
	.dbsym r i 22 i
	.dbend
	.dbfunc e write_time _write_time fV
;              i -> R20
;           time -> R22,R23
;           addr -> R10
	.even
_write_time::
	xcall push_gset3
	movw R22,R18
	mov R10,R16
	.dbline -1
	.dbline 626
; 	else
; 		return 99;	 
; }
; void write_time(unsigned char addr,unsigned char *time)
; {
	.dbline 628
;  	 unsigned char i;
; 	 for(i=0;i<7;i++)
	clr R20
	xjmp L300
L297:
	.dbline 629
	mov R30,R20
	clr R31
	add R30,R22
	adc R31,R23
	ldd R18,z+0
	ldi R24,16
	mul R24,R10
	movw R16,R0
	mov R2,R20
	clr R3
	add R16,R2
	adc R17,R3
	xcall _EEPROMwrite
L298:
	.dbline 628
	inc R20
L300:
	.dbline 628
	cpi R20,7
	brlo L297
	.dbline -2
L296:
	xcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbsym r time 22 pc
	.dbsym r addr 10 c
	.dbend
	.dbfunc e main _main fV
;       now_time -> <dead>
;        status2 -> <dead>
;            yyj -> y+4
;    modecounter -> y+3
;        status4 -> y+2
;        status3 -> R12
;           ttt3 -> R14
;              i -> R20,R21
	.even
_main::
	sbiw R28,5
	.dbline -1
	.dbline 632
; 	 EEPROMwrite(addr*16+i,time[i]);
; }
; void main(void)
; {
	.dbline 635
;  	unsigned char status2,status3,status4,ttt3;
; 	unsigned int i,now_time;
; 	unsigned char modecounter=0;
	clr R0
	std y+3,R0
	.dbline 638
; 	unsigned char yyj;
; 
; 	CLI();
	cli
	.dbline 642
; //	WDTCR=0x18;
; //	WDTCR=0x10;
; 
; 	MCUCR = 0x30;                              //进入掉电休眠模式       SE=1,SM0,SM1,SM2 :0,1,0
	ldi R24,48
	out 0x35,R24
	.dbline 643
;     EICRA = 0x03;                               //外部中断0的中断模式,上升沿触发中断
	ldi R24,3
	sts 106,R24
	.dbline 644
;  	EICRB = 0x80;                               //外部中断7的中断模式,下降沿触发中断
	ldi R24,128
	out 0x3a,R24
	.dbline 645
;  	EIMSK = 0x81;                              //外部中断0和外部中断7的中断任务.
	ldi R24,129
	out 0x39,R24
	.dbline 646
;  	TIMSK = 0x04;                                //timer interrupt sources
	ldi R24,4
	out 0x37,R24
	.dbline 647
;  	ETIMSK = 0x00;                             //extended timer interrupt sources
	clr R2
	sts 125,R2
	.dbline 648
; 	PORTF=0x00;
	sts 98,R2
	.dbline 649
; 	DDRF=0xFF;
	ldi R24,255
	sts 97,R24
	.dbline 650
; 	SEI();
	sei
	.dbline 651
; 	timer0_init();
	xcall _timer0_init
	.dbline 652
; 	timer1_init();
	xcall _timer1_init
	.dbline 653
; 	uart0_init();	  
	xcall _uart0_init
	.dbline 654
; 	  displaycount=0;
	clr R2
	sts _displaycount,R2
	.dbline 655
; 	  CLEAR_LIGHT();
	sbi 0x17,6
	.dbline 656
; 	  init_par();          //init ds1302
	xcall _init_par
	.dbline 658
; //	  init_val();          //init var
; 	  lcd_init();          //lcd init
	xcall _lcd_init
	.dbline 659
; 	  clear_lcd();
	xcall _clear_lcd
	.dbline 660
; 	  display_1();
	xcall _display_1
	.dbline 661
; 	  CLEAR_BELL();
	sbi 0x17,5
	.dbline 662
; 	  SET_LED0();
	cbi 0x11,7
	.dbline 663
; 	  beep(5);
	ldi R16,5
	xcall _beep
	.dbline 664
; 	 delay(100);
	ldi R16,100
	xcall _delay
	.dbline 665
; 	 beep(5);
	ldi R16,5
	xcall _beep
	xjmp L303
L302:
	.dbline 669
; 	 
; 
; 	while(1)
; 	{
	.dbline 671
; 
; 			lcd_init();
	xcall _lcd_init
	.dbline 672
; 			if(sio_flag==1)COMM_RX();
	lds R24,_sio_flag
	cpi R24,1
	brne L305
	.dbline 672
	xcall _COMM_RX
L305:
	.dbline 673
; 	  		Get_1302(time_data);
	ldi R16,<_time_data
	ldi R17,>_time_data
	xcall _Get_1302
	.dbline 674
; 			if(modemstatus==0)          //显示正常的日期时间
	lds R2,_modemstatus
	tst R2
	brne L307
	.dbline 675
; 			{
	.dbline 676
; 			 	display_time1(time_data);
	ldi R16,<_time_data
	ldi R17,>_time_data
	xcall _display_time1
	.dbline 677
; 			}
	xjmp L308
L307:
	.dbline 678
; 			else if(modemstatus==2)          //事件录入状态
	lds R24,_modemstatus
	cpi R24,2
	breq X17
	xjmp L309
X17:
	.dbline 679
; 			{
	.dbline 680
; 			 	 if(readxinghaokey()==0)
	xcall _readxinghaokey
	tst R16
	brne L311
	.dbline 681
; 			 	 {
	.dbline 682
; 			  		if(lockkey_flag==1)lockkey_flag=0;
	lds R24,_lockkey_flag
	cpi R24,1
	brne L313
	.dbline 682
	clr R2
	sts _lockkey_flag,R2
	xjmp L314
L313:
	.dbline 683
; 					else if(lockkey_flag==0)
	lds R2,_lockkey_flag
	tst R2
	brne L315
	.dbline 684
; 					{
	.dbline 685
; 						lockkey_flag=1;
	ldi R24,1
	sts _lockkey_flag,R24
	.dbline 686
; 						for(i=0;i<16;i++)
	clr R20
	clr R21
	xjmp L320
L317:
	.dbline 687
	.dbline 688
	ldi R18,1
	movw R16,R20
	subi R16,0  ; offset = 512
	sbci R17,254
	xcall _EEPROMwrite
	.dbline 689
L318:
	.dbline 686
	subi R20,255  ; offset = 1
	sbci R21,255
L320:
	.dbline 686
	cpi R20,16
	ldi R30,0
	cpc R21,R30
	brlo L317
	.dbline 690
; 						{
; 						 	EEPROMwrite(0x200+i,1);
; 						}
; 					}
L315:
L314:
	.dbline 691
; 			 	 }
L311:
	.dbline 692
; 				 if(lockkey_flag==1)
	lds R24,_lockkey_flag
	cpi R24,1
	breq X18
	xjmp L321
X18:
	.dbline 693
; 				 {				 
	.dbline 694
; 				 	yyj=readnumberkey();
	xcall _readnumberkey
	std y+4,R16
	.dbline 695
; 					switch(yyj)
	mov R10,R16
	clr R11
	tst R10
	brne X8
	tst R11
	brne X19
	xjmp L353
X19:
X8:
	movw R24,R10
	cpi R24,1
	ldi R30,0
	cpc R25,R30
	brne X20
	xjmp L326
X20:
	cpi R24,2
	ldi R30,0
	cpc R25,R30
	brne X21
	xjmp L329
X21:
	cpi R24,3
	ldi R30,0
	cpc R25,R30
	brne X22
	xjmp L332
X22:
	cpi R24,4
	ldi R30,0
	cpc R25,R30
	brne X23
	xjmp L335
X23:
	cpi R24,5
	ldi R30,0
	cpc R25,R30
	brne X24
	xjmp L338
X24:
	cpi R24,6
	ldi R30,0
	cpc R25,R30
	brne X25
	xjmp L341
X25:
	cpi R24,7
	ldi R30,0
	cpc R25,R30
	brne X26
	xjmp L344
X26:
	cpi R24,8
	ldi R30,0
	cpc R25,R30
	brne X27
	xjmp L347
X27:
	cpi R24,9
	ldi R30,0
	cpc R25,R30
	brne X28
	xjmp L350
X28:
	cpi R24,11
	ldi R30,0
	cpc R25,R30
	brne X29
	xjmp L356
X29:
	xjmp L324
X9:
	.dbline 696
; 					{
L326:
	.dbline 698
; 				 	 	case 1:
; 						keynum=0;
	clr R2
	sts _keynum,R2
	.dbline 699
; 						if(key1mode>2)key1mode=0;
	ldi R24,2
	lds R2,_key1mode
	cp R24,R2
	brsh L327
	.dbline 699
	clr R2
	sts _key1mode,R2
L327:
	.dbline 700
; 						key1mode++;
	lds R24,_key1mode

⌨️ 快捷键说明

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