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

📄 pp.lst

📁 ICC刷卡C语言程序
💻 LST
📖 第 1 页 / 共 4 页
字号:
    0199 9380006B  STS	RxUartDely,R24
    019B 3080      CPI	R24,0
    019C 0789      CPC	R24,R25
    019D F009      BEQ	0x019F
    019E C016      RJMP	0x01B5
(0108) 		RxUartDely=200;
    019F EC88      LDI	R24,0xC8
    01A0 E090      LDI	R25,0
    01A1 9390006C  STS	RxUartDely+1,R25
    01A3 9380006B  STS	RxUartDely,R24
(0109) 		if(--RxUartWait) return;
    01A5 9180006D  LDS	R24,RxUartWait
    01A7 9190006E  LDS	R25,RxUartWait+1
    01A9 9701      SBIW	R24,1
    01AA 9390006E  STS	RxUartWait+1,R25
    01AC 9380006D  STS	RxUartWait,R24
    01AE 3080      CPI	R24,0
    01AF 0789      CPC	R24,R25
    01B0 F009      BEQ	0x01B2
    01B1 C003      RJMP	0x01B5
(0110) 		RxUartAddr=0;return;
    01B2 2422      CLR	R2
    01B3 92200072  STS	RxUartAddr,R2
    01B5 9508      RET
(0111) 		}
(0112) 	  }
(0113)     }		
(0114) 	}
(0115) //***************************************************************输出三色灯22//
(0116) void OutLed(void)
(0117)     {
(0118) 	switch(OutLedAddr)
_OutLed:
    01B6 9100006A  LDS	R16,OutLedAddr
    01B8 2711      CLR	R17
    01B9 3000      CPI	R16,0
    01BA 0701      CPC	R16,R17
    01BB F071      BEQ	0x01CA
    01BC 3001      CPI	R16,1
    01BD E0E0      LDI	R30,0
    01BE 071E      CPC	R17,R30
    01BF F071      BEQ	0x01CE
    01C0 3002      CPI	R16,2
    01C1 E0E0      LDI	R30,0
    01C2 071E      CPC	R17,R30
    01C3 F121      BEQ	0x01E8
    01C4 3003      CPI	R16,3
    01C5 E0E0      LDI	R30,0
    01C6 071E      CPC	R17,R30
    01C7 F409      BNE	0x01C9
    01C8 C03B      RJMP	0x0204
    01C9 C043      RJMP	0x020D
(0119) 	{
(0120) 	case(0)://停止闪烁
(0121) 	  {
(0122) 	  OutLedAddr=0;return;
    01CA 2422      CLR	R2
    01CB 9220006A  STS	OutLedAddr,R2
    01CD C03F      RJMP	0x020D
(0123) 	  }
(0124) 	case(1)://绿灯闪
(0125) 	  {
(0126) 	  if(++OutLedDely<1000) return;
    01CE 91800068  LDS	R24,OutLedDely
    01D0 91900069  LDS	R25,OutLedDely+1
    01D2 9601      ADIW	R24,1
    01D3 93900069  STS	OutLedDely+1,R25
    01D5 93800068  STS	OutLedDely,R24
    01D7 3E88      CPI	R24,0xE8
    01D8 E0E3      LDI	R30,3
    01D9 079E      CPC	R25,R30
    01DA F408      BCC	0x01DC
    01DB C031      RJMP	0x020D
(0127) 	  OutLedDely=0;PORTC|=0x08;PORTC^=0x06;return;
    01DC 2422      CLR	R2
    01DD 2433      CLR	R3
    01DE 92300069  STS	OutLedDely+1,R3
    01E0 92200068  STS	OutLedDely,R2
    01E2 9AAB      SBI	0x15,3
    01E3 E086      LDI	R24,6
    01E4 B225      IN	R2,0x15
    01E5 2628      EOR	R2,R24
    01E6 BA25      OUT	0x15,R2
    01E7 C025      RJMP	0x020D
(0128) 	  }
(0129)     case(2)://红灯闪
(0130) 	  {
(0131) 	  if(++OutLedDely<1000) return;
    01E8 91800068  LDS	R24,OutLedDely
    01EA 91900069  LDS	R25,OutLedDely+1
    01EC 9601      ADIW	R24,1
    01ED 93900069  STS	OutLedDely+1,R25
    01EF 93800068  STS	OutLedDely,R24
    01F1 3E88      CPI	R24,0xE8
    01F2 E0E3      LDI	R30,3
    01F3 079E      CPC	R25,R30
    01F4 F408      BCC	0x01F6
    01F5 C017      RJMP	0x020D
(0132) 	  OutLedDely=0;PORTC|=0x06;PORTC^=0x08;return;
    01F6 2422      CLR	R2
    01F7 2433      CLR	R3
    01F8 92300069  STS	OutLedDely+1,R3
    01FA 92200068  STS	OutLedDely,R2
    01FC B385      IN	R24,0x15
    01FD 6086      ORI	R24,6
    01FE BB85      OUT	0x15,R24
    01FF E088      LDI	R24,0x8
    0200 B225      IN	R2,0x15
    0201 2628      EOR	R2,R24
    0202 BA25      OUT	0x15,R2
    0203 C009      RJMP	0x020D
(0133) 	  }
(0134) 	case(3)://关灯
(0135) 	  {OutLedDely=0;PORTC|=0x0C;return;}
    0204 2422      CLR	R2
    0205 2433      CLR	R3
    0206 92300069  STS	OutLedDely+1,R3
    0208 92200068  STS	OutLedDely,R2
    020A B385      IN	R24,0x15
    020B 608C      ORI	R24,0xC
    020C BB85      OUT	0x15,R24
    020D 9508      RET
(0136) 	}
(0137) 	}  
(0138) //***************************************************************输出提示声23//
(0139) void OutTone(void)
(0140)     {	
(0141) 	switch(OutToneAddr)
_OutTone:
    020E 91000067  LDS	R16,OutToneAddr
    0210 2711      CLR	R17
    0211 3000      CPI	R16,0
    0212 0701      CPC	R16,R17
    0213 F049      BEQ	0x021D
    0214 3001      CPI	R16,1
    0215 E0E0      LDI	R30,0
    0216 071E      CPC	R17,R30
    0217 F049      BEQ	0x0221
    0218 3002      CPI	R16,2
    0219 E0E0      LDI	R30,0
    021A 071E      CPC	R17,R30
    021B F0A1      BEQ	0x0230
    021C C03B      RJMP	0x0258
(0142) 	{
(0143) 	case(0)://关闭
(0144) 	  {
(0145) 	  OutToneAddr=0;return;
    021D 2422      CLR	R2
    021E 92200067  STS	OutToneAddr,R2
    0220 C037      RJMP	0x0258
(0146) 	  }
(0147) 	case(1)://判断是否开提示声
(0148) 	  {
(0149) 	  if(!OutToneCount) return;
    0221 90200066  LDS	R2,OutToneCount
    0223 2022      TST	R2
    0224 F409      BNE	0x0226
    0225 C032      RJMP	0x0258
(0150) 	  OutToneDely=0;OutToneAddr=2;return;
    0226 2422      CLR	R2
    0227 2433      CLR	R3
    0228 92300064  STS	OutToneDely+1,R3
    022A 92200063  STS	OutToneDely,R2
    022C E082      LDI	R24,2
    022D 93800067  STS	OutToneAddr,R24
    022F C028      RJMP	0x0258
(0151) 	  }
(0152) 	case(2):
(0153) 	  {
(0154) 	  if(++OutToneDely<400) return;
    0230 91800063  LDS	R24,OutToneDely
    0232 91900064  LDS	R25,OutToneDely+1
    0234 9601      ADIW	R24,1
    0235 93900064  STS	OutToneDely+1,R25
    0237 93800063  STS	OutToneDely,R24
    0239 3980      CPI	R24,0x90
    023A E0E1      LDI	R30,1
    023B 079E      CPC	R25,R30
    023C F408      BCC	0x023E
    023D C01A      RJMP	0x0258
(0155) 	  if(!(--OutToneCount)) {PORTC|=0x01;OutToneCount=0;OutToneAddr=1;return;}
    023E 91800066  LDS	R24,OutToneCount
    0240 5081      SUBI	R24,1
    0241 2E28      MOV	R2,R24
    0242 92200066  STS	OutToneCount,R2
    0244 2388      TST	R24
    0245 F441      BNE	0x024E
    0246 9AA8      SBI	0x15,0
    0247 2422      CLR	R2
    0248 92200066  STS	OutToneCount,R2
    024A E081      LDI	R24,1
    024B 93800067  STS	OutToneAddr,R24
    024D C00A      RJMP	0x0258
(0156) 	  OutToneDely=0;PORTC^=0x01;return;
    024E 2422      CLR	R2
    024F 2433      CLR	R3
    0250 92300064  STS	OutToneDely+1,R3
    0252 92200063  STS	OutToneDely,R2
    0254 E081      LDI	R24,1
    0255 B225      IN	R2,0x15
    0256 2628      EOR	R2,R24
    0257 BA25      OUT	0x15,R2
    0258 9508      RET
_Time2:
    0259 D319      RCALL	push_lset
(0157) 	  }
(0158) 	}
(0159) 	}  
(0160) #pragma interrupt_handler Time2:iv_TIMER2_COMP			
(0161) //****************************************************************调用中断任务//	      	
(0162) void Time2(void)
(0163)     {
(0164) 	RxUart();
    025A DEDC      RCALL	_RxUart
(0165) 	OutLed();
    025B DF5A      RCALL	_OutLed
(0166) 	OutTone();
    025C DFB1      RCALL	_OutTone
    025D D32C      RCALL	pop_lset
    025E 9518      RETI
(0167) 	}		 
(0168) //****************************************************单时任务//	
(0169) //********************************************************发送ROM数据到串口31//
(0170) void TxRomUart(const unsigned char *data,unsigned int leng)
(0171)     {
_TxRomUart:
  leng                 --> R18
  data                 --> R16
    025F C009      RJMP	0x0269
(0172) 	while(leng)
(0173) 	  {
(0174) 	  while(!((UCSRA)&(1<<UDRE)));
    0260 9B5D      SBIS	0x0B,5
    0261 CFFE      RJMP	0x0260
(0175) 	  UDR=*data;data++;leng--;
    0262 01F8      MOVW	R30,R16
    0263 91E4      LPM	R30,0(Z)
    0264 B9EC      OUT	0x0C,R30
    0265 5F0F      SUBI	R16,0xFF
    0266 4F1F      SBCI	R17,0xFF
    0267 5021      SUBI	R18,1
    0268 4030      SBCI	R19,0
    0269 3020      CPI	R18,0
    026A 0723      CPC	R18,R19
    026B F7A1      BNE	0x0260
    026C 9508      RET
(0176) 	  }  
(0177) 	}  	
(0178) //********************************************************发送RAM数据到串口32//
(0179) void TxRamUart(unsigned char *data,unsigned int leng)
(0180)     {
_TxRamUart:
  leng                 --> R18
  data                 --> R16
    026D C009      RJMP	0x0277
(0181) 	while(leng)
(0182) 	  {
(0183) 	  while(!((UCSRA)&(1<<UDRE)));
    026E 9B5D      SBIS	0x0B,5
    026F CFFE      RJMP	0x026E
(0184) 	  UDR=*data;data++;leng--;
    0270 01F8      MOVW	R30,R16
    0271 8020      LDD	R2,Z+0
    0272 B82C      OUT	0x0C,R2
    0273 5F0F      SUBI	R16,0xFF
    0274 4F1F      SBCI	R17,0xFF
    0275 5021      SUBI	R18,1
    0276 4030      SBCI	R19,0
    0277 3020      CPI	R18,0
    0278 0723      CPC	R18,R19
    0279 F7A1      BNE	0x026E
    027A 9508      RET
_CopyRom:
  leng2                --> R20
  data2                --> R22
  leng1                --> R18
  data1                --> R16
    027B D2DE      RCALL	push_gset2
    027C 816C      LDD	R22,Y+4
    027D 817D      LDD	R23,Y+5
    027E 814E      LDD	R20,Y+6
(0185) 	  }  
(0186) 	}  					
(0187) //**************************************************************拷贝ROM数据33//
(0188) unsigned char CopyRom(const unsigned char *data1,unsigned char leng1,unsigned char *data2,unsigned char leng2)
(0189)     {
    027F C00E      RJMP	0x028E
(0190)     while(leng1)
(0191) 	  { 
(0192) 	  *data2=*data1;data2++;leng2--;data1++;leng1--;
    0280 01F8      MOVW	R30,R16
    0281 91E4      LPM	R30,0(Z)
    0282 01DB      MOVW	R26,R22
    0283 93EC      ST	R30,0(X)
    0284 5F6F      SUBI	R22,0xFF
    0285 4F7F      SBCI	R23,0xFF
    0286 954A      DEC	R20
    0287 5F0F      SUBI	R16,0xFF
    0288 4F1F      SBCI	R17,0xFF
    0289 952A      DEC	R18
(0193) 	  if(!leng2) return 1;
    028A 2344      TST	R20
    028B F411      BNE	0x028E
    028C E001      LDI	R16,1
    028D C003      RJMP	0x0291
    028E 2322      TST	R18
    028F F781      BNE	0x0280
(0194) 	  }
(0195) 	return 0;
    0290 2700      CLR	R16
    0291 D2BE      RCALL	pop_gset2
    0292 9508      RET
_CopyRam:
  leng2                --> R20
  data2                --> R22
  leng1                --> R18
  data1                --> R16
    0293 D2C6      RCALL	push_gset2
    0294 816C      LDD	R22,Y+4
    0295 817D      LDD	R23,Y+5
    0296 814E      LDD	R20,Y+6
(0196) 	}  	
(0197) //**************************************************************拷贝RAM数据34//
(0198) unsigned char CopyRam(unsigned char *data1,unsigned char leng1,unsigned char *data2,unsigned char leng2)
(0199)     {
    0297 C00E      RJMP	0x02A6
(0200)     while(leng1)
(0201) 	  { 
(0202) 	  *data2=*data1;data2++;leng2--;data1++;leng1--;
    0298 01F8      MOVW	R30,R16
    0299 8020      LDD	R2,Z+0
    029A 01FB      MOVW	R30,R22
    029B 8220      STD	Z+0,R2
    029C 5F6F      SUBI	R22,0xFF
    029D 4F7F      SBCI	R23,0xFF
    029E 954A      DEC	R20
    029F 5F0F      SUBI	R16,0xFF
    02A0 4F1F      SBCI	R17,0xFF
    02A1 952A      DEC	R18
(0203) 	  if(!leng2) return 1;
    02A2 2344      TST	R20
    02A3 F411      BNE	0x02A6
    02A4 E001      LDI	R16,1
    02A5 C003      RJMP	0x02A9
    02A6 2322      TST	R18
    02A7 F781      BNE	0x0298
(0204) 	  }
(0205) 	return 0;
    02A8 2700      CLR	R16
    02A9 D2A6      RCALL	pop_gset2
    02AA 9508      RET
_CmpsRom:
  leng2                --> R20
  data2                --> R22
  leng1                --> R18
  data1                --> R16
    02AB D2AE      RCALL	push_gset2
    02AC 816C      LDD	R22,Y+4
    02AD 817D      LDD	R23,Y+5
    02AE 814E      LDD	R20,Y+6
(0206) 	} 
(0207) //**************************************************************比较ROM数据35//
(0208) unsigned char CmpsRom(unsigned char *data1,unsigned char leng1,const unsigned char *data2,unsigned char leng2)
(0209)     {
    02AF C011      RJMP	0x02C1
(0210) 	while(leng1)
(0211) 	  {
(0212) 	  if(*data1!=*data2) return 1;
    02B0 01FB      MOVW	R30,R22
    02B1 91E4      LPM	R30,0(Z)
    02B2 01D8      MOVW	R26,R16
    02B3 902C      LD	R2,0(X)
    02B4 162E      CP	R2,R30
    02B5 F011      BEQ	0x02B8
    02B6 E001      LDI	R16,1
    02B7 C00C      RJMP	0x02C4
(0213) 	  data1++;data2++;leng1--;leng2--;
    02B8 5F0F      SUBI	R16,0xFF
    02B9 4F1F      SBCI	R17,0xFF
    02BA 5F6F      SUBI	R22,0xFF
    02BB 4F7F      SBCI	R23,0xFF
    02BC 952A      DEC	R18
    02BD 954A      DEC	R20
(0214) 	  if(!leng2) return 0;
    02BE F411      BNE	0x02C1
    02BF 2700      CLR	R16
    02C0 C003      RJMP	0x02C4
    02C1 2322      TST	R18
    02C2 F769      BNE	0x02B0
(0215) 	  }
(0216) 	return 1;  
    02C3 E001      LDI	R16,1
    02C4 D28B      RCALL	pop_gset2
    02C5 9508      RET
_CmpsRam:
  leng2                --> R20
  data2                --> R22
  leng1                --> R18
  data1                --> R16
    02C6 D293      RCALL	push_gset2
    02C7 816C      LDD	R22,Y+4
    02C8 817D      LDD	R23,Y+5
    02C9 814E      LDD	R20,Y+6
(0217) 	}	   
(0218) //**************************************************************比较RAM数据36//
(0219) unsigned char CmpsRam(unsigned char *data1,unsigned char leng1,unsigned char *data2,unsigned char leng2)
(0220)     {
    02CA C011      RJMP	0x02DC
(0221) 	while(leng1)
(0222) 	  {
(0223) 	  if(*data1!=*data2) return 1;
    02CB 01FB      MOVW	R30,R22
    02CC 8020      LDD	R2,Z+0
    02CD 01F8      MOVW	R30,R16
    02CE 8030      LDD	R3,Z+0
    02CF 1432      CP	R3,R2
    02D0 F011      BEQ	0x02D3
    02D1 E001      LDI	R16,1

⌨️ 快捷键说明

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