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

📄 h4001.s

📁 用AVR单片机ATMega32通过U2270B读取H4001只读RFID卡号的范例
💻 S
📖 第 1 页 / 共 2 页
字号:
	.dbline 197
; 					      decode[j]=0;
	ldi R24,<_decode
	ldi R25,>_decode
	ldd R30,y+1
	clr R31
	add R30,R24
	adc R31,R25
	clr R2
	std z+0,R2
	.dbline 198
; 	            	      } 
	.dbline 199
; 					  }
	.dbline 200
;                    } 
	xjmp L63
L62:
	.dbline 202
; 			    else
; 				   {
	.dbline 203
; 				    decode[j]=0x0E;
	ldi R24,<_decode
	ldi R25,>_decode
	ldd R30,y+1
	clr R31
	add R30,R24
	adc R31,R25
	ldi R24,14
	std z+0,R24
	.dbline 204
; 				    if (j<127) {
	ldd R24,y+1
	cpi R24,127
	brsh L33
	.dbline 204
	.dbline 205
;                        bits=0;
	clr R22
	clr R23
	.dbline 206
; 					   }					
	.dbline 208
; 					else
; 					   break;
L69:
	.dbline 209
; 					}
L63:
	.dbline 210
; 			    j++;
	ldd R0,y+1
	inc R0
	std y+1,R0
	.dbline 211
; 			    half=1;
	ldi R24,1
	sts _half,R24
	.dbline 212
; 		        }
L55:
	.dbline 213
; 	      } 
L44:
	.dbline 214
	ldi R24,1
	lds R2,_lastbit
	eor R2,R24
	sts _lastbit,R2
	.dbline 215
L32:
	.dbline 171
	subi R22,255  ; offset = 1
	sbci R23,255
L34:
	.dbline 171
	cpi R22,0
	ldi R30,1
	cpc R23,R30
	brsh X9
	xjmp L36
X9:
L33:
	.dbline 217
; 		 lastbit^=0x01;
;          } 
; 
;      j=0;
	clr R0
	std y+1,R0
	.dbline 218
; 	 head=0;
	clr R2
	sts _head,R2
	.dbline 219
; 	 post=0;
	sts _post,R2
	.dbline 220
; 	 error=0;
	sts _error,R2
	.dbline 221
; 	 for (i=0;i<128;i++)
	std y+0,R0
	xjmp L73
L70:
	.dbline 222
; 	     {                        //查找最后一个终止位(0),及9位(1)引导位
	.dbline 223
; 	     if ((decode[i]==0)&(decode[i+1]==1)&(decode[i+2]==1)&(decode[i+3]==1)&(decode[i+4]==1)&(decode[i+5]==1)&(decode[i+6]==1)&(decode[i+7]==1)&(decode[i+8]==1)&(decode[i+9]==1)) {
	ldi R24,<_decode
	ldi R25,>_decode
	ldd R30,y+0
	clr R31
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	tst R2
	brne L85
	ldi R24,1
	ldi R25,0
	std y+5,R25
	std y+4,R24
	xjmp L86
L85:
	clr R0
	clr R1
	std y+5,R1
	std y+4,R0
L86:
	ldi R24,<_decode+1
	ldi R25,>_decode+1
	ldd R30,y+0
	clr R31
	add R30,R24
	adc R31,R25
	ldd R24,z+0
	cpi R24,1
	brne L87
	ldi R24,1
	ldi R25,0
	std y+3,R25
	std y+2,R24
	xjmp L88
L87:
	clr R0
	clr R1
	std y+3,R1
	std y+2,R0
L88:
	ldi R24,<_decode+2
	ldi R25,>_decode+2
	ldd R30,y+0
	clr R31
	add R30,R24
	adc R31,R25
	ldd R24,z+0
	cpi R24,1
	brne L89
	ldi R24,1
	ldi R25,0
	std y+7,R25
	std y+6,R24
	xjmp L90
L89:
	clr R0
	clr R1
	std y+7,R1
	std y+6,R0
L90:
	ldi R24,<_decode+3
	ldi R25,>_decode+3
	ldd R30,y+0
	clr R31
	add R30,R24
	adc R31,R25
	ldd R24,z+0
	cpi R24,1
	brne L91
	ldi R24,1
	ldi R25,0
	std y+9,R25
	std y+8,R24
	xjmp L92
L91:
	clr R0
	clr R1
	std y+9,R1
	std y+8,R0
L92:
	ldi R24,<_decode+4
	ldi R25,>_decode+4
	ldd R30,y+0
	clr R31
	add R30,R24
	adc R31,R25
	ldd R24,z+0
	cpi R24,1
	brne L93
	ldi R24,1
	ldi R25,0
	std y+11,R25
	std y+10,R24
	xjmp L94
L93:
	clr R0
	clr R1
	std y+11,R1
	std y+10,R0
L94:
	ldi R24,<_decode+5
	ldi R25,>_decode+5
	ldd R30,y+0
	clr R31
	add R30,R24
	adc R31,R25
	ldd R24,z+0
	cpi R24,1
	brne L95
	ldi R20,1
	ldi R21,0
	xjmp L96
L95:
	clr R20
	clr R21
L96:
	ldi R24,<_decode+6
	ldi R25,>_decode+6
	ldd R30,y+0
	clr R31
	add R30,R24
	adc R31,R25
	ldd R24,z+0
	cpi R24,1
	brne L97
	ldi R24,1
	ldi R25,0
	movw R14,R24
	xjmp L98
L97:
	clr R14
	clr R15
L98:
	ldi R24,<_decode+7
	ldi R25,>_decode+7
	ldd R30,y+0
	clr R31
	add R30,R24
	adc R31,R25
	ldd R24,z+0
	cpi R24,1
	brne L99
	ldi R24,1
	ldi R25,0
	movw R12,R24
	xjmp L100
L99:
	clr R12
	clr R13
L100:
	ldi R24,<_decode+8
	ldi R25,>_decode+8
	ldd R30,y+0
	clr R31
	add R30,R24
	adc R31,R25
	ldd R24,z+0
	cpi R24,1
	brne L101
	ldi R24,1
	ldi R25,0
	movw R10,R24
	xjmp L102
L101:
	clr R10
	clr R11
L102:
	ldi R24,<_decode+9
	ldi R25,>_decode+9
	ldd R30,y+0
	clr R31
	add R30,R24
	adc R31,R25
	ldd R24,z+0
	cpi R24,1
	brne L103
	ldi R22,1
	ldi R23,0
	xjmp L104
L103:
	clr R22
	clr R23
L104:
	ldd R2,y+4
	ldd R3,y+5
	ldd R0,y+2
	ldd R1,y+3
	and R2,R0
	and R3,R1
	ldd R0,y+6
	ldd R1,y+7
	and R2,R0
	and R3,R1
	ldd R0,y+8
	ldd R1,y+9
	and R2,R0
	and R3,R1
	ldd R0,y+10
	ldd R1,y+11
	and R2,R0
	and R3,R1
	and R2,R20
	and R3,R21
	and R2,R14
	and R3,R15
	and R2,R12
	and R3,R13
	and R2,R10
	and R3,R11
	and R2,R22
	and R3,R23
	tst R2
	brne X5
	tst R3
	breq L74
X5:
	.dbline 223
	.dbline 224
; 		     head=1;
	ldi R24,1
	sts _head,R24
	.dbline 225
; 			 post=i+10;
	ldd R24,y+0
	subi R24,246    ; addi 10
	sts _post,R24
	.dbline 226
; 			 break;
	xjmp L72
L74:
	.dbline 228
L71:
	.dbline 221
	ldd R0,y+0
	inc R0
	std y+0,R0
L73:
	.dbline 221
	ldd R24,y+0
	cpi R24,128
	brsh X10
	xjmp L70
X10:
L72:
	.dbline 229
; 		     } 
; 		 }
; 	  if (head==1) {
	lds R24,_head
	cpi R24,1
	breq X11
	xjmp L105
X11:
	.dbline 229
	.dbline 230
	clr R0
	std y+0,R0
	xjmp L110
L107:
	.dbline 230
; 		   for (i=0;i<54;i++) {
	.dbline 231
; 		     if (decode[post+i]==0x0e) error++;
	ldd R2,y+0
	clr R3
	lds R30,_post
	clr R31
	add R30,R2
	adc R31,R3
	ldi R24,<_decode
	ldi R25,>_decode
	add R30,R24
	adc R31,R25
	ldd R24,z+0
	cpi R24,14
	brne L111
	.dbline 231
	lds R24,_error
	subi R24,255    ; addi 1
	sts _error,R24
L111:
	.dbline 232
	ldd R2,y+0
	clr R3
	lds R30,_post
	clr R31
	add R30,R2
	adc R31,R3
	ldi R24,<_decode
	ldi R25,>_decode
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	ldi R24,<_rfiddata
	ldi R25,>_rfiddata
	ldd R30,y+0
	clr R31
	add R30,R24
	adc R31,R25
	std z+0,R2
	.dbline 233
L108:
	.dbline 230
	ldd R0,y+0
	inc R0
	std y+0,R0
L110:
	.dbline 230
	ldd R24,y+0
	cpi R24,54
	brlo L107
	.dbline 234
; 			 rfiddata[i]=decode[post+i];
; 			 } 
;          if (error==0) {          //H4001卡采用的二维行列偶校验码
	lds R2,_error
	tst R2
	breq X12
	xjmp L113
X12:
	.dbline 234
	.dbline 235
	clr R0
	std y+0,R0
	xjmp L118
L115:
	.dbline 235
; 			 for (i=0;i<10;i++) { //先对10行数据进行校验
	.dbline 236
;                  if (!(rfiddata[i*5]^rfiddata[i*5+1]^rfiddata[i*5+2]^rfiddata[i*5+3]==rfiddata[i*5+4])) error++;
	ldi R24,5
	ldd R0,y+0
	mul R24,R0
	movw R2,R0
	ldi R24,<_rfiddata+4
	ldi R25,>_rfiddata+4
	movw R30,R2
	add R30,R24
	adc R31,R25
	ldd R4,z+0
	ldi R24,<_rfiddata+3
	ldi R25,>_rfiddata+3
	movw R30,R2
	add R30,R24
	adc R31,R25
	ldd R5,z+0
	cp R5,R4
	brne L125
	ldi R22,1
	ldi R23,0
	xjmp L126
L125:
	clr R22
	clr R23
L126:
	ldi R24,<_rfiddata+1
	ldi R25,>_rfiddata+1
	movw R30,R2
	add R30,R24
	adc R31,R25
	ldd R4,z+0
	clr R5
	ldi R24,<_rfiddata
	ldi R25,>_rfiddata
	movw R30,R2
	add R30,R24
	adc R31,R25
	ldd R6,z+0
	clr R7
	eor R6,R4
	eor R7,R5
	ldi R24,<_rfiddata+2
	ldi R25,>_rfiddata+2
	movw R30,R2
	add R30,R24
	adc R31,R25
	ldd R4,z+0
	clr R5
	eor R6,R4
	eor R7,R5
	eor R6,R22
	eor R7,R23
	tst R6
	brne L119
	tst R7
	brne L119
X6:
	.dbline 236
	lds R24,_error
	subi R24,255    ; addi 1
	sts _error,R24
L119:
	.dbline 237
L116:
	.dbline 235
	ldd R0,y+0
	inc R0
	std y+0,R0
L118:
	.dbline 235
	ldd R24,y+0
	cpi R24,10
	brsh X13
	xjmp L115
X13:
	.dbline 238
	clr R0
	std y+0,R0
	xjmp L130
L127:
	.dbline 238
; 				 }
;              for (i=0;i<4;i++) {  //再对4列数据进行校验
	.dbline 239
;                  if (!(rfiddata[i]^rfiddata[i+5]^rfiddata[i+10]^rfiddata[i+15]^rfiddata[i+20]^rfiddata[i+25]^rfiddata[i+30]^rfiddata[i+35]^rfiddata[i+40]^rfiddata[i+45]==rfiddata[i+50])) error++;
	ldi R24,<_rfiddata+50
	ldi R25,>_rfiddata+50
	ldd R30,y+0
	clr R31
	add R30,R24
	adc R31,R25
	ldd R4,z+0
	ldi R24,<_rfiddata+45
	ldi R25,>_rfiddata+45
	ldd R30,y+0
	clr R31
	add R30,R24
	adc R31,R25
	ldd R5,z+0
	cp R5,R4
	brne L143
	ldi R22,1
	ldi R23,0
	xjmp L144
L143:
	clr R22
	clr R23
L144:
	ldi R24,<_rfiddata+5
	ldi R25,>_rfiddata+5
	ldd R30,y+0
	clr R31
	add R30,R24
	adc R31,R25
	ldd R4,z+0
	clr R5
	ldi R24,<_rfiddata
	ldi R25,>_rfiddata
	ldd R30,y+0
	clr R31
	add R30,R24
	adc R31,R25
	ldd R6,z+0
	clr R7
	eor R6,R4
	eor R7,R5
	ldi R24,<_rfiddata+10
	ldi R25,>_rfiddata+10
	ldd R30,y+0
	clr R31
	add R30,R24
	adc R31,R25
	ldd R4,z+0
	clr R5
	eor R6,R4
	eor R7,R5
	ldi R24,<_rfiddata+15
	ldi R25,>_rfiddata+15
	ldd R30,y+0
	clr R31
	add R30,R24
	adc R31,R25
	ldd R4,z+0
	clr R5
	eor R6,R4
	eor R7,R5
	ldi R24,<_rfiddata+20
	ldi R25,>_rfiddata+20
	ldd R30,y+0
	clr R31
	add R30,R24
	adc R31,R25
	ldd R4,z+0
	clr R5
	eor R6,R4
	eor R7,R5
	ldi R24,<_rfiddata+25
	ldi R25,>_rfiddata+25
	ldd R30,y+0
	clr R31
	add R30,R24
	adc R31,R25
	ldd R4,z+0
	clr R5
	eor R6,R4
	eor R7,R5
	ldi R24,<_rfiddata+30
	ldi R25,>_rfiddata+30
	ldd R30,y+0
	clr R31
	add R30,R24
	adc R31,R25
	ldd R4,z+0
	clr R5
	eor R6,R4
	eor R7,R5
	ldi R24,<_rfiddata+35
	ldi R25,>_rfiddata+35
	ldd R30,y+0
	clr R31
	add R30,R24
	adc R31,R25
	ldd R4,z+0
	clr R5
	eor R6,R4
	eor R7,R5
	ldi R24,<_rfiddata+40
	ldi R25,>_rfiddata+40
	ldd R30,y+0
	clr R31
	add R30,R24
	adc R31,R25
	ldd R4,z+0
	clr R5
	eor R6,R4
	eor R7,R5
	eor R6,R22
	eor R7,R23
	tst R6
	brne L131
	tst R7
	brne L131
X7:
	.dbline 239
	lds R24,_error
	subi R24,255    ; addi 1
	sts _error,R24
L131:
	.dbline 240
L128:
	.dbline 238
	ldd R0,y+0
	inc R0
	std y+0,R0
L130:
	.dbline 238
	ldd R24,y+0
	cpi R24,4
	brsh X14
	xjmp L127
X14:
	.dbline 241
;                  }
; 			 if (error==0) {
	lds R4,_error
	tst R4
	breq X15
	xjmp L145
X15:
	.dbline 241
	.dbline 242
; 			     beeps(1);
	ldi R16,1
	xcall _beeps
	.dbline 243
;                  UDR=10;
	ldi R24,10
	out 0xc,R24
	.dbline 244
;                  wait_tx();
	xcall _wait_tx
	.dbline 245
; 	             UDR=13;
	ldi R24,13
	out 0xc,R24
	.dbline 246
; 	             wait_tx();
	xcall _wait_tx
	.dbline 247
	clr R0
	std y+0,R0
	xjmp L150
L147:
	.dbline 247
	.dbline 248
	ldi R24,5
	ldd R0,y+0
	mul R24,R0
	movw R4,R0
	ldi R24,<_rfiddata+1
	ldi R25,>_rfiddata+1
	movw R30,R4
	add R30,R24
	adc R31,R25
	ldd R6,z+0
	ldi R24,4
	mul R24,R6
	movw R6,R0
	ldi R24,<_rfiddata
	ldi R25,>_rfiddata
	movw R30,R4
	add R30,R24
	adc R31,R25
	ldd R8,z+0
	ldi R24,8
	mul R24,R8
	mov R8,R0
	add R8,R6
	ldi R24,<_rfiddata+2
	ldi R25,>_rfiddata+2
	movw R30,R4
	add R30,R24
	adc R31,R25
	ldd R6,z+0
	ldi R24,2
	mul R24,R6
	add R8,R0
	ldi R24,<_rfiddata+3
	ldi R25,>_rfiddata+3
	movw R30,R4
	add R30,R24
	adc R31,R25
	ldd R4,z+0
	add R8,R4
	sts _data1,R8
	.dbline 249
	ldi R18,16
	ldi R19,0
	mov R16,R8
	clr R17
	xcall mod16s
	movw R30,R16
	ldi R24,<_ascii
	ldi R25,>_ascii
	add R30,R24
	adc R31,R25
	lpm R30,Z
	out 0xc,R30
	.dbline 250
	xcall _wait_tx
	.dbline 251
L148:
	.dbline 247
	ldd R0,y+0
	inc R0
	std y+0,R0
L150:
	.dbline 247
; 				 for (i=0;i<10;i++) {    //对10行数据进行校验
	ldd R24,y+0
	cpi R24,10
	brsh X16
	xjmp L147
X16:
	.dbline 252
; 			         data1=(rfiddata[i*5]*8)+(rfiddata[i*5+1]*4)+(rfiddata[i*5+2]*2)+rfiddata[i*5+3];
;                      UDR=ascii[data1%16];
; 					 wait_tx();
; 				 } 
; 				} 
L145:
	.dbline 253
; 		    }
L113:
	.dbline 254
L105:
	.dbline -2
L22:
	adiw R28,12
	xcall pop_gset5
	.dbline 0 ; func end
	ret
	.dbsym l j 1 c
	.dbsym r bits 22 i
	.dbsym l i 0 c
	.dbend
	.dbfunc e int0_isr _int0_isr fV
	.even
_int0_isr::
	.dbline -1
	.dbline 259
; 		 }
; 	} 
; 
; 	
; void int0_isr(void)
; {
	.dbline -2
L154:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e main _main fV
;            t_i -> <dead>
;              j -> <dead>
;              i -> <dead>
	.even
_main::
	.dbline -1
	.dbline 265
;  //external interupt on INT0
; }
; 
; 
; void main(void)
; {
	.dbline 267
;     unsigned char i,j,t_i;
;     init_devices();
	xcall _init_devices
	.dbline 268
;     RFW_1();
	sbi 0x15,6
	.dbline 269
;     okled0();
	cbi 0x15,0
	xjmp L157
L156:
	.dbline 270
; 	while (1) {
	.dbline 271
; 		if (run==1) { 
	lds R24,_run
	cpi R24,1
	brne L159
	.dbline 271
	.dbline 272
; 			R_H4001();
	xcall _R_H4001
	.dbline 273
; 			led();  
	ldi R24,128
	ldi R25,0
	in R2,0x12
	clr R3
	eor R2,R24
	eor R3,R25
	out 0x12,R2
	.dbline 274
; 			run=0;
	clr R2
	sts _run,R2
	.dbline 275
; 			}
L159:
	.dbline 276
L157:
	.dbline 270
	xjmp L156
X17:
	.dbline -2
L155:
	.dbline 0 ; func end
	ret
	.dbsym l t_i 1 c
	.dbsym l j 1 c
	.dbsym l i 1 c
	.dbend
	.area bss(ram, con, rel)
	.dbfile D:\TK5552\Iccavr\H4001\H4001.c
_rfiddata::
	.blkb 54
	.dbsym e rfiddata _rfiddata A[54:54]c
_decode::
	.blkb 192
	.dbsym e decode _decode A[192:192]c
_rxdata::
	.blkb 1
	.dbsym e rxdata _rxdata c
_data1::
	.blkb 1
	.dbsym e data1 _data1 c
_timer_count::
	.blkb 1
	.dbsym e timer_count _timer_count c

⌨️ 快捷键说明

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