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

📄 ps2test.lst

📁 ICCAVR下
💻 LST
📖 第 1 页 / 共 2 页
字号:
    01AC 9546      LSR	R20
(0121) 			  if ((PIN_KB&(1<<DATAPIN))!=0)
    01AD 9B82      SBIS	0x10,2
    01AE C001      RJMP	0x01B0
(0122) 			      code|=0x80;
    01AF 6840      ORI	R20,0x80
(0123) 		       while((PIN_KB&(1<<CLOCK))==0);
    01B0 9B83      SBIS	0x10,3
    01B1 CFFE      RJMP	0x01B0
    01B2 9563      INC	R22
    01B3 3068      CPI	R22,0x8
    01B4 F3A8      BCS	0x01AA
(0124) 		   }
(0125) 		   while(PIN_KB&(1<<CLOCK));
    01B5 9983      SBIC	0x10,3
    01B6 CFFE      RJMP	0x01B5
(0126) 		   while((PIN_KB&(1<<CLOCK))==0);
    01B7 9B83      SBIS	0x10,3
    01B8 CFFE      RJMP	0x01B7
(0127) 		   while(PIN_KB&(1<<CLOCK));
    01B9 9983      SBIC	0x10,3
    01BA CFFE      RJMP	0x01B9
(0128) 		   if ((PIN_KB&(1<<DATAPIN))!=0)
    01BB 9B82      SBIS	0x10,2
    01BC C008      RJMP	0x01C5
(0129) 		   {
(0130) 			   origialcode=code;
    01BD 93400060  STS	origialcode,R20
(0131) 			   code=decode(code);
    01BF 2F04      MOV	R16,R20
    01C0 D013      RCALL	_decode
    01C1 2F40      MOV	R20,R16
(0132) 			   if(code!=0)
    01C2 2300      TST	R16
    01C3 F009      BEQ	0x01C5
(0133) 		          put_c(code);
    01C4 DF9A      RCALL	_put_c
(0134) 		   }
(0135) 		} 	
    01C5 940E02A0  CALL	pop_gset2
    01C7 940E02D9  CALL	pop_lset
    01C9 9518      RETI
(0136) }
(0137) 
(0138) /*-------------------------------------------------------------------
(0139) function: initialize uart
(0140) --------------------------------------------------------------------*/
(0141) void init_USART(void)//USART 初始化
(0142) {
(0143) 
(0144)     //USART 9600 8, n,1  PC上位机软件(超级终端等)也要设成同样的设置才能通讯
(0145)     UCSRC = (1<<URSEL) | 0x06;
_init_USART:
    01CA E886      LDI	R24,0x86
    01CB BD80      OUT	0x20,R24
(0146)     //异步,8位数据,无奇偶校验,一个停止位,无倍速
(0147)     /*
(0148)     UBRRH与UCSRC共用I/O 地址。因此访问该地址时需注意以下问题。
(0149)     写访问
(0150)     当在该地址执行写访问时, USART 寄存器选择位(URSEL)控制被写入的寄存器。
(0151)     若URSEL为0,对UBRRH值更新;若URSEL为1,对UCSRC设置更新
(0152)     
(0153)     读访问
(0154)     对UBRRH 或UCSRC 寄存器的读访问则较为复杂。但在大多数应用中,基本不需要读这些寄存器
(0155)     
(0156)     
(0157)     没有UBRR这个16位寄存器,因为UBRRL(0x09)/UBRRH(0x20)的地址不连续,而且UBRRH跟UCSRC共用地址
(0158)     */
(0159)     
(0160)     //U2X=0时的公式计算
(0161)     UBRRL= (F_CPU/BAUDRATE/16-1)%256;
    01CC E383      LDI	R24,0x33
    01CD B989      OUT	0x09,R24
(0162)     UBRRH= (F_CPU/BAUDRATE/16-1)/256;
    01CE 2422      CLR	R2
    01CF BC20      OUT	0x20,R2
(0163)     //U2X=1时的公式计算
(0164)     //UBRRL= (F_CPU/BAUDRATE/8-1)%256;
(0165)     //UBRRH= (F_CPU/BAUDRATE/8-1)/256;
(0166)     //也可根据数据手册的[波特率设置的例子]查得
(0167)     //UBRRL = 0x2F; //set baud rate lo
(0168)     //UBRRH = 0x00; //set baud rate hi
(0169)     UCSRA = 0x00;                     //无倍速
    01D0 B82B      OUT	0x0B,R2
(0170)     UCSRB = (1<<RXCIE)|(1<<RXEN)|(1<<TXEN);
    01D1 E988      LDI	R24,0x98
    01D2 B98A      OUT	0x0A,R24
    01D3 9508      RET
_decode:
  i                    --> R20
  sc                   --> R16
    01D4 940E02A9  CALL	push_gset2
(0171)     //使能接收中断,使能接收,使能发送
(0172) }
(0173) 
(0174) /*--------------------------------------------------------------------------
(0175) function: decode the ps2 code to ASCII
(0176) para:     sr----ps2 code
(0177) return    ASCII code
(0178) --------------------------------------------------------------------------*/
(0179) unsigned char decode(unsigned char sc)
(0180)     {
(0181)       static unsigned char shift=0,up=0,shiftup=0;
(0182) 	  unsigned char i;
(0183) 	  if (sc==0xf0)
    01D6 3F00      CPI	R16,0xF0
    01D7 F429      BNE	0x01DD
(0184) 	      {
(0185) 		   up=1;
    01D8 E081      LDI	R24,1
    01D9 93800062  STS	up,R24
(0186) 		   return 0;
    01DB 2700      CLR	R16
    01DC C086      RJMP	0x0263
(0187) 		  }
(0188) 	  if (up==1)
    01DD 91800062  LDS	R24,up
    01DF 3081      CPI	R24,1
    01E0 F4E9      BNE	0x01FE
(0189) 	  	  {
(0190) 		   up=0;
    01E1 2422      CLR	R2
    01E2 92200062  STS	up,R2
(0191) 		   if ((sc==0x12)|(sc==0x59)) shift=0;
    01E4 3102      CPI	R16,0x12
    01E5 F419      BNE	0x01E9
    01E6 E061      LDI	R22,1
    01E7 E070      LDI	R23,0
    01E8 C002      RJMP	0x01EB
    01E9 2766      CLR	R22
    01EA 2777      CLR	R23
    01EB 3509      CPI	R16,0x59
    01EC F419      BNE	0x01F0
    01ED E041      LDI	R20,1
    01EE E050      LDI	R21,0
    01EF C002      RJMP	0x01F2
    01F0 2744      CLR	R20
    01F1 2755      CLR	R21
    01F2 011B      MOVW	R2,R22
    01F3 2A24      OR	R2,R20
    01F4 2A35      OR	R3,R21
    01F5 2022      TST	R2
    01F6 F411      BNE	0x01F9
    01F7 2033      TST	R3
    01F8 F019      BEQ	0x01FC
    01F9 2422      CLR	R2
    01FA 92200061  STS	shift,R2
(0192) 		   return 0;
    01FC 2700      CLR	R16
    01FD C065      RJMP	0x0263
(0193) 		  }	 
(0194) 	  switch (sc)
    01FE 2F40      MOV	R20,R16
    01FF 2755      CLR	R21
    0200 3142      CPI	R20,0x12
    0201 E0E0      LDI	R30,0
    0202 075E      CPC	R21,R30
    0203 F049      BEQ	0x020D
    0204 3142      CPI	R20,0x12
    0205 E0E0      LDI	R30,0
    0206 075E      CPC	R21,R30
    0207 F07C      BLT	0x0217
    0208 3549      CPI	R20,0x59
    0209 E0E0      LDI	R30,0
    020A 075E      CPC	R21,R30
    020B F031      BEQ	0x0212
    020C C00A      RJMP	0x0217
(0195) 	    {
(0196) 		 case 0x12:{
(0197) 					shift=1;		
    020D E081      LDI	R24,1
    020E 93800061  STS	shift,R24
(0198) 					shiftup=1;
    0210 93800063  STS	shiftup,R24
(0199) 		           }		           
(0200) 		 case 0x59:{
(0201) 				    shift=1;	
    0212 E081      LDI	R24,1
    0213 93800061  STS	shift,R24
(0202) 					shiftup=1;
    0215 93800063  STS	shiftup,R24
(0203) 		           }		           
(0204) 		 default:{
(0205) 		          if (shift==0)
    0217 90200061  LDS	R2,shift
    0219 2022      TST	R2
    021A F521      BNE	0x023F
(0206) 					 {
(0207) 					 for(i = 0;unshifted[i][0]!=sc && unshifted[i][0]; i++);
    021B 2744      CLR	R20
    021C C001      RJMP	0x021E
    021D 9543      INC	R20
    021E E082      LDI	R24,2
    021F 9F84      MUL	R24,R20
    0220 01F0      MOVW	R30,R0
    0221 E584      LDI	R24,0x54
    0222 E090      LDI	R25,0
    0223 0FE8      ADD	R30,R24
    0224 1FF9      ADC	R31,R25
    0225 9024      LPM	R2,0(Z)
    0226 2433      CLR	R3
    0227 1620      CP	R2,R16
    0228 F011      BEQ	0x022B
    0229 2022      TST	R2
    022A F791      BNE	0x021D
(0208)                      if (unshifted[i][0] == sc)
    022B E082      LDI	R24,2
    022C 9F84      MUL	R24,R20
    022D 01F0      MOVW	R30,R0
    022E E584      LDI	R24,0x54
    022F E090      LDI	R25,0
    0230 0FE8      ADD	R30,R24
    0231 1FF9      ADC	R31,R25
    0232 91E4      LPM	R30,0(Z)
    0233 17E0      CP	R30,R16
    0234 F009      BEQ	0x0236
    0235 C02C      RJMP	0x0262
(0209) 						  return  unshifted[i][1];
    0236 E082      LDI	R24,2
    0237 9F84      MUL	R24,R20
    0238 01F0      MOVW	R30,R0
    0239 E585      LDI	R24,0x55
    023A E090      LDI	R25,0
    023B 0FE8      ADD	R30,R24
    023C 1FF9      ADC	R31,R25
    023D 9104      LPM	R16,0(Z)
    023E C024      RJMP	0x0263
(0210) 					 }
(0211) 				  else
(0212) 				     {
(0213) 					 for(i = 0;shifted[i][0]!=sc && shifted[i][0]; i++);
    023F 2744      CLR	R20
    0240 C001      RJMP	0x0242
    0241 9543      INC	R20
    0242 E082      LDI	R24,2
    0243 9F84      MUL	R24,R20
    0244 01F0      MOVW	R30,R0
    0245 ED8C      LDI	R24,0xDC
    0246 E090      LDI	R25,0
    0247 0FE8      ADD	R30,R24
    0248 1FF9      ADC	R31,R25
    0249 9024      LPM	R2,0(Z)
    024A 2433      CLR	R3
    024B 1620      CP	R2,R16
    024C F011      BEQ	0x024F
    024D 2022      TST	R2
    024E F791      BNE	0x0241
(0214)                      if (shifted[i][0] == sc)
    024F E082      LDI	R24,2
    0250 9F84      MUL	R24,R20
    0251 01F0      MOVW	R30,R0
    0252 ED8C      LDI	R24,0xDC
    0253 E090      LDI	R25,0
    0254 0FE8      ADD	R30,R24
    0255 1FF9      ADC	R31,R25
    0256 91E4      LPM	R30,0(Z)
    0257 17E0      CP	R30,R16
    0258 F449      BNE	0x0262
(0215)                          {
(0216) 						  return shifted[i][1];					  
    0259 E082      LDI	R24,2
    025A 9F84      MUL	R24,R20
    025B 01F0      MOVW	R30,R0
    025C ED8D      LDI	R24,0xDD
    025D E090      LDI	R25,0
    025E 0FE8      ADD	R30,R24
    025F 1FF9      ADC	R31,R25
    0260 9104      LPM	R16,0(Z)
    0261 C001      RJMP	0x0263
(0217) 						 }	 	 						 
(0218) 					 } 
(0219) 		         }	
(0220) 		 return 0;	         
FILE: <library>
    0262 2700      CLR	R16
    0263 940E02A0  CALL	pop_gset2
    0265 9508      RET
mod16s:
    0266 9468      BSET	6
    0267 92DA      ST	R13,-Y
    0268 2ED1      MOV	R13,R17
    0269 C004      RJMP	0x026E
div16s:
    026A 94E8      BCLR	6
    026B 92DA      ST	R13,-Y
    026C 2ED1      MOV	R13,R17
    026D 26D3      EOR	R13,R19
    026E FF17      SBRS	R17,7
    026F C004      RJMP	0x0274
    0270 9510      COM	R17
    0271 9500      COM	R16
    0272 5F0F      SUBI	R16,0xFF
    0273 4F1F      SBCI	R17,0xFF
    0274 FF37      SBRS	R19,7
    0275 C004      RJMP	0x027A
    0276 9530      COM	R19
    0277 9520      COM	R18
    0278 5F2F      SUBI	R18,0xFF
    0279 4F3F      SBCI	R19,0xFF
    027A 940E0287  CALL	xdiv16u
    027C FED7      SBRS	R13,7
    027D C004      RJMP	0x0282
    027E 9510      COM	R17
    027F 9500      COM	R16
    0280 5F0F      SUBI	R16,0xFF
    0281 4F1F      SBCI	R17,0xFF
    0282 90D9      LD	R13,Y+
    0283 9508      RET
mod16u:
    0284 9468      BSET	6
    0285 C001      RJMP	xdiv16u
div16u:
    0286 94E8      BCLR	6
xdiv16u:
    0287 92EA      ST	R14,-Y
    0288 92FA      ST	R15,-Y
    0289 938A      ST	R24,-Y
    028A 24EE      CLR	R14
    028B 24FF      CLR	R15
    028C E180      LDI	R24,0x10
    028D 0F00      LSL	R16
    028E 1F11      ROL	R17
    028F 1CEE      ROL	R14
    0290 1CFF      ROL	R15
    0291 16E2      CP	R14,R18
    0292 06F3      CPC	R15,R19
    0293 F018      BCS	0x0297
    0294 1AE2      SUB	R14,R18
    0295 0AF3      SBC	R15,R19
    0296 9503      INC	R16
    0297 958A      DEC	R24
    0298 F7A1      BNE	0x028D
    0299 F416      BRTC	0x029C
    029A 2D0E      MOV	R16,R14
    029B 2D1F      MOV	R17,R15
    029C 9189      LD	R24,Y+
    029D 90F9      LD	R15,Y+
    029E 90E9      LD	R14,Y+
    029F 9508      RET
pop_gset2:
    02A0 E0E2      LDI	R30,2
    02A1 940C02AF  JMP	pop
push_gset5:
    02A3 92FA      ST	R15,-Y
    02A4 92EA      ST	R14,-Y
push_gset4:
    02A5 92DA      ST	R13,-Y
    02A6 92CA      ST	R12,-Y
push_gset3:
    02A7 92BA      ST	R11,-Y
    02A8 92AA      ST	R10,-Y
push_gset2:
    02A9 937A      ST	R23,-Y
    02AA 936A      ST	R22,-Y
push_gset1:
    02AB 935A      ST	R21,-Y
    02AC 934A      ST	R20,-Y
    02AD 9508      RET
pop_gset1:
    02AE E0E1      LDI	R30,1
pop:
    02AF 9149      LD	R20,Y+
    02B0 9159      LD	R21,Y+
    02B1 FDE0      SBRC	R30,0
    02B2 9508      RET
    02B3 9169      LD	R22,Y+
    02B4 9179      LD	R23,Y+
    02B5 FDE1      SBRC	R30,1
    02B6 9508      RET
    02B7 90A9      LD	R10,Y+
    02B8 90B9      LD	R11,Y+
    02B9 FDE2      SBRC	R30,2
    02BA 9508      RET
    02BB 90C9      LD	R12,Y+
    02BC 90D9      LD	R13,Y+
    02BD FDE3      SBRC	R30,3
    02BE 9508      RET
    02BF 90E9      LD	R14,Y+
    02C0 90F9      LD	R15,Y+
    02C1 9508      RET
push_lset:
    02C2 93FA      ST	R31,-Y
    02C3 93EA      ST	R30,-Y
    02C4 93BA      ST	R27,-Y
    02C5 93AA      ST	R26,-Y
    02C6 939A      ST	R25,-Y
    02C7 938A      ST	R24,-Y
    02C8 933A      ST	R19,-Y
    02C9 932A      ST	R18,-Y
    02CA 931A      ST	R17,-Y
    02CB 930A      ST	R16,-Y
    02CC 929A      ST	R9,-Y
    02CD 928A      ST	R8,-Y
    02CE 927A      ST	R7,-Y
    02CF 926A      ST	R6,-Y
    02D0 925A      ST	R5,-Y
    02D1 924A      ST	R4,-Y
    02D2 923A      ST	R3,-Y
    02D3 922A      ST	R2,-Y
    02D4 921A      ST	R1,-Y
    02D5 920A      ST	R0,-Y
    02D6 B60F      IN	R0,0x3F
    02D7 920A      ST	R0,-Y
    02D8 9508      RET
pop_lset:
    02D9 9009      LD	R0,Y+
    02DA BE0F      OUT	0x3F,R0
    02DB 9009      LD	R0,Y+
    02DC 9019      LD	R1,Y+
    02DD 9029      LD	R2,Y+
    02DE 9039      LD	R3,Y+
    02DF 9049      LD	R4,Y+
    02E0 9059      LD	R5,Y+
    02E1 9069      LD	R6,Y+
    02E2 9079      LD	R7,Y+
    02E3 9089      LD	R8,Y+
    02E4 9099      LD	R9,Y+
    02E5 9109      LD	R16,Y+
    02E6 9119      LD	R17,Y+
    02E7 9129      LD	R18,Y+
    02E8 9139      LD	R19,Y+
    02E9 9189      LD	R24,Y+
    02EA 9199      LD	R25,Y+
    02EB 91A9      LD	R26,Y+
    02EC 91B9      LD	R27,Y+
    02ED 91E9      LD	R30,Y+
    02EE 91F9      LD	R31,Y+
    02EF 9508      RET

⌨️ 快捷键说明

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