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

📄 pp.s

📁 ICC刷卡C语言程序
💻 S
📖 第 1 页 / 共 3 页
字号:
	.even
_OutTone::
	.dbline -1
	.dbline 140
; 	  }
; 	case(3)://关灯
; 	  {OutLedDely=0;PORTC|=0x0C;return;}
; 	}
; 	}  
; //***************************************************************输出提示声23//
; void OutTone(void)
;     {	
	.dbline 141
; 	switch(OutToneAddr)
	lds R16,_OutToneAddr
	clr R17
	cpi R16,0
	cpc R16,R17
	breq L60
X8:
	cpi R16,1
	ldi R30,0
	cpc R17,R30
	breq L61
	cpi R16,2
	ldi R30,0
	cpc R17,R30
	breq L64
	rjmp L57
X9:
	.dbline 142
; 	{
L60:
	.dbline 144
; 	case(0)://关闭
; 	  {
	.dbline 145
; 	  OutToneAddr=0;return;
	clr R2
	sts _OutToneAddr,R2
	.dbline 145
	rjmp L56
L61:
	.dbline 148
; 	  }
; 	case(1)://判断是否开提示声
; 	  {
	.dbline 149
; 	  if(!OutToneCount) return;
	lds R2,_OutToneCount
	tst R2
	brne L62
	.dbline 149
	rjmp L56
L62:
	.dbline 150
; 	  OutToneDely=0;OutToneAddr=2;return;
	clr R2
	clr R3
	sts _OutToneDely+1,R3
	sts _OutToneDely,R2
	.dbline 150
	ldi R24,2
	sts _OutToneAddr,R24
	.dbline 150
	rjmp L56
L64:
	.dbline 153
; 	  }
; 	case(2):
; 	  {
	.dbline 154
; 	  if(++OutToneDely<400) return;
	lds R24,_OutToneDely
	lds R25,_OutToneDely+1
	adiw R24,1
	sts _OutToneDely+1,R25
	sts _OutToneDely,R24
	cpi R24,144
	ldi R30,1
	cpc R25,R30
	brsh L65
	.dbline 154
	rjmp L56
L65:
	.dbline 155
; 	  if(!(--OutToneCount)) {PORTC|=0x01;OutToneCount=0;OutToneAddr=1;return;}
	lds R24,_OutToneCount
	subi R24,1
	mov R2,R24
	sts _OutToneCount,R2
	tst R24
	brne L67
	.dbline 155
	.dbline 155
	sbi 0x15,0
	.dbline 155
	clr R2
	sts _OutToneCount,R2
	.dbline 155
	ldi R24,1
	sts _OutToneAddr,R24
	.dbline 155
	rjmp L56
L67:
	.dbline 156
	clr R2
	clr R3
	sts _OutToneDely+1,R3
	sts _OutToneDely,R2
	.dbline 156
	ldi R24,1
	in R2,0x15
	eor R2,R24
	out 0x15,R2
	.dbline 156
L57:
	.dbline -2
L56:
	.dbline 0 ; func end
	ret
	.dbend
	.area vector(rom, abs)
	.org 6
	rjmp _Time2
	.area text(rom, con, rel)
	.dbfile I:\刷卡器\pp.c
	.dbfunc e Time2 _Time2 fV
	.even
_Time2::
	rcall push_lset
	.dbline -1
	.dbline 163
; 	  OutToneDely=0;PORTC^=0x01;return;
; 	  }
; 	}
; 	}  
; #pragma interrupt_handler Time2:iv_TIMER2_COMP			
; //****************************************************************调用中断任务//	      	
; void Time2(void)
;     {
	.dbline 164
; 	RxUart();
	rcall _RxUart
	.dbline 165
; 	OutLed();
	rcall _OutLed
	.dbline 166
; 	OutTone();
	rcall _OutTone
	.dbline -2
L69:
	rcall pop_lset
	.dbline 0 ; func end
	reti
	.dbend
	.dbfunc e TxRomUart _TxRomUart fV
;           leng -> R18,R19
;           data -> R16,R17
	.even
_TxRomUart::
	.dbline -1
	.dbline 171
; 	}		 
; //****************************************************单时任务//	
; //********************************************************发送ROM数据到串口31//
; void TxRomUart(const unsigned char *data,unsigned int leng)
;     {
	rjmp L72
X10:
	.dbline 173
; 	while(leng)
; 	  {
L74:
	.dbline 174
L75:
	.dbline 174
	sbis 0xb,5
	rjmp L74
	.dbline 175
	movw R30,R16
	lpm R30,Z
	out 0xc,R30
	.dbline 175
	subi R16,255  ; offset = 1
	sbci R17,255
	.dbline 175
	subi R18,1
	sbci R19,0
	.dbline 176
L72:
	.dbline 172
	cpi R18,0
	cpc R18,R19
	brne L75
X11:
	.dbline -2
L70:
	.dbline 0 ; func end
	ret
	.dbsym r leng 18 i
	.dbsym r data 16 pkc
	.dbend
	.dbfunc e TxRamUart _TxRamUart fV
;           leng -> R18,R19
;           data -> R16,R17
	.even
_TxRamUart::
	.dbline -1
	.dbline 180
; 	  while(!((UCSRA)&(1<<UDRE)));
; 	  UDR=*data;data++;leng--;
; 	  }  
; 	}  	
; //********************************************************发送RAM数据到串口32//
; void TxRamUart(unsigned char *data,unsigned int leng)
;     {
	rjmp L79
X12:
	.dbline 182
; 	while(leng)
; 	  {
L81:
	.dbline 183
L82:
	.dbline 183
	sbis 0xb,5
	rjmp L81
	.dbline 184
	movw R30,R16
	ldd R2,z+0
	out 0xc,R2
	.dbline 184
	subi R16,255  ; offset = 1
	sbci R17,255
	.dbline 184
	subi R18,1
	sbci R19,0
	.dbline 185
L79:
	.dbline 181
	cpi R18,0
	cpc R18,R19
	brne L82
X13:
	.dbline -2
L77:
	.dbline 0 ; func end
	ret
	.dbsym r leng 18 i
	.dbsym r data 16 pc
	.dbend
	.dbfunc e CopyRom _CopyRom fc
;          leng2 -> R20
;          data2 -> R22,R23
;          leng1 -> R18
;          data1 -> R16,R17
	.even
_CopyRom::
	rcall push_gset2
	ldd R22,y+4
	ldd R23,y+5
	ldd R20,y+6
	.dbline -1
	.dbline 189
; 	  while(!((UCSRA)&(1<<UDRE)));
; 	  UDR=*data;data++;leng--;
; 	  }  
; 	}  					
; //**************************************************************拷贝ROM数据33//
; unsigned char CopyRom(const unsigned char *data1,unsigned char leng1,unsigned char *data2,unsigned char leng2)
;     {
	rjmp L86
L85:
	.dbline 191
;     while(leng1)
; 	  { 
	.dbline 192
; 	  *data2=*data1;data2++;leng2--;data1++;leng1--;
	movw R30,R16
	lpm R30,Z
	movw R26,R22
	st x,R30
	.dbline 192
	subi R22,255  ; offset = 1
	sbci R23,255
	.dbline 192
	dec R20
	.dbline 192
	subi R16,255  ; offset = 1
	sbci R17,255
	.dbline 192
	dec R18
	.dbline 193
; 	  if(!leng2) return 1;
	tst R20
	brne L88
	.dbline 193
	ldi R16,1
	rjmp L84
L88:
	.dbline 194
L86:
	.dbline 190
	tst R18
	brne L85
	.dbline 195
; 	  }
; 	return 0;
	clr R16
	.dbline -2
L84:
	rcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r leng2 20 c
	.dbsym r data2 22 pc
	.dbsym r leng1 18 c
	.dbsym r data1 16 pkc
	.dbend
	.dbfunc e CopyRam _CopyRam fc
;          leng2 -> R20
;          data2 -> R22,R23
;          leng1 -> R18
;          data1 -> R16,R17
	.even
_CopyRam::
	rcall push_gset2
	ldd R22,y+4
	ldd R23,y+5
	ldd R20,y+6
	.dbline -1
	.dbline 199
; 	}  	
; //**************************************************************拷贝RAM数据34//
; unsigned char CopyRam(unsigned char *data1,unsigned char leng1,unsigned char *data2,unsigned char leng2)
;     {
	rjmp L92
L91:
	.dbline 201
;     while(leng1)
; 	  { 
	.dbline 202
; 	  *data2=*data1;data2++;leng2--;data1++;leng1--;
	movw R30,R16
	ldd R2,z+0
	movw R30,R22
	std z+0,R2
	.dbline 202
	subi R22,255  ; offset = 1
	sbci R23,255
	.dbline 202
	dec R20
	.dbline 202
	subi R16,255  ; offset = 1
	sbci R17,255
	.dbline 202
	dec R18
	.dbline 203
; 	  if(!leng2) return 1;
	tst R20
	brne L94
	.dbline 203
	ldi R16,1
	rjmp L90
L94:
	.dbline 204
L92:
	.dbline 200
	tst R18
	brne L91
	.dbline 205
; 	  }
; 	return 0;
	clr R16
	.dbline -2
L90:
	rcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r leng2 20 c
	.dbsym r data2 22 pc
	.dbsym r leng1 18 c
	.dbsym r data1 16 pc
	.dbend
	.dbfunc e CmpsRom _CmpsRom fc
;          leng2 -> R20
;          data2 -> R22,R23
;          leng1 -> R18
;          data1 -> R16,R17
	.even
_CmpsRom::
	rcall push_gset2
	ldd R22,y+4
	ldd R23,y+5
	ldd R20,y+6
	.dbline -1
	.dbline 209
; 	} 
; //**************************************************************比较ROM数据35//
; unsigned char CmpsRom(unsigned char *data1,unsigned char leng1,const unsigned char *data2,unsigned char leng2)
;     {
	rjmp L98
L97:
	.dbline 211
; 	while(leng1)
; 	  {
	.dbline 212
; 	  if(*data1!=*data2) return 1;
	movw R30,R22
	lpm R30,Z
	movw R26,R16
	ld R2,x
	cp R2,R30
	breq L100
	.dbline 212
	ldi R16,1
	rjmp L96
L100:
	.dbline 213
; 	  data1++;data2++;leng1--;leng2--;
	subi R16,255  ; offset = 1
	sbci R17,255
	.dbline 213
	subi R22,255  ; offset = 1
	sbci R23,255
	.dbline 213
	dec R18
	.dbline 213
	dec R20
	.dbline 214
; 	  if(!leng2) return 0;
	brne L102
	.dbline 214
	clr R16
	rjmp L96
L102:
	.dbline 215
L98:
	.dbline 210
	tst R18
	brne L97
	.dbline 216
; 	  }
; 	return 1;  
	ldi R16,1
	.dbline -2
L96:
	rcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r leng2 20 c
	.dbsym r data2 22 pkc
	.dbsym r leng1 18 c
	.dbsym r data1 16 pc
	.dbend
	.dbfunc e CmpsRam _CmpsRam fc
;          leng2 -> R20
;          data2 -> R22,R23
;          leng1 -> R18
;          data1 -> R16,R17
	.even
_CmpsRam::
	rcall push_gset2
	ldd R22,y+4
	ldd R23,y+5
	ldd R20,y+6
	.dbline -1
	.dbline 220
; 	}	   
; //**************************************************************比较RAM数据36//
; unsigned char CmpsRam(unsigned char *data1,unsigned char leng1,unsigned char *data2,unsigned char leng2)
;     {
	rjmp L106
L105:
	.dbline 222
; 	while(leng1)
; 	  {
	.dbline 223
; 	  if(*data1!=*data2) return 1;
	movw R30,R22
	ldd R2,z+0
	movw R30,R16
	ldd R3,z+0
	cp R3,R2
	breq L108
	.dbline 223
	ldi R16,1
	rjmp L104
L108:
	.dbline 224
; 	  data1++;data2++;leng1--;leng2--;
	subi R16,255  ; offset = 1
	sbci R17,255
	.dbline 224
	subi R22,255  ; offset = 1
	sbci R23,255
	.dbline 224
	dec R18
	.dbline 224
	dec R20
	.dbline 225
; 	  if(!leng2) return 0;
	brne L110
	.dbline 225
	clr R16
	rjmp L104
L110:
	.dbline 226
L106:
	.dbline 221
	tst R18
	brne L105
	.dbline 227
; 	  }
; 	return 1;  
	ldi R16,1
	.dbline -2
L104:
	rcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r leng2 20 c
	.dbsym r data2 22 pc
	.dbsym r leng1 18 c
	.dbsym r data1 16 pc
	.dbend
	.dbfunc e delay_ms _delay_ms fV
;           time -> R16,R17
	.even
_delay_ms::
	rcall push_gset2
	.dbline -1
	.dbline 231
; 	}	 	
; //***************************************************************毫秒级延时37//   
; void delay_ms(unsigned int time)
;     {
	rjmp L114
X14:
	.dbline 233
; 	while(time)
; 	  {
L116:
	.dbline 234
L117:
	.dbline 234
	ldi R20,125
	ldi R21,0
	ldi R22,0
	ldi R23,0
	in R2,0x32
	clr R3
	clr R4
	clr R5
	cp R2,R20
	cpc R3,R21
	cpc R4,R22
	cpc R5,R23
	brlt L116
	.dbline 235
	clr R2
	out 0x32,R2
	.dbline 236
	subi R16,1
	sbci R17,0
	.dbline 237
L114:
	.dbline 232
	cpi R16,0
	cpc R16,R17
	brne L117
X15:
	.dbline -2
L112:
	rcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r time 16 i
	.dbend
	.dbfunc e init_atmega _init_atmega fV
	.even
_init_atmega::
	.dbline -1
	.dbline 241
; 	  while(TCNT0<(fosc/64/1000));
; 	  TCNT0=0;
; 	  time--;	
; 	  }	
;     }		   		 	
; //************************************************************ATMEGA8初始化38//
; void init_atmega(void)
;     {
	.dbline 242
; 	SFIOR&=(~(1<<PUD));//上拉SFIOR
	in R24,0x30
	andi R24,251
	out 0x30,R24
	.dbline 243
; 	DDRB=0xFF;	
	ldi R24,255
	out 0x17,R24
	.dbline 244
; 	DDRD=0xF8;//,PD7(E),PD6(RW),PD5(RS),PD4(SPS),PD2(ICC),PD1(TXD),PD0(RXD);
	ldi R24,248
	out 0x11,R24
	.dbline 245
; 	PORTD=0xFB;
	ldi R24,251
	out 0x12,R24
	.dbline 246
; 	DDRC=0x0F;//PC4,PC3(REN),PC2(GREEN),PC0(BUZZER)
	ldi R24,15
	out 0x14,R24
	.dbline 247
; 	PORTC=0x01;
	ldi R24,1
	out 0x15,R24
	.dbline 248
; 	UCSRB=(1<<RXEN)|(1<<TXEN);
	ldi R24,24
	out 0xa,R24
	.dbline 249
;     UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
	ldi R24,134
	out 0x20,R24
	.dbline 250
; 	UBRRH=(fosc/16/(baud+1))/256;
	clr R2
	out 0x20,R2
	.dbline 251
; 	UBRRL=(fosc/16/(baud+1))%256;
	ldi R24,26
	out 0x9,R24
	.dbline 252
; 	TCCR2=0x0a;
	ldi R24,10
	out 0x25,R24
	.dbline 253
; 	TCNT2=0x00;
	out 0x24,R2
	.dbline 254
; 	OCR2=fosc/8/2000;//500us
	ldi R24,500
	ldi R25,1
	out 0x23,R24
	.dbline 255
; 	TIMSK=1<<OCIE2;
	ldi R24,128
	out 0x39,R24
	.dbline 256
; 	TCCR0=(1<<CS01)|(1<<CS00);//64分频
	ldi R24,3
	out 0x33,R24
	.dbline 257
; 	TCNT0=0;
	out 0x32,R2
	.dbline 258
; 	SEI();
	sei
	.dbline -2
L119:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e RxGsm _RxGsm fV
;              i -> R20
	.even
_RxGsm::
	rcall push_gset1
	sbiw R28,3
	.dbline -1
	.dbline 262
; 	}
; //*****************************************************************接收远程41//
; void RxGsm(void)
;     {
	.dbline 264
; 	unsigned char i;
; 	switch(RxGsmAddr)
	lds R20,_RxGsmAddr
	clr R21
	cpi R20,0
	cpc R20,R21
	breq L124
X16:
	cpi R20,1
	ldi R30,0
	cpc R21,R30
	breq L125
	cpi R20,2
	ldi R30,0
	cpc R21,R30
	breq L128
	cpi R20,3
	ldi R30,0
	cpc R21,R30
	brne X19
	rjmp L145
X19:
	rjmp L121
X17:
	.dbline 265
; 	{
L124:
	.dbline 267
; 	case(0)://接收停止
; 	  {
	.dbline 268
; 	  RxGsmAddr=0;return;
	clr R2
	sts _RxGsmAddr,R2
	.dbline 268
	rjmp L120
L125:
	.dbline 271
; 	  }
; 	case(1)://接收初始
; 	  {
	.dbline 272
; 	  if(!(PIND&0x04)&&(RxCalAddr==1))
	sbic 0x10,2
	rjmp L120
	lds R24,_RxCalAddr
	cpi R24,1
	breq X20
	rjmp L120
X20:
	.dbline 273
; 	  {RxGsmAddr=2;RxUartWait=0;RxUartAddr=1;return;}
	.dbline 273
	ldi R24,2
	sts _RxGsmAddr,R24
	.dbline 273
	clr R2
	clr R3
	sts _RxUartWait+1,R3
	sts _RxUartWait,R2
	.dbline 273
	ldi R24,1
	sts _RxUartAddr,R24
	.dbline 273
	rjmp L120
X18:
	.dbline 274
; 	  else return;
L128:
	.dbline 277
; 	  }
; 	case(2)://接收是否完成
; 	  {
	.dbline 278
; 	  if(!(PIND&0x04)&&(RxCalAddr==1))
	sbic 0x10,2
	rjmp L129
	lds R24,_RxCalAddr
	cpi R24,1
	breq X21
	rjmp L129
X21:
	.dbline 279
; 	   {
	.dbline 280
; 	   if(RxUartAddr) return;	   
	lds R2,_RxUartAddr
	tst R2
	breq L131
	.dbline 280
	rjmp L120
L131:
	.dbline 281
; 	   if(CmpsRom(RxUartDbuf,RxUartLeng,"DD",2)) {RxGsmAddr=1;OutToneCount=4;return;}//DD 
	ldi R24,2
	std y+2,R24
	ldi R24,<L135
	ldi R25,>L135
	std y+1,R25
	std y+0,R24
	lds R18,_RxUartLeng
	ldi R16,<_RxUartDbuf
	ldi R17,>_RxUartDbuf
	rcall _CmpsRom
	tst R16
	breq L133
	.dbline 281
	.dbline 281
	ldi R24,1
	sts _RxGsmAddr,R24
	.dbline 281
	ldi R24,4
	sts _OutToneCount,R24
	.dbline 281
	rjmp L120
L133:
	.dbline 282
; 	   OutToneCount=2;
	ldi R24,2
	sts _OutToneCount,R24
	.dbline 283

⌨️ 快捷键说明

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