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

📄 课程设计.s

📁 PS2控制代码123456789
💻 S
📖 第 1 页 / 共 5 页
字号:
	.dbline 585
; 					case 0x12 :	// 左 SHIFT
; 						Shift = 0;
	clr R2
	sts _Shift,R2
	.dbline 586
; 					break;
	xjmp L151
L154:
	.dbline 589
;                     
; 					case 0x59 :	// 右 SHIFT
; 						Shift = 0;
	clr R2
	sts _Shift,R2
	.dbline 590
; 					break;
L150:
L151:
	.dbline 592
; 				}
; 		}
L112:
	.dbline 593
; 	flag = 0; //标识字符处理完了
	clr R2
	sts _flag,R2
	.dbline -2
L110:
	adiw R28,1
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r TempCyc 22 c
	.dbsym r ScanCode 20 c
	.dbend
	.dbfunc e initial_Exinterup _initial_Exinterup fV
	.even
_initial_Exinterup::
	.dbline -1
	.dbline 600
; } 
; //**************************************************//
;                   /*初始化****/
; //**************************************************//   
;    
;    void initial_Exinterup(void)
;        {
	.dbline 601
; 	   DDRE&=~BIT(4);
	cbi 0x2,4
	.dbline 602
; 	   DDRE&=~BIT(5);//输入
	cbi 0x2,5
	.dbline 603
; 	   PORTE|=BIT(4);
	sbi 0x3,4
	.dbline 604
; 	   PORTE|=BIT(5);//都置高
	sbi 0x3,5
	.dbline 605
; 	   MCUCR=0X00;
	clr R2
	out 0x35,R2
	.dbline 606
; 	   EICRB=0X00; 
	out 0x3a,R2
	.dbline 607
;        EIMSK=0X10;	//INT4标志 
	ldi R24,16
	out 0x39,R24
	.dbline -2
L156:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e uart0_init _uart0_init fV
	.even
_uart0_init::
	.dbline -1
	.dbline 613
;        }
; 
; /*********************计算机通讯 ***********************/
; 
; void uart0_init(void)
; {
	.dbline 614
;  UCSR0B = 0x00; //disable while setting baud rate
	clr R2
	out 0xa,R2
	.dbline 615
;  UCSR0A = 0x00;
	out 0xb,R2
	.dbline 616
;  UCSR0C =(1<<UCSZ01)|(1<<UCSZ00);//8bit+1bit stop
	ldi R24,6
	sts 149,R24
	.dbline 617
;  UBRR0L=(fosc/16/(BAUD+1))%256;
	ldi R24,52
	out 0x9,R24
	.dbline 618
;  UBRR0H=(fosc/16/(BAUD+1))/256;
	sts 144,R2
	.dbline 619
;  UCSR0B =(1<<RXEN0)|(1<<TXEN0)|(1<<RXCIE0);//RXCEN TXCEN
	ldi R24,152
	out 0xa,R24
	.dbline -2
L157:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e putchar0 _putchar0 fV
;              c -> R16
	.even
_putchar0::
	.dbline -1
	.dbline 623
; }
; 
; void putchar0(unsigned char c)
; 	{	
	.dbline 624
; 	   UDR0=c;  
	out 0xc,R16
L159:
	.dbline 625
L160:
	.dbline 625
; 	 while (!(UCSR0A&(1<<UDRE0)));
	sbis 0xb,5
	rjmp L159
	.dbline -2
L158:
	.dbline 0 ; func end
	ret
	.dbsym r c 16 c
	.dbend
	.dbfunc e puts0 _puts0 fV
;              s -> R20,R21
	.even
_puts0::
	xcall push_gset1
	movw R20,R16
	.dbline -1
	.dbline 628
; 	}
;  void puts0(char *s)
; 	{
	xjmp L164
L163:
	.dbline 630
	.dbline 631
	movw R30,R20
	ldd R16,z+0
	xcall _putchar0
	.dbline 632
	subi R20,255  ; offset = 1
	sbci R21,255
	.dbline 633
L164:
	.dbline 629
; 	while (*s)
	movw R30,R20
	ldd R2,z+0
	tst R2
	brne L163
	.dbline 634
; 		{
; 		putchar0(*s);
; 		s++;
; 		}	
;     putchar0(0x0a);
	ldi R16,10
	xcall _putchar0
	.dbline 635
; 	putchar0(0x0d);
	ldi R16,13
	xcall _putchar0
	.dbline -2
L162:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r s 20 pc
	.dbend
	.dbfunc e getchar0 _getchar0 fc
	.even
_getchar0::
	.dbline -1
	.dbline 638
; 	}
; unsigned char getchar0(void)
;   	{
L167:
	.dbline 639
L168:
	.dbline 639
; 	 while(!(UCSR0A& (1<<RXC0)));
	sbis 0xb,7
	rjmp L167
	.dbline 640
;      return UDR0;
	in R16,0xc
	.dbline -2
L166:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e delay_us _delay_us fV
;           time -> R16,R17
	.even
_delay_us::
	.dbline -1
	.dbline 643
; 	}	
; void delay_us(int time)
;  {     
L171:
	.dbline 645
;   do
; 	{
	.dbline 646
; 	time--;
	subi R16,1
	sbci R17,0
	.dbline 647
; 	}	
L172:
	.dbline 648
;   while (time>1);
	ldi R24,1
	ldi R25,0
	cp R24,R16
	cpc R25,R17
	brlt L171
	.dbline -2
L170:
	.dbline 0 ; func end
	ret
	.dbsym r time 16 I
	.dbend
	.dbfunc e delay_ms _delay_ms fV
;           time -> R20,R21
	.even
_delay_ms::
	xcall push_gset1
	movw R20,R16
	.dbline -1
	.dbline 651
;  }
; void delay_ms(unsigned int time)
; 	 {
	xjmp L176
L175:
	.dbline 653
	.dbline 654
	ldi R16,1000
	ldi R17,3
	xcall _delay_us
	.dbline 655
	subi R20,1
	sbci R21,0
	.dbline 656
L176:
	.dbline 652
; 	  while(time!=0)
	cpi R20,0
	cpc R20,R21
	brne L175
X11:
	.dbline -2
L174:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r time 20 i
	.dbend
	.dbfunc e computer _computer fV
	.even
_computer::
	xcall push_gset2
	sbiw R28,4
	.dbline -1
	.dbline 660
; 	  	  {		
; 		   delay_us(1000);
; 		   time--;
; 		  }
; 	 }	
; /*********************计算器***********************/
; void computer(void)
; { 
	.dbline 661
;   if((scan_key()<=9)&&(scan_key()>=0))
	xcall _scan_key
	ldi R24,9
	cp R24,R16
	brlo L179
	xcall _scan_key
	cpi R16,0
	brlo L179
	.dbline 662
;       { 
	.dbline 663
; 	    write_ASCII(0xf9,jy,16,table1[scan_key()]);
	xcall _scan_key
	ldi R24,<_table1
	ldi R25,>_table1
	mov R30,R16
	clr R31
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	clr R3
	std y+3,R3
	std y+2,R2
	ldi R24,16
	ldi R25,0
	std y+1,R25
	std y+0,R24
	lds R18,_jy
	clr R19
	ldi R16,249
	ldi R17,0
	xcall _write_ASCII
	.dbline 664
; 		jy++;
	lds R24,_jy
	subi R24,255    ; addi 1
	sts _jy,R24
	.dbline 666
; 		//count_comp++;
; 		putchar0(jy);	
	mov R16,R24
	xcall _putchar0
	.dbline 679
;      /* switch(jy)
;        {  
;         case 1:value=scan_key();break;
;         case 2:value=scan_key()*10+scan_key();break;
;      	case 3:value=scan_key()*10+scan_key();break;
;      	case 4:value=scan_key()*10+scan_key();break;
;      	case 5:value=scan_key()*10+scan_key();break;
;      	case 6:value=scan_key()*10+scan_key();break;
;      	case 7:value=scan_key()*10+scan_key();break;
;      	case 8:value=scan_key()*10+scan_key();break;
;      	default:break;
;        }*/
;      }
L179:
	.dbline 681
; 	    
;    if(scan_key()==10)//A
	xcall _scan_key
	cpi R16,10
	brne L181
	.dbline 682
;    {valuefirst=value;value=0;flag_add=1;count_comp=0;jy=0;ocmj_write(0xf4);} //'+',
	.dbline 682
	lds R4,_value+2
	lds R5,_value+2+1
	lds R2,_value
	lds R3,_value+1
	sts _valuefirst+1,R3
	sts _valuefirst,R2
	sts _valuefirst+2+1,R5
	sts _valuefirst+2,R4
	.dbline 682
	ldi R20,0
	ldi R21,0
	ldi R22,0
	ldi R23,0
	sts _value+1,R21
	sts _value,R20
	sts _value+2+1,R23
	sts _value+2,R22
	.dbline 682
	ldi R24,1
	sts _flag_add,R24
	.dbline 682
	clr R2
	sts _count_comp,R2
	.dbline 682
	sts _jy,R2
	.dbline 682
	ldi R16,244
	xcall _ocmj_write
	.dbline 682
L181:
	.dbline 683
;    if((ks()==0xff)&&(scan_key()==11))//B
	xcall _ks
	cpi R16,255
	brne L183
	xcall _scan_key
	cpi R16,11
	brne L183
	.dbline 684
;    {valuefirst=value;value=0;flag_sub=1;count_comp=0;jy=0;ocmj_write(0xf4);}  // -
	.dbline 684
	lds R4,_value+2
	lds R5,_value+2+1
	lds R2,_value
	lds R3,_value+1
	sts _valuefirst+1,R3
	sts _valuefirst,R2
	sts _valuefirst+2+1,R5
	sts _valuefirst+2,R4
	.dbline 684
	ldi R20,0
	ldi R21,0
	ldi R22,0
	ldi R23,0
	sts _value+1,R21
	sts _value,R20
	sts _value+2+1,R23
	sts _value+2,R22
	.dbline 684
	ldi R24,1
	sts _flag_sub,R24
	.dbline 684
	clr R2
	sts _count_comp,R2
	.dbline 684
	sts _jy,R2
	.dbline 684
	ldi R16,244
	xcall _ocmj_write
	.dbline 684
L183:
	.dbline 685
;    if((ks()==0xff)&&(scan_key()==12))//c
	xcall _ks
	cpi R16,255
	brne L185
	xcall _scan_key
	cpi R16,12
	brne L185
	.dbline 686
;    {valuefirst=value;value=0;flag_mul=1;count_comp=0;jy=0;ocmj_write(0xf4);}//  *
	.dbline 686
	lds R4,_value+2
	lds R5,_value+2+1
	lds R2,_value
	lds R3,_value+1
	sts _valuefirst+1,R3
	sts _valuefirst,R2
	sts _valuefirst+2+1,R5
	sts _valuefirst+2,R4
	.dbline 686
	ldi R20,0
	ldi R21,0
	ldi R22,0
	ldi R23,0
	sts _value+1,R21
	sts _value,R20
	sts _value+2+1,R23
	sts _value+2,R22
	.dbline 686
	ldi R24,1
	sts _flag_mul,R24
	.dbline 686
	clr R2
	sts _count_comp,R2
	.dbline 686
	sts _jy,R2
	.dbline 686
	ldi R16,244
	xcall _ocmj_write
	.dbline 686
L185:
	.dbline 687
;    if((ks()==0xff)&&(scan_key()==13))//D
	xcall _ks
	cpi R16,255
	brne L187
	xcall _scan_key
	cpi R16,13
	brne L187
	.dbline 688
;    {valuefirst=value;value=0;flag_mod=1;count_comp=0;jy=0;ocmj_write(0xf4);}//  /
	.dbline 688
	lds R4,_value+2
	lds R5,_value+2+1
	lds R2,_value
	lds R3,_value+1
	sts _valuefirst+1,R3
	sts _valuefirst,R2
	sts _valuefirst+2+1,R5
	sts _valuefirst+2,R4
	.dbline 688
	ldi R20,0
	ldi R21,0
	ldi R22,0
	ldi R23,0
	sts _value+1,R21
	sts _value,R20
	sts _value+2+1,R23
	sts _value+2,R22
	.dbline 688
	ldi R24,1
	sts _flag_mod,R24
	.dbline 688
	clr R2
	sts _count_comp,R2
	.dbline 688
	sts _jy,R2
	.dbline 688
	ldi R16,244
	xcall _ocmj_write
	.dbline 688
L187:
	.dbline 689
;    if(scan_key()==14)//E
	xcall _scan_key
	cpi R16,14
	breq X12
	xjmp L189
X12:
	.dbline 690
; 	  {     
	.dbline 691
; 	    if(flag_add==1) {rezult=valuefirst+value;count_comp=0;flag_add=0;ocmj_write(0xf4);jy=0;
	lds R24,_flag_add
	cpi R24,1
	breq X13
	xjmp L191
X13:
	.dbline 691
	.dbline 691
	lds R4,_value+2
	lds R5,_value+2+1
	lds R2,_value
	lds R3,_value+1
	lds R8,_valuefirst+2
	lds R9,_valuefirst+2+1
	lds R6,_valuefirst
	lds R7,_valuefirst+1
	add R6,R2
	adc R7,R3
	adc R8,R4
	adc R9,R5
	sts _rezult+1,R7
	sts _rezult,R6
	sts _rezult+2+1,R9
	sts _rezult+2,R8
	.dbline 691
	clr R2
	sts _count_comp,R2
	.dbline 691
	sts _flag_add,R2
	.dbline 691
	ldi R16,244
	xcall _ocmj_write
	.dbline 691
	clr R2
	sts _jy,R2
	.dbline 692
; 		                 write_ASCII(0xf9,6,32,table1[rezult/100]);
	ldi R20,100
	ldi R21,0
	ldi R22,0
	ldi R23,0
	lds R4,_rezult+2
	lds R5,_rezult+2+1
	lds R2,_rezult
	lds R3,_rezult+1
	st -y,R23
	st -y,R22
	st -y,R21
	st -y,R20
	movw R16,R2
	movw R18,R4
	xcall div32u
	movw R30,R16
	ldi R24,<_table1
	ldi R25,>_table1
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	clr R3
	std y+3,R3
	std y+2,R2
	ldi R24,32
	ldi R25,0
	std y+1,R25
	std y+0,R24
	ldi R18,6
	ldi R19,0
	ldi R16,249
	ldi R17,0
	xcall _write_ASCII
	.dbline 693
; 	                     write_ASCII(0xf9,7,32,table1[rezult%100/10]);
	ldi R20,100
	ldi R21,0
	ldi R22,0
	ldi R23,0
	lds R4,_rezult+2
	lds R5,_rezult+2+1
	lds R2,_rezult
	lds R3,_rezult+1
	st -y,R23
	st -y,R22
	st -y,R21
	st -y,R20
	movw R16,R2
	movw R18,R4
	xcall mod32u
	ldi R20,10
	ldi R21,0
	ldi R22,0
	ldi R23,0
	st -y,R23
	st -y,R22
	st -y,R21
	st -y,R20
	xcall div32u
	movw R30,R16
	ldi R24,<_table1
	ldi R25,>_table1
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	clr R3
	std y+3,R3
	std y+2,R2
	ldi R24,32
	ldi R25,0
	std y+1,R25
	std y+0,R24
	ldi R18,7
	ldi R19,0
	ldi R16,249
	ldi R17,0
	xcall _write_ASCII
	.dbline 694
; 	                     write_ASCII(0xf9,8,32,table1[rezult%10]);
	ldi R20,10
	ldi R21,0
	ldi R22,0
	ldi R23,0
	lds R4,_rezult+2
	lds R5,_rezult+2+1
	lds R2,_rezult
	lds R3,_rezult+1
	st -y,R23
	st -y,R22
	st -y,R21
	st -y,R20
	movw R16,R2
	movw R18,R4
	xcall mod32u
	movw R30,R16
	ldi R24,<_table1
	ldi R25,>_table1
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	clr R3
	std y+3,R3
	std y+2,R2
	ldi R24,32
	ldi R25,0
	std y+1,R25
	std y+0,R24
	ldi R18,8
	ldi R19,0
	ldi R16,249
	ldi R17,0
	xcall _write_ASCII
	.dbline 695
; 		                }
L191:
	.dbline 696
; 	    if(flag_sub==1) {rezult=valuefirst-value;count_comp=0;flag_sub=0;ocmj_write(0xf4);jy=0; write_ASCII(0xf9,6,32,table1[rezult/100]);
	lds R24,_flag_sub
	cpi R24,1
	breq X14
	xjmp L193
X14:
	.dbline 696
	.dbline 696
	lds R4,_value+2
	lds R5,_value+2+1
	lds R2,_value
	lds R3,_value+1
	lds R8,_valuefirst+2
	lds R9,_valuefirst+2+1
	lds R6,_valuefirst
	lds R7,_valuefirst+1
	sub R6,R2
	sbc R7,R3
	sbc R8,R4
	sbc R9,R5
	sts _rezult+1,R7
	sts _rezult,R6
	sts _rezult+2+1,R9
	sts _rezult+2,R8
	.dbline 696
	clr R2
	sts _count_comp,R2
	.dbline 696
	sts _flag_sub,R2
	.dbline 696
	ldi R16,244
	xcall _ocmj_write
	.dbline 696
	clr R2
	sts _

⌨️ 快捷键说明

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