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

📄 ps2test.s

📁 ICCAVR下
💻 S
📖 第 1 页 / 共 2 页
字号:
; **********************************************************************/
; void portinitial(void)
; {
	.dbline 89
;  	 PORTA=0XFF;
	ldi R24,255
	out 0x1b,R24
	.dbline 90
;      DDRA=0XFF;                  //OUT
	out 0x1a,R24
	.dbline 91
; 	 PORTB=0XFF;
	out 0x18,R24
	.dbline 92
; 	 DDRB=0X0F;                  //high fout bit in , low four bits out
	ldi R24,15
	out 0x17,R24
	.dbline 93
; 	 PORTC=0XFF;                 //pull up
	ldi R24,255
	out 0x15,R24
	.dbline 94
; 	 PORTD=0XFF;                 //pull up
	out 0x12,R24
	.dbline -2
L36:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e intinitial _intinitial fV
	.even
_intinitial::
	.dbline -1
	.dbline 101
; }
; 
; /*********************************************************************
; fuction: ext interrupt initialize
; **********************************************************************/
; void intinitial(void)      //int1 ,int0下降沿中断
; {
	.dbline 102
;  	 MCUCR=(1<<ISC10);            //falling edge interrup
	ldi R24,4
	out 0x35,R24
	.dbline 103
; 	 GICR |=(1<<INT1);             //enable ext0,ext1 interrupt
	in R24,0x3b
	ori R24,128
	out 0x3b,R24
	.dbline 104
; 	 bitcount = 11;
	ldi R24,11
	sts _bitcount,R24
	.dbline -2
L37:
	.dbline 0 ; func end
	ret
	.dbend
	.area vector(rom, abs)
	.org 8
	jmp _int1pro
	.area text(rom, con, rel)
	.dbfile D:\M16开发板实验教程\icc-avr\ps2test\ps2test.c
	.dbfunc e int1pro _int1pro fV
;           code -> R20
;              i -> R22
	.even
_int1pro::
	xcall push_lset
	xcall push_gset2
	.dbline -1
	.dbline 112
; }
; 
; /*********************************************************************
; fuction: ext1 interrupt  service routine
; **********************************************************************/
; #pragma interrupt_handler int1pro: iv_INT1
; void int1pro(void)
; {
	.dbline 114
;  	 unsigned char i,code;
;      	if ((PIN_KB&(1<<DATAPIN))==0)
	sbic 0x10,2
	rjmp L39
	.dbline 115
; 		{
L41:
	.dbline 116
L42:
	.dbline 116
; 		   while((PIN_KB&(1<<CLOCK))==0);
	sbis 0x10,3
	rjmp L41
	.dbline 117
; 		   for(i=0;i<8;i++)
	clr R22
	xjmp L47
X1:
	.dbline 118
; 		   {
L48:
	.dbline 119
L49:
	.dbline 119
; 		      while(PIN_KB&(1<<CLOCK));
	sbic 0x10,3
	rjmp L48
	.dbline 120
; 		      code>>=1;
	lsr R20
	.dbline 121
; 			  if ((PIN_KB&(1<<DATAPIN))!=0)
	sbis 0x10,2
	rjmp L54
	.dbline 122
; 			      code|=0x80;
	ori R20,128
L53:
	.dbline 123
L54:
	.dbline 123
	sbis 0x10,3
	rjmp L53
	.dbline 124
L45:
	.dbline 117
	inc R22
L47:
	.dbline 117
	cpi R22,8
	brlo L49
L56:
	.dbline 125
L57:
	.dbline 125
; 		       while((PIN_KB&(1<<CLOCK))==0);
; 		   }
; 		   while(PIN_KB&(1<<CLOCK));
	sbic 0x10,3
	rjmp L56
L59:
	.dbline 126
L60:
	.dbline 126
; 		   while((PIN_KB&(1<<CLOCK))==0);
	sbis 0x10,3
	rjmp L59
L62:
	.dbline 127
L63:
	.dbline 127
; 		   while(PIN_KB&(1<<CLOCK));
	sbic 0x10,3
	rjmp L62
	.dbline 128
; 		   if ((PIN_KB&(1<<DATAPIN))!=0)
	sbis 0x10,2
	rjmp L65
	.dbline 129
; 		   {
	.dbline 130
; 			   origialcode=code;
	sts _origialcode,R20
	.dbline 131
; 			   code=decode(code);
	mov R16,R20
	xcall _decode
	mov R20,R16
	.dbline 132
; 			   if(code!=0)
	tst R16
	breq L67
	.dbline 133
; 		          put_c(code);
	xcall _put_c
L67:
	.dbline 134
; 		   }
L65:
	.dbline 135
L39:
	.dbline -2
L38:
	xcall pop_gset2
	xcall pop_lset
	.dbline 0 ; func end
	reti
	.dbsym r code 20 c
	.dbsym r i 22 c
	.dbend
	.dbfunc e init_USART _init_USART fV
	.even
_init_USART::
	.dbline -1
	.dbline 142
; 		} 	
; }
; 
; /*-------------------------------------------------------------------
; function: initialize uart
; --------------------------------------------------------------------*/
; void init_USART(void)//USART 初始化
; {
	.dbline 145
; 
;     //USART 9600 8, n,1  PC上位机软件(超级终端等)也要设成同样的设置才能通讯
;     UCSRC = (1<<URSEL) | 0x06;
	ldi R24,134
	out 0x20,R24
	.dbline 161
;     //异步,8位数据,无奇偶校验,一个停止位,无倍速
;     /*
;     UBRRH与UCSRC共用I/O 地址。因此访问该地址时需注意以下问题。
;     写访问
;     当在该地址执行写访问时, USART 寄存器选择位(URSEL)控制被写入的寄存器。
;     若URSEL为0,对UBRRH值更新;若URSEL为1,对UCSRC设置更新
;     
;     读访问
;     对UBRRH 或UCSRC 寄存器的读访问则较为复杂。但在大多数应用中,基本不需要读这些寄存器
;     
;     
;     没有UBRR这个16位寄存器,因为UBRRL(0x09)/UBRRH(0x20)的地址不连续,而且UBRRH跟UCSRC共用地址
;     */
;     
;     //U2X=0时的公式计算
;     UBRRL= (F_CPU/BAUDRATE/16-1)%256;
	ldi R24,51
	out 0x9,R24
	.dbline 162
;     UBRRH= (F_CPU/BAUDRATE/16-1)/256;
	clr R2
	out 0x20,R2
	.dbline 169
;     //U2X=1时的公式计算
;     //UBRRL= (F_CPU/BAUDRATE/8-1)%256;
;     //UBRRH= (F_CPU/BAUDRATE/8-1)/256;
;     //也可根据数据手册的[波特率设置的例子]查得
;     //UBRRL = 0x2F; //set baud rate lo
;     //UBRRH = 0x00; //set baud rate hi
;     UCSRA = 0x00;                     //无倍速
	out 0xb,R2
	.dbline 170
;     UCSRB = (1<<RXCIE)|(1<<RXEN)|(1<<TXEN);
	ldi R24,152
	out 0xa,R24
	.dbline -2
L69:
	.dbline 0 ; func end
	ret
	.dbend
	.area data(ram, con, rel)
	.dbfile D:\M16开发板实验教程\icc-avr\ps2test\ps2test.c
L71:
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile D:\M16开发板实验教程\icc-avr\ps2test\ps2test.c
L72:
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile D:\M16开发板实验教程\icc-avr\ps2test\ps2test.c
L73:
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile D:\M16开发板实验教程\icc-avr\ps2test\ps2test.c
	.area text(rom, con, rel)
	.dbfile D:\M16开发板实验教程\icc-avr\ps2test\ps2test.c
	.dbfunc e decode _decode fc
	.dbsym s shiftup L73 c
	.dbsym s up L72 c
	.dbsym s shift L71 c
;              i -> R20
;             sc -> R16
	.even
_decode::
	xcall push_gset2
	.dbline -1
	.dbline 180
;     //使能接收中断,使能接收,使能发送
; }
; 
; /*--------------------------------------------------------------------------
; function: decode the ps2 code to ASCII
; para:     sr----ps2 code
; return    ASCII code
; --------------------------------------------------------------------------*/
; unsigned char decode(unsigned char sc)
;     {
	.dbline 183
;       static unsigned char shift=0,up=0,shiftup=0;
; 	  unsigned char i;
; 	  if (sc==0xf0)
	cpi R16,240
	brne L74
	.dbline 184
; 	      {
	.dbline 185
; 		   up=1;
	ldi R24,1
	sts L72,R24
	.dbline 186
; 		   return 0;
	clr R16
	xjmp L70
L74:
	.dbline 188
; 		  }
; 	  if (up==1)
	lds R24,L72
	cpi R24,1
	brne L76
	.dbline 189
; 	  	  {
	.dbline 190
; 		   up=0;
	clr R2
	sts L72,R2
	.dbline 191
; 		   if ((sc==0x12)|(sc==0x59)) shift=0;
	cpi R16,18
	brne L80
	ldi R22,1
	ldi R23,0
	xjmp L81
L80:
	clr R22
	clr R23
L81:
	cpi R16,89
	brne L82
	ldi R20,1
	ldi R21,0
	xjmp L83
L82:
	clr R20
	clr R21
L83:
	movw R2,R22
	or R2,R20
	or R3,R21
	tst R2
	brne X2
	tst R3
	breq L78
X2:
	.dbline 191
	clr R2
	sts L71,R2
L78:
	.dbline 192
; 		   return 0;
	clr R16
	xjmp L70
L76:
	.dbline 194
; 		  }	 
; 	  switch (sc)
	mov R20,R16
	clr R21
	cpi R20,18
	ldi R30,0
	cpc R21,R30
	breq L87
	cpi R20,18
	ldi R30,0
	cpc R21,R30
	brlt L84
L107:
	cpi R20,89
	ldi R30,0
	cpc R21,R30
	breq L88
	xjmp L84
X3:
	.dbline 195
; 	    {
L87:
	.dbline 196
; 		 case 0x12:{
	.dbline 197
; 					shift=1;		
	ldi R24,1
	sts L71,R24
	.dbline 198
; 					shiftup=1;
	sts L73,R24
	.dbline 199
; 		           }		           
L88:
	.dbline 200
; 		 case 0x59:{
	.dbline 201
; 				    shift=1;	
	ldi R24,1
	sts L71,R24
	.dbline 202
; 					shiftup=1;
	sts L73,R24
	.dbline 203
; 		           }		           
L84:
	.dbline 204
; 		 default:{
	.dbline 205
; 		          if (shift==0)
	lds R2,L71
	tst R2
	brne L89
	.dbline 206
; 					 {
	.dbline 207
	clr R20
	xjmp L94
L91:
	.dbline 207
L92:
	.dbline 207
	inc R20
L94:
	.dbline 207
; 					 for(i = 0;unshifted[i][0]!=sc && unshifted[i][0]; i++);
	ldi R24,2
	mul R24,R20
	movw R30,R0
	ldi R24,<_unshifted
	ldi R25,>_unshifted
	add R30,R24
	adc R31,R25
	lpm R2,Z
	clr R3
	cp R2,R16
	breq L95
	tst R2
	brne L91
L95:
	.dbline 208
;                      if (unshifted[i][0] == sc)
	ldi R24,2
	mul R24,R20
	movw R30,R0
	ldi R24,<_unshifted
	ldi R25,>_unshifted
	add R30,R24
	adc R31,R25
	lpm R30,Z
	cp R30,R16
	breq X5
	xjmp L90
X5:
	.dbline 209
; 						  return  unshifted[i][1];
	ldi R24,2
	mul R24,R20
	movw R30,R0
	ldi R24,<_unshifted+1
	ldi R25,>_unshifted+1
	add R30,R24
	adc R31,R25
	lpm R16,Z
	xjmp L70
X4:
	.dbline 210
; 					 }
L89:
	.dbline 212
; 				  else
; 				     {
	.dbline 213
	clr R20
	xjmp L102
L99:
	.dbline 213
L100:
	.dbline 213
	inc R20
L102:
	.dbline 213
; 					 for(i = 0;shifted[i][0]!=sc && shifted[i][0]; i++);
	ldi R24,2
	mul R24,R20
	movw R30,R0
	ldi R24,<_shifted
	ldi R25,>_shifted
	add R30,R24
	adc R31,R25
	lpm R2,Z
	clr R3
	cp R2,R16
	breq L103
	tst R2
	brne L99
L103:
	.dbline 214
;                      if (shifted[i][0] == sc)
	ldi R24,2
	mul R24,R20
	movw R30,R0
	ldi R24,<_shifted
	ldi R25,>_shifted
	add R30,R24
	adc R31,R25
	lpm R30,Z
	cp R30,R16
	brne L104
	.dbline 215
;                          {
	.dbline 216
; 						  return shifted[i][1];					  
	ldi R24,2
	mul R24,R20
	movw R30,R0
	ldi R24,<_shifted+1
	ldi R25,>_shifted+1
	add R30,R24
	adc R31,R25
	lpm R16,Z
	xjmp L70
L104:
	.dbline 218
; 						 }	 	 						 
; 					 } 
L90:
	.dbline 219
; 		         }	
	.dbline 220
; 		 return 0;	         
	clr R16
	.dbline -2
L70:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbsym r sc 16 c
	.dbend
	.area bss(ram, con, rel)
	.dbfile D:\M16开发板实验教程\icc-avr\ps2test\ps2test.c
_bitcount::
	.blkb 1
	.dbsym e bitcount _bitcount c
	.area data(ram, con, rel)
	.dbfile D:\M16开发板实验教程\icc-avr\ps2test\ps2test.c
L32:
	.blkb 18
	.area idata
	.byte 'd,'u,'s,'h,'i,'b,'i,'a,'o,64,49,50,54,46,'c,'o
	.byte 'm,0
	.area data(ram, con, rel)
	.dbfile D:\M16开发板实验教程\icc-avr\ps2test\ps2test.c
L31:
	.blkb 10
	.area idata
	.byte 'd,'u,'s,'h,'i,'b,'i,'a,'o,0
	.area data(ram, con, rel)
	.dbfile D:\M16开发板实验教程\icc-avr\ps2test\ps2test.c
L30:
	.blkb 18
	.area idata
	.byte 'P,'S,50,45,45,'K,'E,'Y,'O,'A,'R,'D,32,'t,'e,'s
	.byte 't,0
	.area data(ram, con, rel)
	.dbfile D:\M16开发板实验教程\icc-avr\ps2test\ps2test.c

⌨️ 快捷键说明

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